diff --git a/end2end-tests/cucumber-genesis/default.json b/end2end-tests/cucumber-genesis/default.json index 9b59a91533dc42d9ca0dbc2ec4fbbe72cdb53406..2a4229359214bad31681038d8af52bf8534897f9 100644 --- a/end2end-tests/cucumber-genesis/default.json +++ b/end2end-tests/cucumber-genesis/default.json @@ -2,10 +2,8 @@ "first_ud": 1000, "first_ud_reeval": 100, "genesis_parameters": { - "genesis_certs_expire_on": 100000, "genesis_certs_min_received": 2, "genesis_memberships_expire_on": 100000, - "genesis_smith_certs_expire_on": 100000, "genesis_smith_certs_min_received": 2, "genesis_smith_memberships_expire_on": 100000 }, diff --git a/end2end-tests/cucumber-genesis/wot.json b/end2end-tests/cucumber-genesis/wot.json index ac93ccc96dbfdddb33c2f11683d387b7e77710e1..9640372aa23180df03b8cc1cb4f7ee65360cc9b6 100644 --- a/end2end-tests/cucumber-genesis/wot.json +++ b/end2end-tests/cucumber-genesis/wot.json @@ -2,10 +2,8 @@ "first_ud": 1000, "first_ud_reeval": 100, "genesis_parameters": { - "genesis_certs_expire_on": 100000, "genesis_certs_min_received": 2, "genesis_memberships_expire_on": 100000, - "genesis_smith_certs_expire_on": 100000, "genesis_smith_certs_min_received": 2, "genesis_smith_memberships_expire_on": 100000 }, diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs index 57d8aa0c00154d4e36a33547c481376b51907195..38dc68b41d80b9c64777782af81a8f92bccd0492 100644 --- a/node/src/chain_spec.rs +++ b/node/src/chain_spec.rs @@ -57,8 +57,7 @@ where fn clique_wot( initial_identities_len: usize, - cert_validity_period: common_runtime::BlockNumber, -) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, common_runtime::BlockNumber>> { +) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, Option<common_runtime::BlockNumber>>> { let mut certs_by_issuer = BTreeMap::new(); for i in 1..=initial_identities_len { certs_by_issuer.insert( @@ -66,7 +65,7 @@ fn clique_wot( (1..=initial_identities_len) .filter_map(|j| { if i != j { - Some((j as IdtyIndex, cert_validity_period)) + Some((j as IdtyIndex, None)) } else { None } diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs index 6836f23d34b6c1640f9877c7c6e8b415594d44b9..7f1551147bca151c732e4fe7c71df4b1d6acf293 100644 --- a/node/src/chain_spec/gdev.rs +++ b/node/src/chain_spec/gdev.rs @@ -306,7 +306,7 @@ fn gen_genesis_for_local_chain( smith_cert_period: 15, smith_cert_max_by_issuer: 8, smith_cert_min_received_cert_to_issue_cert: 2, - smith_cert_validity_period: 1_000, + smith_cert_validity_period, smith_membership_period, smith_pending_membership_period: 500, smiths_wot_first_cert_issuable_on: 20, @@ -381,7 +381,7 @@ fn gen_genesis_for_local_chain( }, cert: CertConfig { apply_cert_period_at_genesis: false, - certs_by_receiver: clique_wot(initial_identities.len(), cert_validity_period), + certs_by_receiver: clique_wot(initial_identities.len()), }, smiths_membership: SmithsMembershipConfig { memberships: (1..=initial_smiths_len) @@ -390,7 +390,7 @@ fn gen_genesis_for_local_chain( }, smiths_cert: SmithsCertConfig { apply_cert_period_at_genesis: false, - certs_by_receiver: clique_wot(initial_smiths_len, smith_cert_validity_period), + certs_by_receiver: clique_wot(initial_smiths_len), }, universal_dividend: UniversalDividendConfig { first_reeval: 100, diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs index 1b47ee55d82bb80952cc21c89f06cd96b80449ad..800f28eb57725b71b6f66424fc75e38714f84dc7 100644 --- a/node/src/chain_spec/gen_genesis_data.rs +++ b/node/src/chain_spec/gen_genesis_data.rs @@ -26,7 +26,7 @@ const EXISTENTIAL_DEPOSIT: u64 = 100; #[derive(Clone)] pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> { pub accounts: BTreeMap<AccountId, GenesisAccountData<u64>>, - pub certs_by_receiver: BTreeMap<u32, BTreeMap<u32, u32>>, + pub certs_by_receiver: BTreeMap<u32, BTreeMap<u32, Option<u32>>>, pub first_ud: u64, pub first_ud_reeval: u32, pub identities: Vec<(String, AccountId)>, @@ -35,7 +35,7 @@ pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> { pub memberships: BTreeMap<u32, MembershipData>, pub parameters: Parameters, pub session_keys_map: BTreeMap<AccountId, SessionKeys>, - pub smiths_certs_by_receiver: BTreeMap<u32, BTreeMap<u32, u32>>, + pub smiths_certs_by_receiver: BTreeMap<u32, BTreeMap<u32, Option<u32>>>, pub smiths_memberships: BTreeMap<u32, MembershipData>, pub sudo_key: Option<AccountId>, pub technical_committee_members: Vec<AccountId>, @@ -43,10 +43,8 @@ pub struct GenesisData<Parameters: DeserializeOwned, SessionKeys: Decode> { #[derive(Default, Deserialize, Serialize)] pub struct ParamsAppliedAtGenesis { - pub genesis_certs_expire_on: u32, pub genesis_certs_min_received: u32, pub genesis_memberships_expire_on: u32, - pub genesis_smith_certs_expire_on: u32, pub genesis_smith_certs_min_received: u32, pub genesis_smith_memberships_expire_on: u32, } @@ -130,10 +128,8 @@ where first_ud_reeval, genesis_parameters: ParamsAppliedAtGenesis { - genesis_certs_expire_on, genesis_certs_min_received, genesis_memberships_expire_on, - genesis_smith_certs_expire_on, genesis_smith_certs_min_received, genesis_smith_memberships_expire_on, }, @@ -237,7 +233,7 @@ where let issuer_index = idty_index_of .get(issuer) .ok_or(format!("Identity '{}' not exist", issuer))?; - receiver_certs.insert(*issuer_index, genesis_certs_expire_on); + receiver_certs.insert(*issuer_index, None); } certs_by_receiver.insert(*issuer_index, receiver_certs); } @@ -319,7 +315,7 @@ where let issuer_index = idty_index_of .get(receiver) .ok_or(format!("Identity '{}' not exist", receiver))?; - receiver_certs.insert(*issuer_index, genesis_smith_certs_expire_on); + receiver_certs.insert(*issuer_index, None); } smiths_certs_by_receiver.insert(*idty_index, receiver_certs); diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs index a7e20c39d5103daa613252e3edd5b630c5162e6a..7360129340499cb52eced8f207519c98872af12d 100644 --- a/pallets/certification/src/lib.rs +++ b/pallets/certification/src/lib.rs @@ -90,9 +90,11 @@ pub mod pallet { // GENESIS STUFFĂ‚ // #[pallet::genesis_config] + #[allow(clippy::type_complexity)] pub struct GenesisConfig<T: Config<I>, I: 'static = ()> { pub apply_cert_period_at_genesis: bool, - pub certs_by_receiver: BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, T::BlockNumber>>, + pub certs_by_receiver: + BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, Option<T::BlockNumber>>>, } #[cfg(feature = "std")] @@ -128,7 +130,8 @@ pub mod pallet { received_count: issuers.len() as u32, }); - for (issuer, removable_on) in issuers { + let mut issuers_: Vec<_> = Vec::with_capacity(issuers.len()); + for (issuer, maybe_removable_on) in issuers { // Count issued certs cert_meta_by_issuer .entry(*issuer) @@ -139,9 +142,13 @@ pub mod pallet { }) .issued_count += 1; + // Compute and store removable_on + let removable_on = maybe_removable_on.unwrap_or_else(T::ValidityPeriod::get); + issuers_.push((*issuer, removable_on)); + // Prepare CertsRemovableOn certs_removable_on - .entry(*removable_on) + .entry(removable_on) .or_default() .push((*issuer, *receiver)); @@ -158,9 +165,8 @@ pub mod pallet { } // Write CertsByReceiver - let mut issuers: Vec<_> = issuers.iter().collect(); - issuers.sort(); - CertsByReceiver::<T, I>::insert(receiver, issuers); + issuers_.sort(); + CertsByReceiver::<T, I>::insert(receiver, issuers_); } // Write StorageIdtyCertMeta diff --git a/pallets/certification/src/tests.rs b/pallets/certification/src/tests.rs index 2667ecce5b552287cb3898b6ed5d0c75d87def9f..fd4632bcd7f4f89438f872d69f9ad5238cfc9e29 100644 --- a/pallets/certification/src/tests.rs +++ b/pallets/certification/src/tests.rs @@ -42,8 +42,8 @@ fn test_cannot_certify_self() { apply_cert_period_at_genesis: true, certs_by_receiver: btreemap![ 0 => btreemap![ - 1 => 5, - 2 => 5, + 1 => Some(5), + 2 => Some(5), ], ], }) @@ -63,16 +63,16 @@ fn test_genesis_build() { apply_cert_period_at_genesis: true, certs_by_receiver: btreemap![ 0 => btreemap![ - 1 => 7, - 2 => 9, + 1 => Some(7), + 2 => Some(9), ], 1 => btreemap![ - 0 => 10, - 2 => 3, + 0 => Some(10), + 2 => Some(3), ], 2 => btreemap![ - 0 => 5, - 1 => 4, + 0 => Some(5), + 1 => Some(4), ], ], }) @@ -132,16 +132,16 @@ fn test_cert_period() { apply_cert_period_at_genesis: true, certs_by_receiver: btreemap![ 0 => btreemap![ - 1 => 10, - 2 => 10, + 1 => Some(10), + 2 => Some(10), ], 1 => btreemap![ - 0 => 10, - 2 => 10, + 0 => Some(10), + 2 => Some(10), ], 2 => btreemap![ - 0 => 10, - 1 => 10, + 0 => Some(10), + 1 => Some(10), ], ], }) diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs index b32f0b46b7e1c36b27ce7ac04c131f6aa55a6a8e..458c40d119721b7bf08aa56924cf2132c8a91a74 100644 --- a/pallets/duniter-wot/src/mock.rs +++ b/pallets/duniter-wot/src/mock.rs @@ -347,7 +347,7 @@ pub fn run_to_block(n: u64) { fn clique_wot( initial_identities_len: usize, cert_validity_period: u64, -) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, u64>> { +) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, Option<u64>>> { let mut certs_by_issuer = BTreeMap::new(); for i in 1..=initial_identities_len { certs_by_issuer.insert( @@ -355,7 +355,7 @@ fn clique_wot( (1..=initial_identities_len) .filter_map(|j| { if i != j { - Some((j as IdtyIndex, cert_validity_period)) + Some((j as IdtyIndex, Some(cert_validity_period))) } else { None } diff --git a/runtime/gdev/tests/common/mod.rs b/runtime/gdev/tests/common/mod.rs index 247c0e78a4d86a745b722c249b4f0fc0c9bf145a..5d64a4cef079c999783c06f47b36ebc6244f1a3b 100644 --- a/runtime/gdev/tests/common/mod.rs +++ b/runtime/gdev/tests/common/mod.rs @@ -395,7 +395,7 @@ pub fn make_secondary_vrf_pre_digest( fn clique_wot( initial_identities_len: usize, cert_validity_period: common_runtime::BlockNumber, -) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, common_runtime::BlockNumber>> { +) -> BTreeMap<IdtyIndex, BTreeMap<IdtyIndex, Option<common_runtime::BlockNumber>>> { let mut certs_by_issuer = BTreeMap::new(); for i in 1..=initial_identities_len { certs_by_issuer.insert( @@ -403,7 +403,7 @@ fn clique_wot( (1..=initial_identities_len) .filter_map(|j| { if i != j { - Some((j as IdtyIndex, cert_validity_period)) + Some((j as IdtyIndex, Some(cert_validity_period))) } else { None }