diff --git a/end2end-tests/cucumber-features/certification.feature b/end2end-tests/cucumber-features/certification.feature index 33821859bf9fa0a61d8da4a7bae7ee0b9a2ef631..77bfc57465173982c3dbd914ea8711669b8954b2 100644 --- a/end2end-tests/cucumber-features/certification.feature +++ b/end2end-tests/cucumber-features/certification.feature @@ -3,5 +3,6 @@ Feature: Certification Scenario: Dave certifies Alice + When 2 blocks later When dave certifies alice Then alice should be certified by dave diff --git a/end2end-tests/cucumber-genesis/wot.json b/end2end-tests/cucumber-genesis/wot.json index 7b4639842049082c2b4393b799c7fc8d85aa96b2..205481324b92c9749c7d8bb962acab36de00b591 100644 --- a/end2end-tests/cucumber-genesis/wot.json +++ b/end2end-tests/cucumber-genesis/wot.json @@ -4,12 +4,12 @@ "identities": { "Alice": { "balance": 1000, - "certs": ["Bob", "Charlie", "Dave"], + "certs": ["Bob", "Charlie"], "pubkey": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" }, "Bob": { "balance": 1000, - "certs": ["Alice", "Charlie", "Dave"], + "certs": ["Alice", "Charlie"], "pubkey": "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty" }, "Charlie": { @@ -19,13 +19,13 @@ }, "Dave": { "balance": 1000, - "certs": [], + "certs": ["Alice", "Bob"], "pubkey": "5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy" } }, "parameters": { "babe_epoch_duration": 30, - "cert_period": 15, + "cert_period": 2, "cert_max_by_issuer": 10, "cert_min_received_cert_to_issue_cert": 2, "cert_validity_period": 1000, diff --git a/end2end-tests/tests/cucumber_tests.rs b/end2end-tests/tests/cucumber_tests.rs index 13d88217d7109f84ca59248c49f00e3f865d78f4..dbe9e4cc8cce4dbe243fa59a9120824eab946ed5 100644 --- a/end2end-tests/tests/cucumber_tests.rs +++ b/end2end-tests/tests/cucumber_tests.rs @@ -278,15 +278,23 @@ async fn should_be_certified_by( .await? .unwrap(); - let _certification = world + let issuers = world .api() .storage() .cert() - .storage_certs_by_issuer(issuer_index, receiver_index, None) - .await? - .ok_or_else(|| anyhow::anyhow!("no certification found from {} to {}", issuer, receiver))?; + .certs_by_receiver(receiver_index, None) + .await?; - Ok(()) + match issuers.binary_search_by(|(issuer_, _)| issuer_index.cmp(issuer_)) { + Ok(_) => Ok(()), + Err(_) => Err(anyhow::anyhow!( + "no certification found from {} to {}: {:?}", + issuer, + receiver, + issuers + ) + .into()), + } } // ============================================================ diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs index 299482d1766d3afab8739bb5266292ed455069c2..93290c01a55b3ea566507ac4fa276cb1441851c0 100644 --- a/node/src/chain_spec/gdev.rs +++ b/node/src/chain_spec/gdev.rs @@ -380,7 +380,7 @@ fn gen_genesis_for_local_chain( }, cert: CertConfig { apply_cert_period_at_genesis: false, - certs_by_issuer: clique_wot(initial_identities.len(), cert_validity_period), + certs_by_receiver: clique_wot(initial_identities.len(), cert_validity_period), }, smiths_membership: SmithsMembershipConfig { memberships: (1..=initial_smiths_len) @@ -389,7 +389,7 @@ fn gen_genesis_for_local_chain( }, smiths_cert: SmithsCertConfig { apply_cert_period_at_genesis: false, - certs_by_issuer: clique_wot(initial_smiths_len, smith_cert_validity_period), + certs_by_receiver: clique_wot(initial_smiths_len, smith_cert_validity_period), }, smiths_collective: Default::default(), universal_dividend: UniversalDividendConfig { @@ -427,7 +427,7 @@ fn genesis_data_to_gdev_genesis_conf( ) -> gdev_runtime::GenesisConfig { let super::gen_genesis_data::GenesisData { accounts, - certs_by_issuer, + certs_by_receiver, first_ud, first_ud_reeval, identities, @@ -436,7 +436,7 @@ fn genesis_data_to_gdev_genesis_conf( memberships, parameters, session_keys_map, - smiths_certs_by_issuer, + smiths_certs_by_receiver, smiths_memberships, sudo_key, } = genesis_data; @@ -486,12 +486,12 @@ fn genesis_data_to_gdev_genesis_conf( }, cert: CertConfig { apply_cert_period_at_genesis: true, - certs_by_issuer, + certs_by_receiver, }, membership: MembershipConfig { memberships }, smiths_cert: SmithsCertConfig { apply_cert_period_at_genesis: true, - certs_by_issuer: smiths_certs_by_issuer, + certs_by_receiver: smiths_certs_by_receiver, }, smiths_membership: SmithsMembershipConfig { memberships: smiths_memberships, diff --git a/node/src/chain_spec/gen_genesis_data.rs b/node/src/chain_spec/gen_genesis_data.rs index 24751d6154fb738474bf0194cf83886b90a0631d..dd552e9be56a3d0c555b8588dd8be0d3be3bbac1 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_issuer: BTreeMap<u32, BTreeMap<u32, u32>>, + pub certs_by_receiver: BTreeMap<u32, BTreeMap<u32, 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_issuer: BTreeMap<u32, BTreeMap<u32, u32>>, + pub smiths_certs_by_receiver: BTreeMap<u32, BTreeMap<u32, u32>>, pub smiths_memberships: BTreeMap<u32, MembershipData>, pub sudo_key: Option<AccountId>, } @@ -209,19 +209,19 @@ where // CERTIFICATIONS // - let mut certs_by_issuer = BTreeMap::new(); + let mut certs_by_receiver = BTreeMap::new(); for (idty_name, identity) in &identities { let issuer_index = idty_index_of .get(&idty_name) .ok_or(format!("Identity '{}' not exist", &idty_name))?; - let mut issuer_certs = BTreeMap::new(); - for receiver in &identity.certs { - let receiver_index = idty_index_of - .get(receiver) - .ok_or(format!("Identity '{}' not exist", receiver))?; - issuer_certs.insert(*receiver_index, genesis_certs_expire_on); + let mut receiver_certs = BTreeMap::new(); + for issuer in &identity.certs { + let issuer_index = idty_index_of + .get(issuer) + .ok_or(format!("Identity '{}' not exist", issuer))?; + receiver_certs.insert(*issuer_index, genesis_certs_expire_on); } - certs_by_issuer.insert(*issuer_index, issuer_certs); + certs_by_receiver.insert(*issuer_index, receiver_certs); } // SMITHS SUB-WOT // @@ -230,7 +230,7 @@ where let mut online_authorities_counter = 0; let mut session_keys_map = BTreeMap::new(); let mut smiths_memberships = BTreeMap::new(); - let mut smiths_certs_by_issuer = BTreeMap::new(); + let mut smiths_certs_by_receiver = BTreeMap::new(); for (idty_name, smith_data) in smith_identities { let idty_index = idty_index_of .get(&idty_name) @@ -284,14 +284,14 @@ where ); // Certifications - let mut issuer_certs = BTreeMap::new(); + let mut receiver_certs = BTreeMap::new(); for receiver in &smith_data.certs { - let receiver_index = idty_index_of + let issuer_index = idty_index_of .get(receiver) .ok_or(format!("Identity '{}' not exist", receiver))?; - issuer_certs.insert(*receiver_index, genesis_smith_certs_expire_on); + receiver_certs.insert(*issuer_index, genesis_smith_certs_expire_on); } - smiths_certs_by_issuer.insert(*idty_index, issuer_certs); + smiths_certs_by_receiver.insert(*idty_index, receiver_certs); // Memberships smiths_memberships.insert( @@ -308,7 +308,7 @@ where let genesis_data = GenesisData { accounts, - certs_by_issuer, + certs_by_receiver, first_ud, first_ud_reeval, identities: identities_, @@ -317,7 +317,7 @@ where memberships, parameters, session_keys_map, - smiths_certs_by_issuer, + smiths_certs_by_receiver, smiths_memberships, sudo_key, }; diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs index 5d333e7be2ba64ecc213e091f28df384c832d867..1c3e5936d0884f406f787b28dc4ffa3dcac896fc 100644 --- a/pallets/certification/src/lib.rs +++ b/pallets/certification/src/lib.rs @@ -92,7 +92,7 @@ pub mod pallet { #[pallet::genesis_config] pub struct GenesisConfig<T: Config<I>, I: 'static = ()> { pub apply_cert_period_at_genesis: bool, - pub certs_by_issuer: BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, T::BlockNumber>>, + pub certs_by_receiver: BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, T::BlockNumber>>, } #[cfg(feature = "std")] @@ -100,7 +100,7 @@ pub mod pallet { fn default() -> Self { Self { apply_cert_period_at_genesis: false, - certs_by_issuer: Default::default(), + certs_by_receiver: Default::default(), } } } @@ -110,47 +110,36 @@ pub mod pallet { fn build(&self) { let mut cert_meta_by_issuer = BTreeMap::<T::IdtyIndex, IdtyCertMeta<T::BlockNumber>>::new(); - let mut certs_by_receiver = BTreeMap::<T::IdtyIndex, Vec<T::IdtyIndex>>::new(); - for (issuer, receivers) in &self.certs_by_issuer { + let mut certs_removable_on = + BTreeMap::<T::BlockNumber, Vec<(T::IdtyIndex, T::IdtyIndex)>>::new(); + for (receiver, issuers) in &self.certs_by_receiver { + // Forbid self-cert assert!( - !receivers.contains_key(issuer), + !issuers.contains_key(receiver), "Identity cannot certify it-self." ); - assert!( - !receivers.len() >= T::MaxByIssuer::get() as usize, - "Identity n°{:?} exceed MaxByIssuer.", - issuer - ); - cert_meta_by_issuer.insert( - *issuer, - IdtyCertMeta { - issued_count: receivers.len() as u32, + // We should insert cert_meta for receivers that have not issued any cert. + cert_meta_by_issuer + .entry(*receiver) + .or_insert(IdtyCertMeta { + issued_count: 0, next_issuable_on: sp_runtime::traits::Zero::zero(), - received_count: 0, - }, - ); - for receiver in receivers.keys() { - certs_by_receiver - .entry(*receiver) - .or_default() - .push(*issuer); - } - } + received_count: issuers.len() as u32, + }); - // Write StorageCertsByReceiver - for (receiver, mut issuers) in certs_by_receiver { - cert_meta_by_issuer - .entry(receiver) - .and_modify(|cert_meta| cert_meta.received_count = issuers.len() as u32); - issuers.sort(); - <StorageCertsByReceiver<T, I>>::insert(receiver, issuers); - } - // Write StorageCertsByIssuer - let mut certs_removable_on = - BTreeMap::<T::BlockNumber, Vec<(T::IdtyIndex, T::IdtyIndex)>>::new(); - for (issuer, receivers) in &self.certs_by_issuer { - for (receiver, removable_on) in receivers { + for (issuer, removable_on) in issuers { + // Count issued certs + cert_meta_by_issuer + .entry(*issuer) + .or_insert(IdtyCertMeta { + issued_count: 0, + next_issuable_on: sp_runtime::traits::Zero::zero(), + received_count: issuers.len() as u32, + }) + .issued_count += 1; + + // Prepare CertsRemovableOn certs_removable_on .entry(*removable_on) .or_default() @@ -166,23 +155,31 @@ pub mod pallet { } } } - - <StorageCertsByIssuer<T, I>>::insert( - issuer, - receiver, - CertValue { - removable_on: *removable_on, - }, - ); } + + // Write CertsByReceiver + let mut issuers: Vec<_> = issuers.iter().collect(); + issuers.sort(); + CertsByReceiver::<T, I>::insert(receiver, issuers); } + // Write StorageIdtyCertMeta for (issuer, cert_meta) in cert_meta_by_issuer { - <StorageIdtyCertMeta<T, I>>::insert(issuer, cert_meta); + assert!( + !cert_meta.issued_count >= T::MaxByIssuer::get(), + "Identity n°{:?} exceed MaxByIssuer.", + issuer + ); + assert!( + !cert_meta.received_count >= T::MinReceivedCertToBeAbleToIssueCert::get(), + "Identity n°{:?} not respect MinReceivedCertToBeAbleToIssueCert.", + issuer + ); + StorageIdtyCertMeta::<T, I>::insert(issuer, cert_meta); } // Write storage StorageCertsRemovableOn for (removable_on, certs) in certs_removable_on { - <StorageCertsRemovableOn<T, I>>::insert(removable_on, certs); + StorageCertsRemovableOn::<T, I>::insert(removable_on, certs); } } } @@ -195,27 +192,11 @@ pub mod pallet { pub type StorageIdtyCertMeta<T: Config<I>, I: 'static = ()> = StorageMap<_, Twox64Concat, T::IdtyIndex, IdtyCertMeta<T::BlockNumber>, ValueQuery>; - /// Certifications by issuer - #[pallet::storage] - #[pallet::getter(fn cert)] - /// Certifications by issuer - pub(super) type StorageCertsByIssuer<T: Config<I>, I: 'static = ()> = StorageDoubleMap< - _, - Twox64Concat, - T::IdtyIndex, - Twox64Concat, - T::IdtyIndex, - CertValue<T::BlockNumber>, - OptionQuery, - GetDefault, - ConstU32<4_000_000_000>, - >; - /// Certifications by receiver #[pallet::storage] #[pallet::getter(fn certs_by_receiver)] - pub type StorageCertsByReceiver<T: Config<I>, I: 'static = ()> = - StorageMap<_, Twox64Concat, T::IdtyIndex, Vec<T::IdtyIndex>, ValueQuery>; + pub type CertsByReceiver<T: Config<I>, I: 'static = ()> = + StorageMap<_, Twox64Concat, T::IdtyIndex, Vec<(T::IdtyIndex, T::BlockNumber)>, ValueQuery>; /// Certifications removable on #[pallet::storage] @@ -310,8 +291,7 @@ pub mod pallet { } }; - let create = !StorageCertsByIssuer::<T, I>::contains_key(issuer, receiver); - Self::do_add_cert(block_number, create, issuer, receiver) + Self::do_add_cert(block_number, issuer, receiver) } /// Add a new certification or renew an existing one /// @@ -348,8 +328,7 @@ pub mod pallet { return Err(Error::<T, I>::IssuedTooManyCert.into()); } - let create = !StorageCertsByIssuer::<T, I>::contains_key(issuer, receiver); - Self::do_add_cert(block_number, create, issuer, receiver) + Self::do_add_cert(block_number, issuer, receiver) } #[pallet::weight(1_000_000_000)] @@ -369,10 +348,8 @@ pub mod pallet { idty_index: T::IdtyIndex, ) -> DispatchResultWithPostInfo { ensure_root(origin)?; - if let Ok(issuers) = <StorageCertsByReceiver<T, I>>::try_get(idty_index) { - for issuer in issuers { - Self::remove_cert_inner(issuer, idty_index, None); - } + for (issuer, _) in CertsByReceiver::<T, I>::get(idty_index) { + Self::remove_cert_inner(issuer, idty_index, None); } Ok(().into()) } @@ -383,42 +360,42 @@ pub mod pallet { impl<T: Config<I>, I: 'static> Pallet<T, I> { fn do_add_cert( block_number: T::BlockNumber, - create: bool, issuer: T::IdtyIndex, receiver: T::IdtyIndex, ) -> DispatchResultWithPostInfo { - // Write StorageIdtyCertMeta for issuer - let issuer_issued_count = - StorageIdtyCertMeta::<T, I>::mutate(issuer, |issuer_idty_cert_meta| { - issuer_idty_cert_meta.issued_count = - issuer_idty_cert_meta.issued_count.saturating_add(1); - issuer_idty_cert_meta.next_issuable_on = block_number + T::CertPeriod::get(); - issuer_idty_cert_meta.issued_count - }); + // Write StorageCertsRemovableOn + let removable_on = block_number + T::ValidityPeriod::get(); + <StorageCertsRemovableOn<T, I>>::append(removable_on, (issuer, receiver)); + + // Write CertsByReceiver + let mut created = false; + CertsByReceiver::<T, I>::mutate_exists(receiver, |maybe_issuers| { + let issuers = maybe_issuers.get_or_insert(Vec::with_capacity(0)); + if let Err(index) = issuers.binary_search_by(|(issuer_, _)| issuer.cmp(issuer_)) { + issuers.insert(index, (issuer, removable_on)); + created = true; + } + }); - // Write StorageIdtyCertMeta for receiver - let receiver_received_count = - <StorageIdtyCertMeta<T, I>>::mutate_exists(receiver, |cert_meta_opt| { - let cert_meta = cert_meta_opt.get_or_insert(IdtyCertMeta::default()); - cert_meta.received_count = cert_meta.received_count.saturating_add(1); - cert_meta.received_count - }); + if created { + // Write StorageIdtyCertMeta for issuer + let issuer_issued_count = + StorageIdtyCertMeta::<T, I>::mutate(issuer, |issuer_idty_cert_meta| { + issuer_idty_cert_meta.issued_count = + issuer_idty_cert_meta.issued_count.saturating_add(1); + issuer_idty_cert_meta.next_issuable_on = + block_number + T::CertPeriod::get(); + issuer_idty_cert_meta.issued_count + }); + + // Write StorageIdtyCertMeta for receiver + let receiver_received_count = + <StorageIdtyCertMeta<T, I>>::mutate_exists(receiver, |cert_meta_opt| { + let cert_meta = cert_meta_opt.get_or_insert(IdtyCertMeta::default()); + cert_meta.received_count = cert_meta.received_count.saturating_add(1); + cert_meta.received_count + }); - // Write StorageCertsRemovableOn and StorageCertsByIssuer - let cert_value = CertValue { - removable_on: block_number + T::ValidityPeriod::get(), - }; - <StorageCertsRemovableOn<T, I>>::append(cert_value.removable_on, (issuer, receiver)); - <StorageCertsByIssuer<T, I>>::insert(issuer, receiver, cert_value); - - if create { - // Write StorageCertsByReceiver - <StorageCertsByReceiver<T, I>>::mutate_exists(receiver, |issuers_opt| { - let issuers = issuers_opt.get_or_insert(Vec::with_capacity(0)); - if let Err(index) = issuers.binary_search(&issuer) { - issuers.insert(index, issuer); - } - }); Self::deposit_event(Event::NewCert { issuer, issuer_issued_count, @@ -455,24 +432,23 @@ pub mod pallet { ) -> Weight { let mut total_weight: Weight = 0; let mut removed = false; - <StorageCertsByIssuer<T, I>>::mutate_exists(issuer, receiver, |cert_val_opt| { - if let Some(cert_val) = cert_val_opt { - if Some(cert_val.removable_on) == block_number_opt || block_number_opt.is_none() - { + CertsByReceiver::<T, I>::mutate_exists(receiver, |issuers_opt| { + let issuers = issuers_opt.get_or_insert(Vec::with_capacity(0)); + if let Ok(index) = issuers.binary_search_by(|(issuer_, _)| issuer.cmp(issuer_)) { + if let Some(block_number) = block_number_opt { + if let Some((_, removable_on)) = issuers.get(index) { + if *removable_on == block_number { + issuers.remove(index); + removed = true; + } + } + } else { + issuers.remove(index); removed = true; } } - if removed { - cert_val_opt.take(); - } }); if removed { - <StorageCertsByReceiver<T, I>>::mutate_exists(receiver, |issuers_opt| { - let issuers = issuers_opt.get_or_insert(Vec::with_capacity(0)); - if let Ok(index) = issuers.binary_search(&issuer) { - issuers.remove(index); - } - }); let issuer_issued_count = <StorageIdtyCertMeta<T, I>>::mutate_exists(issuer, |cert_meta_opt| { let cert_meta = cert_meta_opt.get_or_insert(IdtyCertMeta::default()); diff --git a/pallets/certification/src/mock.rs b/pallets/certification/src/mock.rs index 96a46725781f23b20efad2c7e9499a095fd2c2b7..3bbbe3c22ace119776d449683ffb3d0ae2f7939a 100644 --- a/pallets/certification/src/mock.rs +++ b/pallets/certification/src/mock.rs @@ -92,7 +92,7 @@ impl frame_support::traits::EnsureOrigin<(Origin, IdtyIndex, IdtyIndex)> for Ens } parameter_types! { - pub const MaxByIssuer: u32 = 3; + pub const MaxByIssuer: u32 = 4; pub const MinReceivedCertToBeAbleToIssueCert: u32 = 2; pub const CertPeriod: u64 = 2; pub const ValidityPeriod: u64 = 10; diff --git a/pallets/certification/src/tests.rs b/pallets/certification/src/tests.rs index 25998c16b86884f4011a11052a2799a180efe65d..37c56ad3b9089e5687939e567506e099bf92c922 100644 --- a/pallets/certification/src/tests.rs +++ b/pallets/certification/src/tests.rs @@ -26,7 +26,7 @@ use sp_std::collections::btree_map::BTreeMap; fn test_must_receive_cert_before_can_issue() { new_test_ext(DefaultCertificationConfig { apply_cert_period_at_genesis: true, - certs_by_issuer: BTreeMap::new(), + certs_by_receiver: BTreeMap::new(), }) .execute_with(|| { assert_eq!( @@ -40,15 +40,10 @@ fn test_must_receive_cert_before_can_issue() { fn test_cannot_certify_self() { new_test_ext(DefaultCertificationConfig { apply_cert_period_at_genesis: true, - certs_by_issuer: btreemap![ - 1 => btreemap![ - 0 => 5, - ], - 2 => btreemap![ - 0 => 5, - ], - 3 => btreemap![ - 0 => 5, + certs_by_receiver: btreemap![ + 0 => btreemap![ + 1 => 5, + 2 => 5, ], ], }) @@ -66,18 +61,18 @@ fn test_cannot_certify_self() { fn test_genesis_build() { new_test_ext(DefaultCertificationConfig { apply_cert_period_at_genesis: true, - certs_by_issuer: btreemap![ + certs_by_receiver: btreemap![ 0 => btreemap![ - 1 => 10, - 2 => 5, + 1 => 7, + 2 => 9, ], 1 => btreemap![ - 0 => 7, - 2 => 4, + 0 => 10, + 2 => 3, ], 2 => btreemap![ - 0 => 9, - 1 => 3, + 0 => 5, + 1 => 4, ], ], }) @@ -135,25 +130,42 @@ fn test_genesis_build() { fn test_cert_period() { new_test_ext(DefaultCertificationConfig { apply_cert_period_at_genesis: true, - certs_by_issuer: btreemap![ - 0 => btreemap![1 => 10], - 2 => btreemap![0 => 10], - 3 => btreemap![0 => 10], + certs_by_receiver: btreemap![ + 0 => btreemap![ + 1 => 10, + 2 => 10, + ], + 1 => btreemap![ + 0 => 10, + 2 => 10, + ], + 2 => btreemap![ + 0 => 10, + 1 => 10, + ], ], }) .execute_with(|| { assert_eq!( - DefaultCertification::add_cert(Origin::signed(0), 2), + DefaultCertification::idty_cert_meta(0), + crate::IdtyCertMeta { + issued_count: 2, + next_issuable_on: 2, + received_count: 2, + } + ); + assert_eq!( + DefaultCertification::add_cert(Origin::signed(0), 3), Err(Error::<Test, _>::NotRespectCertPeriod.into()) ); run_to_block(CertPeriod::get()); - assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 2)); + assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 3)); run_to_block(CertPeriod::get() + 1); assert_eq!( - DefaultCertification::add_cert(Origin::signed(0), 3), + DefaultCertification::add_cert(Origin::signed(0), 4), Err(Error::<Test, _>::NotRespectCertPeriod.into()) ); run_to_block((2 * CertPeriod::get()) + 1); - assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 3)); + assert_ok!(DefaultCertification::add_cert(Origin::signed(0), 4)); }); } diff --git a/pallets/certification/src/types.rs b/pallets/certification/src/types.rs index 4d2534c57314e762d4e9e1f45023dc683ffc7321..6681fa8b6a5aaf3971dbf2a0fd74838a696e161d 100644 --- a/pallets/certification/src/types.rs +++ b/pallets/certification/src/types.rs @@ -20,11 +20,6 @@ use codec::{Decode, Encode}; use frame_support::pallet_prelude::*; use scale_info::TypeInfo; -#[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)] -pub struct CertValue<BlockNumber> { - pub removable_on: BlockNumber, -} - #[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)] pub struct IdtyCertMeta<BlockNumber: Default> { pub issued_count: u32, diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs index 082388a87294793dee7bd98ac21e18298e127a9a..7c1490b3832e86baf553667202748277f6e24f7d 100644 --- a/pallets/duniter-wot/src/mock.rs +++ b/pallets/duniter-wot/src/mock.rs @@ -270,8 +270,8 @@ pub fn new_test_ext( .unwrap(); pallet_certification::GenesisConfig::<Test, Instance1> { - certs_by_issuer: clique_wot(initial_identities_len, ValidityPeriod::get()), apply_cert_period_at_genesis: true, + certs_by_receiver: clique_wot(initial_identities_len, ValidityPeriod::get()), } .assimilate_storage(&mut t) .unwrap(); @@ -292,8 +292,8 @@ pub fn new_test_ext( .unwrap(); pallet_certification::GenesisConfig::<Test, Instance2> { - certs_by_issuer: clique_wot(initial_smiths_len, SmithsValidityPeriod::get()), apply_cert_period_at_genesis: true, + certs_by_receiver: clique_wot(initial_smiths_len, SmithsValidityPeriod::get()), } .assimilate_storage(&mut t) .unwrap(); diff --git a/resources/metadata.scale b/resources/metadata.scale index 968b774a7abe5dd37311695ef4112ee05e6e9946..90750afa43fe6d866bf9ea3912c915d6b4a4ed08 100644 Binary files a/resources/metadata.scale and b/resources/metadata.scale differ diff --git a/runtime/gdev/tests/common/mod.rs b/runtime/gdev/tests/common/mod.rs index 323fbeca5c90acacb9a4d37a15349cb341ec5a5c..247c0e78a4d86a745b722c249b4f0fc0c9bf145a 100644 --- a/runtime/gdev/tests/common/mod.rs +++ b/runtime/gdev/tests/common/mod.rs @@ -231,8 +231,11 @@ impl ExtBuilder { .unwrap(); pallet_certification::GenesisConfig::<Runtime, Instance1> { + certs_by_receiver: clique_wot( + initial_identities.len(), + parameters.cert_validity_period, + ), apply_cert_period_at_genesis: false, - certs_by_issuer: clique_wot(initial_identities.len(), parameters.cert_validity_period), } .assimilate_storage(&mut t) .unwrap(); @@ -254,7 +257,7 @@ impl ExtBuilder { pallet_certification::GenesisConfig::<Runtime, Instance2> { apply_cert_period_at_genesis: false, - certs_by_issuer: clique_wot( + certs_by_receiver: clique_wot( initial_smiths.len(), parameters.smith_cert_validity_period, ),