diff --git a/node/src/chain_spec/gtest_genesis.rs b/node/src/chain_spec/gtest_genesis.rs index 0dfe9fbbc0121e83e4ae00550621ed1a915e3901..dd4d6882c687b86dc9a14c50d5bc5e823e93f0fd 100644 --- a/node/src/chain_spec/gtest_genesis.rs +++ b/node/src/chain_spec/gtest_genesis.rs @@ -157,6 +157,8 @@ pub fn build_genesis( let mut counter_cert = 0u32; // counter for smith certifications let mut counter_smith_cert = 0u32; + // track inactive identities + let mut inactive_identities = HashMap::<u32, &str>::new(); // declare variables to fill in genesis // ------------------------------------- @@ -180,9 +182,9 @@ pub fn build_genesis( let mut smith_certs_by_receiver = BTreeMap::new(); // SIMPLE WALLETS // - for (pubkey, balance) in genesis_data.wallets { + for (pubkey, balance) in &genesis_data.wallets { // check existential deposit - if balance < EXISTENTIAL_DEPOSIT { + if balance < &EXISTENTIAL_DEPOSIT { log::warn!("wallet {pubkey} has {balance} which is below {EXISTENTIAL_DEPOSIT}"); fatal = true; } @@ -195,7 +197,7 @@ pub fn build_genesis( pubkey.clone(), GenesisAccountData { random_id: H256(blake2_256(&(wallet_index, &pubkey).encode())), - balance, + balance: *balance, is_identity: false, }, ); @@ -252,7 +254,7 @@ pub fn build_genesis( }, }); } else { - log::info!("ignoring expired identity {name}"); + inactive_identities.insert(identity.index, name); }; // insert the membershup data (only if not expired) @@ -268,8 +270,8 @@ pub fn build_genesis( // Technical Comittee // // NOTE : when changing owner key, the technical committee is not changed - for name in genesis_data.technical_committee { - if let Some(identity) = &genesis_data.identities.get(&name) { + for name in &genesis_data.technical_committee { + if let Some(identity) = &genesis_data.identities.get(name) { technical_committee_members.push(identity.owner_key.clone()); } else { return Err(format!("Identity '{}' not exist", name)); @@ -292,14 +294,14 @@ pub fn build_genesis( } // SMITHS SUB-WOT // - for (name, smith_data) in genesis_data.smiths { + for (name, smith_data) in &genesis_data.smiths { let identity = &genesis_data .identities - .get(&name) + .get(&name.clone()) .ok_or(format!("Identity '{}' not exist", &name))?; // Initial authorities and session keys - let session_keys_bytes = if let Some(declared_session_keys) = smith_data.session_keys { + let session_keys_bytes = if let Some(declared_session_keys) = &smith_data.session_keys { counter_online_authorities += 1; // insert authority as online initial_authorities.insert(identity.index, (identity.owner_key.clone(), true)); @@ -392,31 +394,48 @@ pub fn build_genesis( fatal = true; } + // some more checks + assert_eq!(identities.len(), memberships.len()); + assert_eq!(smith_memberships.len(), initial_authorities.len()); + assert_eq!(smith_memberships.len(), session_keys_map.len()); + assert_eq!( + identity_index.len(), + identities.len() + inactive_identities.len() + ); + assert_eq!( + accounts.len(), + identity_index.len() + &genesis_data.wallets.len() + ); + // no inactive tech comm + for tech_com_member in &genesis_data.technical_committee { + assert!(!inactive_identities.values().any(|&v| v == tech_com_member)); + } + // no inactive smith + for (smith, _) in &genesis_data.smiths { + assert!(!inactive_identities.values().any(|&v| v == smith)); + } + // give genesis info log::info!( "inserted genesis with: - - {} accounts - - {} members in technical committee - - {} total identities - - {} active identities - - {} memberships - - {} smith memberships - - {} initial autorities + - {} accounts ({} identities, {} simple wallets) + - {} total identities ({} active, {} inactive) + - {} smiths - {} initial online authorities - - {} session keys - {} certifications - - {} smith certifications", + - {} smith certifications + - {} members in technical committee", accounts.len(), - technical_committee_members.len(), + identity_index.len(), + &genesis_data.wallets.len(), identity_index.len(), identities.len(), - memberships.len(), + inactive_identities.len(), smith_memberships.len(), - initial_authorities.len(), counter_online_authorities, - session_keys_map.len(), counter_cert, counter_smith_cert, + technical_committee_members.len(), ); // check the logs to see all the fatal error preventing from starting gtest currency diff --git a/resources/gtest.json b/resources/gtest.json index a73edf08223c8821fec0e506a9b4234fd4bf5da5..9050fa621763fa5c49f9e60de20910647d2bdefd 100644 --- a/resources/gtest.json +++ b/resources/gtest.json @@ -1,11 +1,11 @@ { "first_ud": 10000, "first_ud_reeval": 100800, - "initial_monetary_mass": 531381, + "initial_monetary_mass": 531481, "identities": { "old_user1": { "index": 7777, - "owner_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY", + "owner_key": "5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw", "membership_expire_on": 0, "next_cert_issuable_on": 0, "balance": 12, @@ -15,7 +15,7 @@ }, "old_user2": { "index": 8888, - "owner_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY", + "owner_key": "5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL", "membership_expire_on": 0, "next_cert_issuable_on": 0, "balance": 12, @@ -25,7 +25,7 @@ }, "old_user3": { "index": 6666, - "owner_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY", + "owner_key": "5Fxune7f71ZbpP2FoY3mhYcmM596Erhv1gRue4nsPwkxMR4n", "membership_expire_on": 0, "next_cert_issuable_on": 0, "balance": 12, @@ -35,7 +35,7 @@ }, "elois": { "index": 2, - "owner_key": "5H95G8bwuf4yyNNNa83hDhj7wpYaSRhZiGezZ9TDbyqNdAhY", + "owner_key": "5CUjxa4wVKMj3FqKdqAUf7zcEMr4MYAjXeWmUf44B41neLmJ", "membership_expire_on": 1000, "next_cert_issuable_on": 100, "balance": 10000, @@ -187,7 +187,7 @@ "Gamaliel": { "index": 3994, "owner_key": "5DS9iWBXW56N7XbeVyyp6CB7m4LeE5fGJYrUR9HDSStT5JN9", - "membership_expire_on": 1000, + "membership_expire_on": 0, "next_cert_issuable_on": 100, "balance": 10000, "certs_received": { @@ -199,19 +199,21 @@ "kapis": { "index": 3883, "owner_key": "5HJyyim1W8Y1UD8LAbBL7cQQLjGofMoD45RtRSAmhkFQxrvs", - "membership_expire_on": 1000, + "membership_expire_on": 22, "next_cert_issuable_on": 100, "balance": 10000, "certs_received": { "DavidB": 100, "wellno1": 100, - "Gamaliel": 100 + "Gamaliel": 100, + "HugoTrentesaux": 100, + "elois": 100 } }, "DavidB": { "index": 2277, "owner_key": "5HKTDdXHj3MojiPRcEsVU9JaHyif5gg2br1sy3JZbsjuQebP", - "membership_expire_on": 1000, + "membership_expire_on": 0, "next_cert_issuable_on": 100, "balance": 10000, "certs_received": { @@ -223,7 +225,7 @@ "wellno1": { "index": 9999, "owner_key": "5DyEZNkSuK5i8wZiXtvL63zqpye9zPBsPRauCjQkMuVzZYX7", - "membership_expire_on": 1000, + "membership_expire_on": 0, "next_cert_issuable_on": 100, "balance": 10000, "certs_received": { @@ -268,7 +270,8 @@ "cgeek", "elois", "HugoTrentesaux", - "poka" + "poka", + "tuxmain" ] }, "cgeek": { @@ -303,7 +306,9 @@ "certs_received": [ "elois", "tuxmain", - "HugoTrentesaux" + "HugoTrentesaux", + "1000i100", + "vit" ] } }, @@ -313,7 +318,7 @@ "5C59KZ3X6AEt23FSLxsLvtXqN41SHyaWa5CQmXiYLUek3ECd": 24507, "5C5KjPbZfvwFXh24KkKEjeofCNng2tZM4YjJN8mMYhLAzn8H": 1042, "5C5VrnckbfuizDDFn9ubcQDEKSnRFbB3jfa5kMaQxmRFzLJX": 10800, - "5C5YfjAyZnLPfyMQNreng5knFW87PRTVphRhPUXpWszF7sB9": 100, + "5C5YfjAyZnLPfyMQNreng5knFW87PRTVphRhPUXpWszF7sB9": 200, "5C5YfjAyZnLPfyMQNreng5knFW87PRTVphRkQoupWszF7pte": 359592 }, "sudo_key": "5Hm8sBbwuLAU99dBezvgtnRmZCrUy9mhqmbQMFyGTaeATYg7",