diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs index c1080613d08afbf0c604e347b0c4afb0d35afc1b..8534b70dca5e165551a0aae896e8282fafe7edf7 100644 --- a/pallets/duniter-wot/src/mock.rs +++ b/pallets/duniter-wot/src/mock.rs @@ -176,18 +176,15 @@ pub fn new_test_ext(initial_identities_len: usize) -> sp_io::TestExternalities { system: SystemConfig::default(), identity: IdentityConfig { identities: (1..=initial_identities_len) - .map(|i| { - ( - i as u64, - ( - pallet_identity::IdtyName::from(NAMES[i - 1]), - pallet_identity::IdtyValue { - next_creatable_identity_on: 0, - removable_on: 0, - status: pallet_identity::IdtyStatus::Validated, - }, - ), - ) + .map(|i| pallet_identity::GenesisIdty { + index: i as u32, + owner_key: i as u64, + name: pallet_identity::IdtyName::from(NAMES[i - 1]), + value: pallet_identity::IdtyValue { + next_creatable_identity_on: 0, + removable_on: 0, + status: pallet_identity::IdtyStatus::Validated, + }, }) .collect(), }, diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs index 7f38b9bb14cf740893c5047a79752c085c4d78ac..34e80c90c745cf76c8990d28e0a111aa36971cac 100644 --- a/pallets/identity/src/lib.rs +++ b/pallets/identity/src/lib.rs @@ -93,12 +93,18 @@ pub mod pallet { // GENESIS STUFFĂ‚ // + #[cfg_attr(feature = "std", derive(serde::Deserialize, serde::Serialize))] + #[derive(Encode, Decode, Clone, PartialEq, Eq)] + pub struct GenesisIdty<T: Config> { + pub index: T::IdtyIndex, + pub owner_key: T::AccountId, + pub name: IdtyName, + pub value: IdtyValue<T::BlockNumber>, + } + #[pallet::genesis_config] pub struct GenesisConfig<T: Config> { - pub identities: sp_std::collections::btree_map::BTreeMap< - T::AccountId, - (IdtyName, IdtyValue<T::BlockNumber>), - >, + pub identities: Vec<GenesisIdty<T>>, } #[cfg(feature = "std")] @@ -114,28 +120,31 @@ pub mod pallet { impl<T: Config> GenesisBuild<T> for GenesisConfig<T> { fn build(&self) { let mut names = sp_std::collections::btree_set::BTreeSet::new(); - for (idty_name, idty_value) in self.identities.values() { + for idty in &self.identities { assert!( - !names.contains(&idty_name), + !names.contains(&idty.name), "Idty name {:?} is present twice", - &idty_name + &idty.name ); - assert!(idty_value.removable_on == T::BlockNumber::zero()); - names.insert(idty_name); + assert!(idty.value.removable_on == T::BlockNumber::zero()); + names.insert(idty.name.clone()); } - <IdentitiesCount<T>>::put(self.identities.len() as u64); - for (owner_key, (idty_name, idty_value)) in &self.identities { + let mut identities = self.identities.clone(); + identities.sort_unstable_by(|a, b| a.index.cmp(&b.index)); + + <IdentitiesCount<T>>::put(identities.len() as u64); + for idty in identities.into_iter() { let idty_index = Pallet::<T>::get_next_idty_index(); - if idty_value.removable_on > T::BlockNumber::zero() { + if idty.value.removable_on > T::BlockNumber::zero() { <IdentitiesRemovableOn<T>>::append( - idty_value.removable_on, - (idty_index, idty_value.status), + idty.value.removable_on, + (idty_index, idty.value.status), ) } - <Identities<T>>::insert(idty_index, idty_value); - IdentitiesNames::<T>::insert(idty_name, ()); - IdentityIndexOf::<T>::insert(owner_key, idty_index); + <Identities<T>>::insert(idty_index, idty.value.clone()); + IdentitiesNames::<T>::insert(idty.name.clone(), ()); + IdentityIndexOf::<T>::insert(idty.owner_key, idty_index); } } } diff --git a/pallets/identity/src/tests.rs b/pallets/identity/src/tests.rs index f29ed18441f5b491f85bdd14e2d7fa40058549d4..b63345b56aadcb7f24f4d19ec8092c7ed6bb5e5f 100644 --- a/pallets/identity/src/tests.rs +++ b/pallets/identity/src/tests.rs @@ -15,30 +15,30 @@ // along with Substrate-Libre-Currency. If not, see <https://www.gnu.org/licenses/>. use crate::mock::*; -use crate::{Error, IdtyName, IdtyValue}; +use crate::{Error, GenesisIdty, IdtyName, IdtyValue}; //use frame_support::assert_err; use frame_support::assert_ok; use frame_system::{EventRecord, Phase}; -use maplit::btreemap; -use std::collections::BTreeMap; type IdtyVal = IdtyValue<u64>; -fn alice() -> (IdtyName, IdtyVal) { - ( - IdtyName::from("Alice"), - IdtyVal { +fn alice() -> GenesisIdty<Test> { + GenesisIdty { + index: 1, + owner_key: 1, + name: IdtyName::from("Alice"), + value: IdtyVal { next_creatable_identity_on: 0, removable_on: 0, status: crate::IdtyStatus::Validated, }, - ) + } } #[test] fn test_no_identity() { new_test_ext(IdentityConfig { - identities: BTreeMap::new(), + identities: Vec::new(), }) .execute_with(|| { assert_eq!(Identity::identities_count(), 0); @@ -48,7 +48,7 @@ fn test_no_identity() { #[test] fn test_create_identity_ok() { new_test_ext(IdentityConfig { - identities: btreemap![1 => alice()], + identities: vec![alice()], }) .execute_with(|| { // We need to initialize at least one block before any call @@ -72,7 +72,7 @@ fn test_create_identity_ok() { #[test] fn test_idty_creation_period() { new_test_ext(IdentityConfig { - identities: btreemap![1 => alice()], + identities: vec![alice()], }) .execute_with(|| { // We need to initialize at least one block before any call diff --git a/runtime/common/src/entities.rs b/runtime/common/src/entities.rs index 73b279d3be32620b6c608422ffd39e22d30650d1..107b42589c2f8e110c172046eff07fefb11e286d 100644 --- a/runtime/common/src/entities.rs +++ b/runtime/common/src/entities.rs @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Affero General Public License // along with Substrate-Libre-Currency. If not, see <https://www.gnu.org/licenses/>. -pub use pallet_identity::IdtyName; - use super::AccountId; use frame_support::pallet_prelude::*; use scale_info::TypeInfo; diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 50912a0c44f0b870c5aa261945dc0012d2ca74ca..63917b98fd54d6877a3d1cd711336a6ba80a8b0c 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -24,6 +24,7 @@ pub mod handlers; mod pallets_config; pub mod providers; +pub use pallet_identity::{GenesisIdty, IdtyName, IdtyStatus, IdtyValue}; pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; /// Some way of identifying an account on the chain. We intentionally make it equivalent diff --git a/runtime/gdev/src/lib.rs b/runtime/gdev/src/lib.rs index 9bbdb25939b6e0e02608a34550f8a8bc42fa3d73..9532d549f71d11a4f1d528d8c54610f1bb935461 100644 --- a/runtime/gdev/src/lib.rs +++ b/runtime/gdev/src/lib.rs @@ -31,7 +31,6 @@ pub use common_runtime::{ }; pub use pallet_balances::Call as BalancesCall; pub use pallet_duniter_test_parameters::Parameters as GenesisParameters; -pub use pallet_identity::{IdtyStatus, IdtyValue}; pub use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use pallet_session::historical as session_historical; pub use pallet_timestamp::Call as TimestampCall;