difftreelog
feat(identity) force set subs
in: master
4 files changed
Makefilediffbeforeafterboth1.PHONY: _help2_help:3 @echo "regenerate_solidity - generate stubs/interfaces for contracts defined in native (via evm-coder)"4 @echo "evm_stubs - recompile contract stubs and ABI"5 @echo "bench - run frame-benchmarking"6 @echo " bench-evm-migration"7 @echo " bench-unique"89FUNGIBLE_EVM_STUBS=./pallets/fungible/src/stubs10FUNGIBLE_EVM_ABI=./tests/src/eth/abi/fungible.json1112NONFUNGIBLE_EVM_STUBS=./pallets/nonfungible/src/stubs13NONFUNGIBLE_EVM_ABI=./tests/src/eth/abi/nonFungible.json1415REFUNGIBLE_EVM_STUBS=./pallets/refungible/src/stubs16REFUNGIBLE_EVM_ABI=./tests/src/eth/abi/reFungible.json17REFUNGIBLE_TOKEN_EVM_ABI=./tests/src/eth/abi/reFungibleToken.json1819CONTRACT_HELPERS_STUBS=./pallets/evm-contract-helpers/src/stubs/20CONTRACT_HELPERS_ABI=./tests/src/eth/abi/contractHelpers.json2122COLLECTION_HELPER_STUBS=./pallets/unique/src/eth/stubs/23COLLECTION_HELPER_ABI=./tests/src/eth/abi/collectionHelpers.json2425TESTS_API=./tests/src/eth/api/2627.PHONY: regenerate_solidity28regenerate_solidity: UniqueFungible.sol UniqueNFT.sol UniqueRefungible.sol UniqueRefungibleToken.sol ContractHelpers.sol CollectionHelpers.sol2930UniqueFungible.sol:31 PACKAGE=pallet-fungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh32 PACKAGE=pallet-fungible NAME=erc::gen_impl OUTPUT=$(FUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh3334UniqueNFT.sol:35 PACKAGE=pallet-nonfungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh36 PACKAGE=pallet-nonfungible NAME=erc::gen_impl OUTPUT=$(NONFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh3738UniqueRefungible.sol:39 PACKAGE=pallet-refungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh40 PACKAGE=pallet-refungible NAME=erc::gen_impl OUTPUT=$(REFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4142UniqueRefungibleToken.sol:43 PACKAGE=pallet-refungible NAME=erc_token::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh44 PACKAGE=pallet-refungible NAME=erc_token::gen_impl OUTPUT=$(REFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4546ContractHelpers.sol:47 PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh48 PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_impl OUTPUT=$(CONTRACT_HELPERS_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4950CollectionHelpers.sol:51 PACKAGE=pallet-unique NAME=eth::collection_helper_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh52 PACKAGE=pallet-unique NAME=eth::collection_helper_impl OUTPUT=$(COLLECTION_HELPER_STUBS)/$@ ./.maintain/scripts/generate_sol.sh5354UniqueFungible: UniqueFungible.sol55 INPUT=$(FUNGIBLE_EVM_STUBS)/$< OUTPUT=$(FUNGIBLE_EVM_STUBS)/UniqueFungible.raw ./.maintain/scripts/compile_stub.sh56 INPUT=$(FUNGIBLE_EVM_STUBS)/$< OUTPUT=$(FUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh5758UniqueNFT: UniqueNFT.sol59 INPUT=$(NONFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(NONFUNGIBLE_EVM_STUBS)/UniqueNFT.raw ./.maintain/scripts/compile_stub.sh60 INPUT=$(NONFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(NONFUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh6162UniqueRefungible: UniqueRefungible.sol63 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_STUBS)/UniqueRefungible.raw ./.maintain/scripts/compile_stub.sh64 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh6566UniqueRefungibleToken: UniqueRefungibleToken.sol67 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_STUBS)/UniqueRefungibleToken.raw ./.maintain/scripts/compile_stub.sh68 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_TOKEN_EVM_ABI) ./.maintain/scripts/generate_abi.sh6970ContractHelpers: ContractHelpers.sol71 INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw ./.maintain/scripts/compile_stub.sh72 INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_ABI) ./.maintain/scripts/generate_abi.sh7374CollectionHelpers: CollectionHelpers.sol75 INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_STUBS)/CollectionHelpers.raw ./.maintain/scripts/compile_stub.sh76 INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_ABI) ./.maintain/scripts/generate_abi.sh7778evm_stubs: UniqueFungible UniqueNFT UniqueRefungible UniqueRefungibleToken ContractHelpers CollectionHelpers7980.PHONY: _bench81_bench:82 cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \83 benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \84 --wasm-execution compiled --extrinsic '*' \85 --template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \86 --output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs8788.PHONY: bench-evm-migration89bench-evm-migration:90 make _bench PALLET=evm-migration9192.PHONY: bench-configuration93bench-configuration:94 make _bench PALLET=configuration9596.PHONY: bench-common97bench-common:98 make _bench PALLET=common99100.PHONY: bench-unique101bench-unique:102 make _bench PALLET=unique103104.PHONY: bench-fungible105bench-fungible:106 make _bench PALLET=fungible107108.PHONY: bench-refungible109bench-refungible:110 make _bench PALLET=refungible111112.PHONY: bench-nonfungible113bench-nonfungible:114 make _bench PALLET=nonfungible115116.PHONY: bench-structure117bench-structure:118 make _bench PALLET=structure119120.PHONY: bench-scheduler121bench-scheduler:122 make _bench PALLET=unique-scheduler-v2 PALLET_DIR=scheduler-v2123124.PHONY: bench-rmrk-core125bench-rmrk-core:126 make _bench PALLET=proxy-rmrk-core127128.PHONY: bench-rmrk-equip129bench-rmrk-equip:130 make _bench PALLET=proxy-rmrk-equip131132.PHONY: bench-foreign-assets133bench-foreign-assets:134 make _bench PALLET=foreign-assets135136.PHONY: bench-collator-selection137bench-collator-selection:138 make _bench PALLET=collator-selection139140.PHONY: bench-identity141bench-identity:142 make _bench PALLET=identity143144.PHONY: bench-app-promotion145bench-app-promotion:146 make _bench PALLET=app-promotion PALLET_DIR=app-promotion147 148.PHONY: bench149# Disabled: bench-scheduler, bench-collator-selection, bench-rmrk-core, bench-rmrk-equip150bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-identity1.PHONY: _help2_help:3 @echo "regenerate_solidity - generate stubs/interfaces for contracts defined in native (via evm-coder)"4 @echo "evm_stubs - recompile contract stubs and ABI"5 @echo "bench - run frame-benchmarking"6 @echo " bench-evm-migration"7 @echo " bench-unique"89FUNGIBLE_EVM_STUBS=./pallets/fungible/src/stubs10FUNGIBLE_EVM_ABI=./tests/src/eth/abi/fungible.json1112NONFUNGIBLE_EVM_STUBS=./pallets/nonfungible/src/stubs13NONFUNGIBLE_EVM_ABI=./tests/src/eth/abi/nonFungible.json1415REFUNGIBLE_EVM_STUBS=./pallets/refungible/src/stubs16REFUNGIBLE_EVM_ABI=./tests/src/eth/abi/reFungible.json17REFUNGIBLE_TOKEN_EVM_ABI=./tests/src/eth/abi/reFungibleToken.json1819CONTRACT_HELPERS_STUBS=./pallets/evm-contract-helpers/src/stubs/20CONTRACT_HELPERS_ABI=./tests/src/eth/abi/contractHelpers.json2122COLLECTION_HELPER_STUBS=./pallets/unique/src/eth/stubs/23COLLECTION_HELPER_ABI=./tests/src/eth/abi/collectionHelpers.json2425TESTS_API=./tests/src/eth/api/2627.PHONY: regenerate_solidity28regenerate_solidity: UniqueFungible.sol UniqueNFT.sol UniqueRefungible.sol UniqueRefungibleToken.sol ContractHelpers.sol CollectionHelpers.sol2930UniqueFungible.sol:31 PACKAGE=pallet-fungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh32 PACKAGE=pallet-fungible NAME=erc::gen_impl OUTPUT=$(FUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh3334UniqueNFT.sol:35 PACKAGE=pallet-nonfungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh36 PACKAGE=pallet-nonfungible NAME=erc::gen_impl OUTPUT=$(NONFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh3738UniqueRefungible.sol:39 PACKAGE=pallet-refungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh40 PACKAGE=pallet-refungible NAME=erc::gen_impl OUTPUT=$(REFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4142UniqueRefungibleToken.sol:43 PACKAGE=pallet-refungible NAME=erc_token::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh44 PACKAGE=pallet-refungible NAME=erc_token::gen_impl OUTPUT=$(REFUNGIBLE_EVM_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4546ContractHelpers.sol:47 PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh48 PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_impl OUTPUT=$(CONTRACT_HELPERS_STUBS)/$@ ./.maintain/scripts/generate_sol.sh4950CollectionHelpers.sol:51 PACKAGE=pallet-unique NAME=eth::collection_helper_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh52 PACKAGE=pallet-unique NAME=eth::collection_helper_impl OUTPUT=$(COLLECTION_HELPER_STUBS)/$@ ./.maintain/scripts/generate_sol.sh5354UniqueFungible: UniqueFungible.sol55 INPUT=$(FUNGIBLE_EVM_STUBS)/$< OUTPUT=$(FUNGIBLE_EVM_STUBS)/UniqueFungible.raw ./.maintain/scripts/compile_stub.sh56 INPUT=$(FUNGIBLE_EVM_STUBS)/$< OUTPUT=$(FUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh5758UniqueNFT: UniqueNFT.sol59 INPUT=$(NONFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(NONFUNGIBLE_EVM_STUBS)/UniqueNFT.raw ./.maintain/scripts/compile_stub.sh60 INPUT=$(NONFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(NONFUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh6162UniqueRefungible: UniqueRefungible.sol63 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_STUBS)/UniqueRefungible.raw ./.maintain/scripts/compile_stub.sh64 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_ABI) ./.maintain/scripts/generate_abi.sh6566UniqueRefungibleToken: UniqueRefungibleToken.sol67 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_EVM_STUBS)/UniqueRefungibleToken.raw ./.maintain/scripts/compile_stub.sh68 INPUT=$(REFUNGIBLE_EVM_STUBS)/$< OUTPUT=$(REFUNGIBLE_TOKEN_EVM_ABI) ./.maintain/scripts/generate_abi.sh6970ContractHelpers: ContractHelpers.sol71 INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw ./.maintain/scripts/compile_stub.sh72 INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_ABI) ./.maintain/scripts/generate_abi.sh7374CollectionHelpers: CollectionHelpers.sol75 INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_STUBS)/CollectionHelpers.raw ./.maintain/scripts/compile_stub.sh76 INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_ABI) ./.maintain/scripts/generate_abi.sh7778evm_stubs: UniqueFungible UniqueNFT UniqueRefungible UniqueRefungibleToken ContractHelpers CollectionHelpers7980.PHONY: _bench81_bench:82 cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \83 benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \84 --wasm-execution compiled --extrinsic '*' \85 --template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \86 --output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs8788.PHONY: bench-evm-migration89bench-evm-migration:90 make _bench PALLET=evm-migration9192.PHONY: bench-configuration93bench-configuration:94 make _bench PALLET=configuration9596.PHONY: bench-common97bench-common:98 make _bench PALLET=common99100.PHONY: bench-unique101bench-unique:102 make _bench PALLET=unique103104.PHONY: bench-fungible105bench-fungible:106 make _bench PALLET=fungible107108.PHONY: bench-refungible109bench-refungible:110 make _bench PALLET=refungible111112.PHONY: bench-nonfungible113bench-nonfungible:114 make _bench PALLET=nonfungible115116.PHONY: bench-structure117bench-structure:118 make _bench PALLET=structure119120.PHONY: bench-scheduler121bench-scheduler:122 make _bench PALLET=unique-scheduler-v2 PALLET_DIR=scheduler-v2123124.PHONY: bench-rmrk-core125bench-rmrk-core:126 make _bench PALLET=proxy-rmrk-core127128.PHONY: bench-rmrk-equip129bench-rmrk-equip:130 make _bench PALLET=proxy-rmrk-equip131132.PHONY: bench-foreign-assets133bench-foreign-assets:134 make _bench PALLET=foreign-assets135136.PHONY: bench-collator-selection137bench-collator-selection:138 make _bench PALLET=collator-selection139140.PHONY: bench-identity141bench-identity:142 make _bench PALLET=identity143144.PHONY: bench-app-promotion145bench-app-promotion:146 make _bench PALLET=app-promotion PALLET_DIR=app-promotion147 148.PHONY: bench149# Disabled: bench-scheduler, bench-collator-selection, bench-identity, bench-rmrk-core, bench-rmrk-equip150bench: bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assetspallets/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;
pallets/identity/src/lib.rsdiffbeforeafterboth--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -314,6 +314,8 @@
main: T::AccountId,
deposit: BalanceOf<T>,
},
+ /// A number of identities were forcibly updated with new sub-identities.
+ SubIdentitiesInserted { amount: u32 },
}
#[pallet::call]
@@ -1137,13 +1139,64 @@
) -> DispatchResult {
T::ForceOrigin::ensure_origin(origin)?;
for identity in identities.clone() {
- IdentityOf::<T>::set(identity, None);
+ let (_, sub_ids) = <SubsOf<T>>::take(&identity);
+ <IdentityOf<T>>::remove(&identity);
+ for sub in sub_ids.iter() {
+ <SuperOf<T>>::remove(sub);
+ }
}
Self::deposit_event(Event::IdentitiesRemoved {
amount: identities.len() as u32,
});
Ok(())
}
+
+ /// Set sub-identities to be associated with the provided accounts as force origin.
+ ///
+ /// This is not meant to operate in tandem with the identity pallet as is,
+ /// and be instead used to keep identities made and verified externally,
+ /// forbidden from interacting with an ordinary user, since it ignores any safety mechanism.
+ #[pallet::call_index(17)]
+ #[pallet::weight(T::WeightInfo::force_set_subs(
+ T::MaxSubAccounts::get(), // S
+ subs.len() as u32, // N
+ ))]
+ pub fn force_set_subs(
+ origin: OriginFor<T>,
+ subs: Vec<(
+ T::AccountId,
+ (
+ BalanceOf<T>,
+ BoundedVec<(T::AccountId, Data), T::MaxSubAccounts>,
+ ),
+ )>,
+ ) -> DispatchResult {
+ T::ForceOrigin::ensure_origin(origin)?;
+ for identity in subs.clone() {
+ let account = identity.0;
+ let (_, old_subs) = <SubsOf<T>>::get(&account);
+ for old_sub in old_subs {
+ <SuperOf<T>>::remove(old_sub);
+ }
+
+ let mut ids = BoundedVec::<T::AccountId, T::MaxSubAccounts>::default();
+ for (id, name) in identity.1 .1 {
+ <SuperOf<T>>::insert(&id, (account.clone(), name));
+ ids.try_push(id)
+ .expect("subs length is less than T::MaxSubAccounts; qed");
+ }
+
+ if ids.is_empty() {
+ <SubsOf<T>>::remove(&account);
+ } else {
+ <SubsOf<T>>::insert(account, (identity.1 .0, ids));
+ }
+ }
+ Self::deposit_event(Event::SubIdentitiesInserted {
+ amount: subs.len() as u32,
+ });
+ Ok(())
+ }
}
}
pallets/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)