Quellcode durchsuchen

chainspec-builder: optional arg to specify initial members

Mokhtar Naamani vor 4 Jahren
Ursprung
Commit
897bea9382

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
node/res/members_nicaea.json


+ 2 - 2
node/src/chain_spec.rs

@@ -128,7 +128,7 @@ impl Alternative {
                             get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
                         ],
                         crate::proposals_config::development(),
-                        vec![],
+                        crate::initial_members::none(),
                     )
                 },
                 Vec::new(),
@@ -163,7 +163,7 @@ impl Alternative {
                             get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
                         ],
                         crate::proposals_config::development(),
-                        vec![],
+                        crate::initial_members::none(),
                     )
                 },
                 Vec::new(),

+ 6 - 40
node/src/initial_members.rs

@@ -1,45 +1,11 @@
-use serde_json::Result;
-
 use super::chain_spec::{membership, AccountId, Moment};
-// use sp_core::crypto::{AccountId32, Ss58Codec};
-
-// use serde::{Deserialize, Serialize};
-
-// #[derive(Serialize, Deserialize)]
-// pub struct Member {
-//     pub member_id: u64,
-//     pub root_address: String,
-//     pub controller_address: String,
-//     pub handle: String,
-//     pub avatar_uri: String,
-//     pub about: String,
-//     pub registered_at_time: u64,
-// }
+use std::{fs, path::Path};
 
-fn parse_members_json() -> Result<Vec<membership::genesis::Member<u64, AccountId, Moment>>> {
-    let data = include_str!("../res/members_nicaea.json");
-    serde_json::from_str(data)
+pub fn from_json(data_file: &Path) -> Vec<membership::genesis::Member<u64, AccountId, Moment>> {
+    let data = fs::read_to_string(data_file).expect("Failed reading file");
+    serde_json::from_str(&data).expect("failed parsing members data")
 }
 
-// fn decode_address(address: String) -> AccountId32 {
-//     AccountId32::from_ss58check(address.as_ref()).expect("failed to decode account id")
-// }
-
-pub fn initial_members() -> Vec<membership::genesis::Member<u64, AccountId, Moment>> {
-    parse_members_json().expect("failed parsing members data")
-
-    // let members = parse_members_json().expect("failed parsing members data");
-
-    // members
-    //     .into_iter()
-    //     .map(|member| membership::genesis::Member {
-    //         member_id: member.member_id,
-    //         root_account: decode_address(member.root_address.clone()),
-    //         controller_account: decode_address(member.controller_address),
-    //         handle: member.handle,
-    //         avatar_uri: member.avatar_uri,
-    //         about: member.about,
-    //         registered_at_time: member.registered_at_time,
-    //     })
-    //     .collect()
+pub fn none() -> Vec<membership::genesis::Member<u64, AccountId, Moment>> {
+    vec![]
 }

+ 1 - 1
runtime-modules/membership/src/genesis.rs

@@ -4,7 +4,7 @@ use crate::{GenesisConfig, Trait};
 use common::currency::BalanceOf;
 use serde::{Deserialize, Serialize};
 
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
 pub struct Member<MemberId, AccountId, Moment> {
     pub member_id: MemberId,
     pub root_account: AccountId,

+ 0 - 2
utils/chain-spec-builder/Cargo.toml

@@ -6,8 +6,6 @@ name = 'chain-spec-builder'
 version = '3.0.0'
 
 [dependencies]
-# serde = { version = "1.0.102", features = ["derive"] }
-# serde_json = '1.0'
 ansi_term = "0.12.1"
 rand = "0.7.2"
 structopt = "0.3.8"

+ 40 - 4
utils/chain-spec-builder/src/main.rs

@@ -24,7 +24,7 @@ use rand::{distributions::Alphanumeric, rngs::OsRng, Rng};
 use structopt::StructOpt;
 
 use joystream_node::{
-    chain_spec::{self, chain_spec_properties, AccountId},
+    chain_spec::{self, chain_spec_properties, membership, AccountId, Moment},
     initial_members, proposals_config,
 };
 use sc_chain_spec::ChainType;
@@ -58,6 +58,9 @@ enum ChainSpecBuilder {
         /// The path where the chain spec should be saved.
         #[structopt(long, short, default_value = "./chain_spec.json")]
         chain_spec_path: PathBuf,
+        /// The path to an initial members data
+        #[structopt(long, short)]
+        initial_members_path: Option<PathBuf>,
     },
     /// Create a new chain spec with the given number of authorities and endowed
     /// accounts. Random keys will be generated as required.
@@ -78,6 +81,9 @@ enum ChainSpecBuilder {
         /// `auth-0`, `auth-1`, etc.
         #[structopt(long, short)]
         keystore_path: Option<PathBuf>,
+        /// The path to an initial members data
+        #[structopt(long, short)]
+        initial_members_path: Option<PathBuf>,
     },
 }
 
@@ -93,12 +99,27 @@ impl ChainSpecBuilder {
             } => chain_spec_path.as_path(),
         }
     }
+
+    /// Returns the path where the chain spec should be saved.
+    fn initial_members_path(&self) -> &Option<PathBuf> {
+        match self {
+            ChainSpecBuilder::New {
+                initial_members_path,
+                ..
+            } => initial_members_path,
+            ChainSpecBuilder::Generate {
+                initial_members_path,
+                ..
+            } => initial_members_path,
+        }
+    }
 }
 
 fn genesis_constructor(
     authority_seeds: &[String],
     endowed_accounts: &[AccountId],
     sudo_account: &AccountId,
+    genesis_members: &Vec<membership::genesis::Member<u64, AccountId, Moment>>,
 ) -> chain_spec::GenesisConfig {
     let authorities = authority_seeds
         .iter()
@@ -111,7 +132,7 @@ fn genesis_constructor(
         sudo_account.clone(),
         endowed_accounts.to_vec(),
         proposals_config::default(),
-        initial_members::initial_members(),
+        genesis_members.clone(),
     )
 }
 
@@ -119,6 +140,7 @@ fn generate_chain_spec(
     authority_seeds: Vec<String>,
     endowed_accounts: Vec<String>,
     sudo_account: String,
+    genesis_members: Vec<membership::genesis::Member<u64, AccountId, Moment>>,
 ) -> Result<String, String> {
     let parse_account = |address: &String| {
         AccountId::from_string(address)
@@ -143,7 +165,14 @@ fn generate_chain_spec(
         "Joystream Testnet",
         "joy_testnet",
         ChainType::Development,
-        move || genesis_constructor(&authority_seeds, &endowed_accounts, &sudo_account),
+        move || {
+            genesis_constructor(
+                &authority_seeds,
+                &endowed_accounts,
+                &sudo_account,
+                &genesis_members,
+            )
+        },
         vec![],
         Some(telemetry_endpoints),
         Some(&*"/joy/testnet/0"),
@@ -213,6 +242,13 @@ fn main() -> Result<(), String> {
 
     let builder = ChainSpecBuilder::from_args();
     let chain_spec_path = builder.chain_spec_path().to_path_buf();
+    let initial_members_path = builder.initial_members_path();
+
+    let members = if let Some(path) = initial_members_path {
+        initial_members::from_json(path.as_path())
+    } else {
+        initial_members::none()
+    };
 
     let (authority_seeds, endowed_accounts, sudo_account) = match builder {
         ChainSpecBuilder::Generate {
@@ -254,7 +290,7 @@ fn main() -> Result<(), String> {
         } => (authority_seeds, endowed_accounts, sudo_account),
     };
 
-    let json = generate_chain_spec(authority_seeds, endowed_accounts, sudo_account)?;
+    let json = generate_chain_spec(authority_seeds, endowed_accounts, sudo_account, members)?;
 
     fs::write(chain_spec_path, json).map_err(|err| err.to_string())
 }

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.