git.delta.rocks / unique-network / refs/commits / 42b7bebae7e5

difftreelog

feat(identity) force set subs

Fahrrader2023-01-18parent: #9505eb6.patch.diff
in: master

4 files changed

modifiedMakefilediffbeforeafterboth
--- a/Makefile
+++ b/Makefile
@@ -146,5 +146,5 @@
 	make _bench PALLET=app-promotion PALLET_DIR=app-promotion
 	
 .PHONY: bench
-# Disabled: bench-scheduler, bench-collator-selection, bench-rmrk-core, bench-rmrk-equip
-bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-identity
+# Disabled: bench-scheduler, bench-collator-selection, bench-identity, bench-rmrk-core, bench-rmrk-equip
+bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets
modifiedpallets/identity/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -417,7 +417,7 @@
 		let n in 0..600;
 		use frame_benchmarking::account;
 		let identities = (0..n).map(|i| (
-			account("caller", i, 0),
+			account("caller", i, SEED),
 			Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {
 				judgements: Default::default(),
 				deposit: Default::default(),
@@ -433,7 +433,7 @@
 		use frame_benchmarking::account;
 		let origin = T::ForceOrigin::successful_origin();
 		let identities = (0..n).map(|i| (
-			account("caller", i, 0),
+			account("caller", i, SEED),
 			Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {
 				judgements: Default::default(),
 				deposit: Default::default(),
@@ -446,6 +446,20 @@
 		let identities = identities.into_iter().map(|(acc, _)| acc).collect::<Vec<_>>();
 	}: _<T::RuntimeOrigin>(origin, identities)
 
+	force_set_subs {
+		let s in 0 .. T::MaxSubAccounts::get();
+		let n in 0..600;
+		use frame_benchmarking::account;
+		let identities = (0..n).map(|i| (
+			account("caller", i, SEED),
+			(
+				BalanceOf::<T>::max_value(),
+				create_sub_accounts::<T>(&caller, s)?.try_into().unwrap(),
+			),
+		)).collect::<Vec<_>>();
+		let origin = T::ForceOrigin::successful_origin();
+	}: _<T::RuntimeOrigin>(origin, identities)
+
 	add_sub {
 		let s in 0 .. T::MaxSubAccounts::get() - 1;
 
modifiedpallets/identity/src/lib.rsdiffbeforeafterboth
314 main: T::AccountId,314 main: T::AccountId,
315 deposit: BalanceOf<T>,315 deposit: BalanceOf<T>,
316 },316 },
317 /// A number of identities were forcibly updated with new sub-identities.
318 SubIdentitiesInserted { amount: u32 },
317 }319 }
318320
319 #[pallet::call]321 #[pallet::call]
1137 ) -> DispatchResult {1139 ) -> DispatchResult {
1138 T::ForceOrigin::ensure_origin(origin)?;1140 T::ForceOrigin::ensure_origin(origin)?;
1139 for identity in identities.clone() {1141 for identity in identities.clone() {
1142 let (_, sub_ids) = <SubsOf<T>>::take(&identity);
1140 IdentityOf::<T>::set(identity, None);1143 <IdentityOf<T>>::remove(&identity);
1144 for sub in sub_ids.iter() {
1145 <SuperOf<T>>::remove(sub);
1146 }
1141 }1147 }
1142 Self::deposit_event(Event::IdentitiesRemoved {1148 Self::deposit_event(Event::IdentitiesRemoved {
1143 amount: identities.len() as u32,1149 amount: identities.len() as u32,
1144 });1150 });
1145 Ok(())1151 Ok(())
1146 }1152 }
1153
1154 /// Set sub-identities to be associated with the provided accounts as force origin.
1155 ///
1156 /// This is not meant to operate in tandem with the identity pallet as is,
1157 /// and be instead used to keep identities made and verified externally,
1158 /// forbidden from interacting with an ordinary user, since it ignores any safety mechanism.
1159 #[pallet::call_index(17)]
1160 #[pallet::weight(T::WeightInfo::force_set_subs(
1161 T::MaxSubAccounts::get(), // S
1162 subs.len() as u32, // N
1163 ))]
1164 pub fn force_set_subs(
1165 origin: OriginFor<T>,
1166 subs: Vec<(
1167 T::AccountId,
1168 (
1169 BalanceOf<T>,
1170 BoundedVec<(T::AccountId, Data), T::MaxSubAccounts>,
1171 ),
1172 )>,
1173 ) -> DispatchResult {
1174 T::ForceOrigin::ensure_origin(origin)?;
1175 for identity in subs.clone() {
1176 let account = identity.0;
1177 let (_, old_subs) = <SubsOf<T>>::get(&account);
1178 for old_sub in old_subs {
1179 <SuperOf<T>>::remove(old_sub);
1180 }
1181
1182 let mut ids = BoundedVec::<T::AccountId, T::MaxSubAccounts>::default();
1183 for (id, name) in identity.1 .1 {
1184 <SuperOf<T>>::insert(&id, (account.clone(), name));
1185 ids.try_push(id)
1186 .expect("subs length is less than T::MaxSubAccounts; qed");
1187 }
1188
1189 if ids.is_empty() {
1190 <SubsOf<T>>::remove(&account);
1191 } else {
1192 <SubsOf<T>>::insert(account, (identity.1 .0, ids));
1193 }
1194 }
1195 Self::deposit_event(Event::SubIdentitiesInserted {
1196 amount: subs.len() as u32,
1197 });
1198 Ok(())
1199 }
1147 }1200 }
1148}1201}
11491202
modifiedpallets/identity/src/weights.rsdiffbeforeafterboth
--- a/pallets/identity/src/weights.rs
+++ b/pallets/identity/src/weights.rs
@@ -78,6 +78,7 @@
 	fn kill_identity(r: u32, s: u32, x: u32, ) -> Weight;
 	fn force_insert_identities(x: u32, n: u32, ) -> Weight;
 	fn force_remove_identities(x: u32, n: u32, ) -> Weight;
+	fn force_set_subs(s: u32, n: u32, ) -> Weight;
 	fn add_sub(s: u32, ) -> Weight;
 	fn rename_sub(s: u32, ) -> Weight;
 	fn remove_sub(s: u32, ) -> Weight;
@@ -273,6 +274,20 @@
 			.saturating_add(T::DbWeight::get().reads(1 as u64))
 			.saturating_add(T::DbWeight::get().writes(1 as u64).saturating_mul(n as u64))
 	}
+	// Storage: Identity IdentityOf (r:1 w:1)
+	// todo:collator
+	/// The range of component `s` is `[0, 100]`.
+	/// The range of component `n` is `[0, 600]`.
+	fn force_set_subs(s: u32, n: u32) -> Weight {
+		// Minimum execution time: 41_872 nanoseconds.
+		Weight::from_ref_time(40_230_216 as u64)
+			// Standard Error: 2_342
+			.saturating_add(Weight::from_ref_time(145_168 as u64))
+			// Standard Error: 457
+			.saturating_add(Weight::from_ref_time(291_732 as u64).saturating_mul(s as u64))
+			.saturating_add(T::DbWeight::get().reads(1 as u64))
+			.saturating_add(T::DbWeight::get().writes(1 as u64).saturating_mul(n as u64))
+	}
 	// Storage: Identity IdentityOf (r:1 w:0)
 	// Storage: Identity SuperOf (r:1 w:1)
 	// Storage: Identity SubsOf (r:1 w:1)
@@ -509,6 +524,20 @@
 			.saturating_add(RocksDbWeight::get().reads(1 as u64))
 			.saturating_add(RocksDbWeight::get().writes(1 as u64).saturating_mul(n as u64))
 	}
+	// Storage: Identity IdentityOf (r:1 w:1)
+	// todo:collator
+	/// The range of component `xs is `[0, 100]`.
+	/// The range of component `n` is `[0, 600]`.
+	fn force_set_subs(s: u32, n: u32) -> Weight {
+		// Minimum execution time: 41_872 nanoseconds.
+		Weight::from_ref_time(40_230_216 as u64)
+			// Standard Error: 2_342
+			.saturating_add(Weight::from_ref_time(145_168 as u64))
+			// Standard Error: 457
+			.saturating_add(Weight::from_ref_time(291_732 as u64).saturating_mul(s as u64))
+			.saturating_add(RocksDbWeight::get().reads(1 as u64))
+			.saturating_add(RocksDbWeight::get().writes(1 as u64).saturating_mul(n as u64))
+	}
 	// Storage: Identity IdentityOf (r:1 w:0)
 	// Storage: Identity SuperOf (r:1 w:1)
 	// Storage: Identity SubsOf (r:1 w:1)