difftreelog
fix update benchmarks to v2
in: master
14 files changed
pallets/app-promotion/src/benchmarking.rsdiffbeforeafterboth161617#![cfg(feature = "runtime-benchmarks")]17#![cfg(feature = "runtime-benchmarks")]181819use frame_benchmarking::{account, benchmarks};19use frame_benchmarking::v2::*;20use frame_support::traits::{fungible::Unbalanced, OnInitialize};20use frame_support::traits::{21 fungible::{Inspect, Mutate, Unbalanced},22 OnInitialize,23};21use frame_system::RawOrigin;24use frame_system::{pallet_prelude::*, RawOrigin};25use pallet_evm::account::CrossAccountId;22use pallet_evm_migration::Pallet as EvmMigrationPallet;26use pallet_evm_migration::Pallet as EvmMigrationPallet;23use pallet_unique::benchmarking::create_nft_collection;27use pallet_unique::benchmarking::create_nft_collection;24use sp_runtime::traits::Bounded;28use sp_core::{Get, H160};29use sp_runtime::{30 traits::{BlockNumberProvider, Bounded},31 Perbill,32};33use sp_std::{iter::Sum, vec, vec::Vec};253426use super::*;35use super::{BalanceOf, Call, Config, Pallet, Staked, PENDING_LIMIT_PER_BLOCK};27use crate::Pallet as PromototionPallet;36use crate::{pallet, Pallet as PromototionPallet};283729const SEED: u32 = 0;38const SEED: u32 = 0;303949 Ok(pallet_admin)58 Ok(pallet_admin)50}59}516052benchmarks! {61#[benchmarks(53 where_clause{54 where T: Config + pallet_unique::Config + pallet_evm_migration::Config ,62 where T: Config + pallet_unique::Config + pallet_evm_migration::Config ,55 BlockNumberFor<T>: From<u32> + Into<u32>,63 BlockNumberFor<T>: From<u32> + Into<u32>,56 BalanceOf<T>: Sum + From<u128>64 BalanceOf<T>: Sum + From<u128>65)]66mod benchmarks {57 }67 use super::*;586859 on_initialize {69 #[benchmark]60 let b in 0..PENDING_LIMIT_PER_BLOCK;70 fn on_initialize(b: Linear<0, PENDING_LIMIT_PER_BLOCK>) -> Result<(), BenchmarkError> {61 set_admin::<T>()?;71 set_admin::<T>()?;627263 (0..b).try_for_each(|index| {73 (0..b).try_for_each(|index| {64 let staker = account::<T::AccountId>("staker", index, SEED);74 let staker = account::<T::AccountId>("staker", index, SEED);65 <T as Config>::Currency::write_balance(&staker, Into::<BalanceOf<T>>::into(10_000u128) * T::Nominal::get())?;75 <T as Config>::Currency::write_balance(76 &staker,77 Into::<BalanceOf<T>>::into(10_000u128) * T::Nominal::get(),78 )?;66 PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())?;79 PromototionPallet::<T>::stake(80 RawOrigin::Signed(staker.clone()).into(),81 Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get(),82 )?;67 PromototionPallet::<T>::unstake_all(RawOrigin::Signed(staker).into())?;83 PromototionPallet::<T>::unstake_all(RawOrigin::Signed(staker).into())?;68 Result::<(), sp_runtime::DispatchError>::Ok(())84 Result::<(), sp_runtime::DispatchError>::Ok(())69 })?;85 })?;70 let block_number = <frame_system::Pallet<T>>::current_block_number() + T::PendingInterval::get();86 let block_number =71 }: {PromototionPallet::<T>::on_initialize(block_number)}87 <frame_system::Pallet<T>>::current_block_number() + T::PendingInterval::get();728873 set_admin_address {89 #[block]90 {91 PromototionPallet::<T>::on_initialize(block_number);92 }9394 Ok(())95 }9697 #[benchmark]98 fn set_admin_address() -> Result<(), BenchmarkError> {74 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);99 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);75 let _ = <T as Config>::Currency::set_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());100 let _ = <T as Config>::Currency::set_balance(101 &pallet_admin,102 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),76 } : _(RawOrigin::Root, T::CrossAccountId::from_sub(pallet_admin))103 );7710478 payout_stakers{105 #[extrinsic_call]79 let b in 1..100;106 _(RawOrigin::Root, T::CrossAccountId::from_sub(pallet_admin));80107108 Ok(())109 }110111 #[benchmark]112 fn payout_stakers(b: Linear<0, 100>) -> Result<(), BenchmarkError> {81 let pallet_admin = account::<T::AccountId>("admin", 1, SEED);113 let pallet_admin = account::<T::AccountId>("admin", 1, SEED);82 let share = Perbill::from_rational(1u32, 20);114 PromototionPallet::<T>::set_admin_address(83 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;115 RawOrigin::Root.into(),116 T::CrossAccountId::from_sub(pallet_admin.clone()),117 )?;84 <T as Config>::Currency::write_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value())?;118 <T as Config>::Currency::write_balance(119 &pallet_admin,120 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),121 )?;85 <T as Config>::Currency::write_balance(&<T as pallet::Config>::TreasuryAccountId::get(), Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value())?;122 <T as Config>::Currency::write_balance(123 &<T as pallet::Config>::TreasuryAccountId::get(),124 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),125 )?;8612687 let stakers: Vec<T::AccountId> = (0..b).map(|index| account("staker", index, SEED)).collect();127 let stakers: Vec<T::AccountId> =128 (0..b).map(|index| account("staker", index, SEED)).collect();88 stakers.iter().try_for_each(|staker| {129 stakers.iter().try_for_each(|staker| {89 <T as Config>::Currency::write_balance(staker, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value())?;130 <T as Config>::Currency::write_balance(131 staker,132 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),133 )?;90 Result::<(), sp_runtime::DispatchError>::Ok(())134 Result::<(), sp_runtime::DispatchError>::Ok(())91 })?;135 })?;92 (1..11).try_for_each(|i| {136 (1..11).try_for_each(|i| {93 <frame_system::Pallet<T>>::set_block_number(i.into());137 <frame_system::Pallet<T>>::set_block_number(i.into());94 T::RelayBlockNumberProvider::set_block_number((2*i).into());138 T::RelayBlockNumberProvider::set_block_number((2 * i).into());95 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());139 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());96 assert_eq!(T::RelayBlockNumberProvider::current_block_number(), (2*i).into());140 assert_eq!(141 T::RelayBlockNumberProvider::current_block_number(),142 (2 * i).into()143 );97 stakers.iter()144 stakers145 .iter()98 .map(|staker| {146 .map(|staker| {99 PromototionPallet::<T>::stake(RawOrigin::Signed(staker.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())147 PromototionPallet::<T>::stake(148 RawOrigin::Signed(staker.clone()).into(),149 Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get(),150 )100 }).collect::<Result<Vec<_>, _>>()?;151 })152 .collect::<Result<Vec<_>, _>>()?;101153102 Result::<(), sp_runtime::DispatchError>::Ok(())154 Result::<(), sp_runtime::DispatchError>::Ok(())103 })?;155 })?;107159108 <frame_system::Pallet<T>>::set_block_number(15_000.into());160 <frame_system::Pallet<T>>::set_block_number(15_000.into());109 T::RelayBlockNumberProvider::set_block_number(30_000.into());161 T::RelayBlockNumberProvider::set_block_number(30_000.into());110 } : _(RawOrigin::Signed(pallet_admin.clone()), Some(b as u8))111162112 stake {163 #[extrinsic_call]164 _(RawOrigin::Signed(pallet_admin.clone()), Some(b as u8));165166 Ok(())167 }168169 #[benchmark]170 fn stake() -> Result<(), BenchmarkError> {113 let caller = account::<T::AccountId>("caller", 0, SEED);171 let caller = account::<T::AccountId>("caller", 0, SEED);114 let share = Perbill::from_rational(1u32, 10);172 let share = Perbill::from_rational(1u32, 10);115 let _ = <T as Config>::Currency::write_balance(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());116 } : _(RawOrigin::Signed(caller.clone()), share * <T as Config>::Currency::total_balance(&caller))117173118 unstake_all {174 let _ = <T as Config>::Currency::write_balance(175 &caller,176 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),177 );178179 #[extrinsic_call]180 _(181 RawOrigin::Signed(caller.clone()),182 share * <T as Config>::Currency::total_balance(&caller),183 );184185 Ok(())186 }187188 #[benchmark]189 fn unstake_all() -> Result<(), BenchmarkError> {119 let caller = account::<T::AccountId>("caller", 0, SEED);190 let caller = account::<T::AccountId>("caller", 0, SEED);120 let share = Perbill::from_rational(1u32, 20);191 let share = Perbill::from_rational(1u32, 20);121 let _ = <T as Config>::Currency::write_balance(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());192 let _ = <T as Config>::Currency::write_balance(193 &caller,194 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),195 );122 (1..11).map(|i| {196 (1..11)197 .map(|i| {123 // used to change block number198 // used to change block number124 <frame_system::Pallet<T>>::set_block_number(i.into());199 <frame_system::Pallet<T>>::set_block_number(i.into());125 T::RelayBlockNumberProvider::set_block_number((2*i).into());200 T::RelayBlockNumberProvider::set_block_number((2 * i).into());126 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());201 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());127 assert_eq!(T::RelayBlockNumberProvider::current_block_number(), (2*i).into());202 assert_eq!(203 T::RelayBlockNumberProvider::current_block_number(),204 (2 * i).into()205 );128 PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), share * <T as Config>::Currency::total_balance(&caller))206 PromototionPallet::<T>::stake(207 RawOrigin::Signed(caller.clone()).into(),208 share * <T as Config>::Currency::total_balance(&caller),209 )129 }).collect::<Result<Vec<_>, _>>()?;210 })211 .collect::<Result<Vec<_>, _>>()?;130212131 } : _(RawOrigin::Signed(caller.clone()))213 #[extrinsic_call]214 _(RawOrigin::Signed(caller.clone()));132215133 unstake_partial {216 Ok(())217 }218219 #[benchmark]220 fn unstake_partial() -> Result<(), BenchmarkError> {134 let caller = account::<T::AccountId>("caller", 0, SEED);221 let caller = account::<T::AccountId>("caller", 0, SEED);135 let share = Perbill::from_rational(1u32, 20);222 let _ = <T as Config>::Currency::write_balance(136 let _ = <T as Config>::Currency::write_balance(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());223 &caller,224 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),225 );137 (1..11).map(|i| {226 (1..11)227 .map(|i| {138 // used to change block number228 // used to change block number139 <frame_system::Pallet<T>>::set_block_number(i.into());229 <frame_system::Pallet<T>>::set_block_number(i.into());140 T::RelayBlockNumberProvider::set_block_number((2*i).into());230 T::RelayBlockNumberProvider::set_block_number((2 * i).into());141 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());231 assert_eq!(<frame_system::Pallet<T>>::block_number(), i.into());142 assert_eq!(T::RelayBlockNumberProvider::current_block_number(), (2*i).into());232 assert_eq!(233 T::RelayBlockNumberProvider::current_block_number(),234 (2 * i).into()235 );143 PromototionPallet::<T>::stake(RawOrigin::Signed(caller.clone()).into(), Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get())236 PromototionPallet::<T>::stake(237 RawOrigin::Signed(caller.clone()).into(),238 Into::<BalanceOf<T>>::into(100u128) * T::Nominal::get(),239 )144 }).collect::<Result<Vec<_>, _>>()?;240 })241 .collect::<Result<Vec<_>, _>>()?;145242146 } : _(RawOrigin::Signed(caller.clone()), Into::<BalanceOf<T>>::into(1000u128) * T::Nominal::get())243 #[extrinsic_call]244 _(245 RawOrigin::Signed(caller.clone()),246 Into::<BalanceOf<T>>::into(1000u128) * T::Nominal::get(),247 );147248148 sponsor_collection {249 Ok(())250 }251252 #[benchmark]253 fn sponsor_collection() -> Result<(), BenchmarkError> {149 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);254 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);150 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;255 PromototionPallet::<T>::set_admin_address(256 RawOrigin::Root.into(),257 T::CrossAccountId::from_sub(pallet_admin.clone()),258 )?;151 let _ = <T as Config>::Currency::write_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());259 let _ = <T as Config>::Currency::write_balance(260 &pallet_admin,261 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),262 );152 let caller: T::AccountId = account("caller", 0, SEED);263 let caller: T::AccountId = account("caller", 0, SEED);153 let _ = <T as Config>::Currency::write_balance(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());264 let _ = <T as Config>::Currency::write_balance(265 &caller,266 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),267 );154 let collection = create_nft_collection::<T>(caller)?;268 let collection = create_nft_collection::<T>(caller)?;155 } : _(RawOrigin::Signed(pallet_admin.clone()), collection)156269157 stop_sponsoring_collection {270 #[extrinsic_call]271 _(RawOrigin::Signed(pallet_admin.clone()), collection);272273 Ok(())274 }275276 #[benchmark]277 fn stop_sponsoring_collection() -> Result<(), BenchmarkError> {158 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);278 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);159 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;279 PromototionPallet::<T>::set_admin_address(280 RawOrigin::Root.into(),281 T::CrossAccountId::from_sub(pallet_admin.clone()),282 )?;160 let _ = <T as Config>::Currency::write_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());283 let _ = <T as Config>::Currency::write_balance(284 &pallet_admin,285 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),286 );161 let caller: T::AccountId = account("caller", 0, SEED);287 let caller: T::AccountId = account("caller", 0, SEED);162 let _ = <T as Config>::Currency::write_balance(&caller, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());288 let _ = <T as Config>::Currency::write_balance(289 &caller,290 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),291 );163 let collection = create_nft_collection::<T>(caller)?;292 let collection = create_nft_collection::<T>(caller)?;164 PromototionPallet::<T>::sponsor_collection(RawOrigin::Signed(pallet_admin.clone()).into(), collection)?;293 PromototionPallet::<T>::sponsor_collection(294 RawOrigin::Signed(pallet_admin.clone()).into(),295 collection,165 } : _(RawOrigin::Signed(pallet_admin.clone()), collection)296 )?;166297167 sponsor_contract {298 #[extrinsic_call]299 _(RawOrigin::Signed(pallet_admin.clone()), collection);300301 Ok(())302 }303304 #[benchmark]305 fn sponsor_contract() -> Result<(), BenchmarkError> {168 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);306 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);169 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;307 PromototionPallet::<T>::set_admin_address(308 RawOrigin::Root.into(),309 T::CrossAccountId::from_sub(pallet_admin.clone()),310 )?;170311171 let _ = <T as Config>::Currency::write_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());312 let _ = <T as Config>::Currency::write_balance(313 &pallet_admin,314 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),315 );172 let address = H160::from_low_u64_be(SEED as u64);316 let address = H160::from_low_u64_be(SEED as u64);173 let data: Vec<u8> = (0..20).collect();317 let data: Vec<u8> = (0..20).collect();174 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;318 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;175 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;319 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;176 } : _(RawOrigin::Signed(pallet_admin.clone()), address)177320178 stop_sponsoring_contract {321 #[extrinsic_call]322 _(RawOrigin::Signed(pallet_admin.clone()), address);323324 Ok(())325 }326327 #[benchmark]328 fn stop_sponsoring_contract() -> Result<(), BenchmarkError> {179 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);329 let pallet_admin = account::<T::AccountId>("admin", 0, SEED);180 PromototionPallet::<T>::set_admin_address(RawOrigin::Root.into(), T::CrossAccountId::from_sub(pallet_admin.clone()))?;330 PromototionPallet::<T>::set_admin_address(331 RawOrigin::Root.into(),332 T::CrossAccountId::from_sub(pallet_admin.clone()),333 )?;181334182 let _ = <T as Config>::Currency::write_balance(&pallet_admin, Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value());335 let _ = <T as Config>::Currency::write_balance(336 &pallet_admin,337 Perbill::from_rational(1u32, 2) * BalanceOf::<T>::max_value(),338 );183 let address = H160::from_low_u64_be(SEED as u64);339 let address = H160::from_low_u64_be(SEED as u64);184 let data: Vec<u8> = (0..20).collect();340 let data: Vec<u8> = (0..20).collect();185 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;341 <EvmMigrationPallet<T>>::begin(RawOrigin::Root.into(), address)?;186 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;342 <EvmMigrationPallet<T>>::finish(RawOrigin::Root.into(), address, data)?;187 PromototionPallet::<T>::sponsor_contract(RawOrigin::Signed(pallet_admin.clone()).into(), address)?;343 PromototionPallet::<T>::sponsor_contract(344 RawOrigin::Signed(pallet_admin.clone()).into(),345 address,346 )?;347188 } : _(RawOrigin::Signed(pallet_admin.clone()), address)348 #[extrinsic_call]349 _(RawOrigin::Signed(pallet_admin.clone()), address);350351 Ok(())352 }189}353}190354pallets/collator-selection/src/benchmarking.rsdiffbeforeafterboth323233//! Benchmarking setup for pallet-collator-selection33//! Benchmarking setup for pallet-collator-selection343435use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite, whitelisted_caller};35use frame_benchmarking::v2::{36 account, benchmarks, impl_benchmark_test_suite, whitelisted_caller, BenchmarkError,37};36use frame_support::{38use frame_support::{37 assert_ok,39 assert_ok,159/// Our benchmarking environment already has invulnerables registered.161/// Our benchmarking environment already has invulnerables registered.160const INITIAL_INVULNERABLES: u32 = 2;162const INITIAL_INVULNERABLES: u32 = 2;161163162benchmarks! {164#[benchmarks(where T: Config + pallet_authorship::Config + session::Config)]163 where_clause { where165mod benchmarks {164 T: Config + pallet_authorship::Config + session::Config166 use super::*;165 }167 const MAX_COLLATORS: u32 = 10;168 const MAX_INVULNERABLES: u32 = MAX_COLLATORS - INITIAL_INVULNERABLES;166169167 // todo:collator this and all the following do not work for some reason, going all the way up to 10 in length170 // todo:collator this and all the following do not work for some reason, going all the way up to 10 in length168 // Both invulnerables and candidates count together against MaxCollators.171 // Both invulnerables and candidates count together against MaxCollators.169 // Maybe try putting it in braces? 1 .. (T::MaxCollators::get() - 2)172 // Maybe try putting it in braces? 1 .. (T::MaxCollators::get() - 2)173 #[benchmark]170 add_invulnerable {174 fn add_invulnerable<T>(b: Linear<1, MAX_COLLATORS>) -> Result<(), BenchmarkError> {171 let b in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES - 1;172 register_validators::<T>(b);175 register_validators::<T>(b);173 register_invulnerables::<T>(b);176 register_invulnerables::<T>(b);174177175 // log::info!("{} {}", <Invulnerables<T>>::get().len(), b);178 // log::info!("{} {}", <Invulnerables<T>>::get().len(), b);176179177 let new_invulnerable: T::AccountId = whitelisted_caller();180 let new_invulnerable: T::AccountId = whitelisted_caller();178 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();181 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();179 <T as Config>::Currency::set_balance(&new_invulnerable, bond);182 <T as Config>::Currency::set_balance(&new_invulnerable, bond);180183181 <session::Pallet<T>>::set_keys(184 <session::Pallet<T>>::set_keys(182 RawOrigin::Signed(new_invulnerable.clone()).into(),185 RawOrigin::Signed(new_invulnerable.clone()).into(),183 keys::<T>(b + 1),186 keys::<T>(b + 1),184 Vec::new()187 Vec::new(),185 ).unwrap();188 )189 .unwrap();186190187 let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();191 let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();192193 #[block]188 }: {194 {189 assert_ok!(195 assert_ok!(<CollatorSelection<T>>::add_invulnerable(190 <CollatorSelection<T>>::add_invulnerable(root_origin, new_invulnerable.clone())196 root_origin,197 new_invulnerable.clone()191 );198 ));192 }199 }193 verify {200194 assert_last_event::<T>(Event::InvulnerableAdded{invulnerable: new_invulnerable}.into());201 assert_last_event::<T>(195 }202 Event::InvulnerableAdded {196203 invulnerable: new_invulnerable,204 }205 .into(),206 );207208 Ok(())209 }210211 #[benchmark]197 remove_invulnerable {212 fn remove_invulnerable(b: Linear<1, MAX_INVULNERABLES>) -> Result<(), BenchmarkError> {198 let b in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES - 1;199 register_validators::<T>(b);213 register_validators::<T>(b);200 register_invulnerables::<T>(b);214 register_invulnerables::<T>(b);201215202 let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();216 let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();203 let leaving = <Invulnerables<T>>::get().last().unwrap().clone();217 let leaving = <Invulnerables<T>>::get().last().unwrap().clone();204 whitelist!(leaving);218 whitelist!(leaving);219220 #[block]205 }: {221 {206 assert_ok!(222 assert_ok!(<CollatorSelection<T>>::remove_invulnerable(207 <CollatorSelection<T>>::remove_invulnerable(root_origin, leaving.clone())223 root_origin,224 leaving.clone()208 );225 ));209 }226 }210 verify {227211 assert_last_event::<T>(Event::InvulnerableRemoved{invulnerable: leaving}.into());228 assert_last_event::<T>(212 }229 Event::InvulnerableRemoved {213230 invulnerable: leaving,231 }232 .into(),233 );234235 Ok(())236 }237238 #[benchmark]214 get_license {239 fn get_license(c: Linear<1, MAX_COLLATORS>) -> Result<(), BenchmarkError> {215 let c in 1 .. T::MaxCollators::get() - 1;216217 register_validators::<T>(c);240 register_validators::<T>(c);218 get_licenses::<T>(c);241 get_licenses::<T>(c);219242220 let caller: T::AccountId = whitelisted_caller();243 let caller: T::AccountId = whitelisted_caller();221 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();244 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();222 T::Currency::set_balance(&caller, bond);245 T::Currency::set_balance(&caller, bond);223246224 <session::Pallet<T>>::set_keys(247 <session::Pallet<T>>::set_keys(225 RawOrigin::Signed(caller.clone()).into(),248 RawOrigin::Signed(caller.clone()).into(),226 keys::<T>(c + 1),249 keys::<T>(c + 1),227 Vec::new()250 Vec::new(),228 ).unwrap();251 )229252 .unwrap();253254 #[extrinsic_call]230 }: _(RawOrigin::Signed(caller.clone()))255 _(RawOrigin::Signed(caller.clone()));231 verify {256232 assert_last_event::<T>(Event::LicenseObtained{account_id: caller, deposit: bond / 2u32.into()}.into());257 assert_last_event::<T>(233 }258 Event::LicenseObtained {259 account_id: caller,260 deposit: bond / 2u32.into(),261 }262 .into(),263 );264265 Ok(())266 }234267235 // worst case is when we have all the max-candidate slots filled except one, and we fill that268 // worst case is when we have all the max-candidate slots filled except one, and we fill that236 // one.269 // one.270 #[benchmark]237 onboard {271 fn onboard(c: Linear<1, MAX_INVULNERABLES>) -> Result<(), BenchmarkError> {238 let c in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES - 1;239240 register_validators::<T>(c);272 register_validators::<T>(c);241 register_candidates::<T>(c);273 register_candidates::<T>(c);242274243 let caller: T::AccountId = whitelisted_caller();275 let caller: T::AccountId = whitelisted_caller();244 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();276 let bond: BalanceOf<T> = balance_unit::<T>() * 2u32.into();245 T::Currency::set_balance(&caller, bond);277 T::Currency::set_balance(&caller, bond);246278247 let origin = RawOrigin::Signed(caller.clone());279 let origin = RawOrigin::Signed(caller.clone());248280249 <session::Pallet<T>>::set_keys(281 <session::Pallet<T>>::set_keys(origin.clone().into(), keys::<T>(c + 1), Vec::new())250 origin.clone().into(),251 keys::<T>(c + 1),252 Vec::new()253 ).unwrap();282 .unwrap();254283255 assert_ok!(284 assert_ok!(<CollatorSelection<T>>::get_license(origin.clone().into()));256 <CollatorSelection<T>>::get_license(origin.clone().into())285257 );286 #[extrinsic_call]258 }: _(origin)287 _(origin);259 verify {288260 assert_last_event::<T>(Event::CandidateAdded{account_id: caller}.into());289 assert_last_event::<T>(Event::CandidateAdded { account_id: caller }.into());261 }290291 Ok(())292 }262293263 // worst case is the last candidate leaving.294 // worst case is the last candidate leaving.295 #[benchmark]264 offboard {296 fn offboard(c: Linear<0, MAX_INVULNERABLES>) -> Result<(), BenchmarkError> {265 let c in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES;297 let c = c + 1;266298267 register_validators::<T>(c);299 register_validators::<T>(c);268 register_candidates::<T>(c);300 register_candidates::<T>(c);269301270 let leaving = <Candidates<T>>::get().last().unwrap().clone();302 let leaving = <Candidates<T>>::get().last().unwrap().clone();271 whitelist!(leaving);303 whitelist!(leaving);304305 #[extrinsic_call]272 }: _(RawOrigin::Signed(leaving.clone()))306 _(RawOrigin::Signed(leaving.clone()));273 verify {307274 assert_last_event::<T>(Event::CandidateRemoved{account_id: leaving}.into());308 assert_last_event::<T>(275 }309 Event::CandidateRemoved {310 account_id: leaving,311 }312 .into(),313 );314315 Ok(())316 }276317277 // worst case is the last candidate leaving.318 // worst case is the last candidate leaving.319 #[benchmark]278 release_license {320 fn release_license(c: Linear<0, MAX_INVULNERABLES>) -> Result<(), BenchmarkError> {279 let c in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES;321 let c = c + 1;280 let bond = balance_unit::<T>();322 let bond = balance_unit::<T>();281323282 register_validators::<T>(c);324 register_validators::<T>(c);283 register_candidates::<T>(c);325 register_candidates::<T>(c);284326285 let leaving = <Candidates<T>>::get().last().unwrap().clone();327 let leaving = <Candidates<T>>::get().last().unwrap().clone();286 whitelist!(leaving);328 whitelist!(leaving);329330 #[extrinsic_call]287 }: _(RawOrigin::Signed(leaving.clone()))331 _(RawOrigin::Signed(leaving.clone()));288 verify {332289 assert_last_event::<T>(Event::LicenseReleased{account_id: leaving, deposit_returned: bond}.into());333 assert_last_event::<T>(290 }334 Event::LicenseReleased {335 account_id: leaving,336 deposit_returned: bond,337 }338 .into(),339 );340341 Ok(())342 }291343292 // worst case is the last candidate leaving.344 // worst case is the last candidate leaving.345 #[benchmark]293 force_release_license {346 fn force_release_license(c: Linear<0, MAX_INVULNERABLES>) -> Result<(), BenchmarkError> {294 let c in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES;347 let c = c + 1;295 let bond = balance_unit::<T>();348 let bond = balance_unit::<T>();296349297 register_validators::<T>(c);350 register_validators::<T>(c);298 register_candidates::<T>(c);351 register_candidates::<T>(c);299352300 let leaving = <Candidates<T>>::get().last().unwrap().clone();353 let leaving = <Candidates<T>>::get().last().unwrap().clone();301 whitelist!(leaving);354 whitelist!(leaving);302 let origin = T::UpdateOrigin::try_successful_origin().unwrap();355 let origin = T::UpdateOrigin::try_successful_origin().unwrap();356357 #[block]303 }: {358 {304 assert_ok!(359 assert_ok!(<CollatorSelection<T>>::force_release_license(305 <CollatorSelection<T>>::force_release_license(origin, leaving.clone())360 origin,361 leaving.clone()306 );362 ));307 }363 }308 verify {364309 assert_last_event::<T>(Event::LicenseReleased{account_id: leaving, deposit_returned: bond}.into());365 assert_last_event::<T>(310 }366 Event::LicenseReleased {367 account_id: leaving,368 deposit_returned: bond,369 }370 .into(),371 );372373 Ok(())374 }311375312 // worst case is paying a non-existing candidate account.376 // worst case is paying a non-existing candidate account.377 #[benchmark]313 note_author {378 fn note_author() -> Result<(), BenchmarkError> {314 T::Currency::set_balance(379 T::Currency::set_balance(315 &<CollatorSelection<T>>::account_id(),380 &<CollatorSelection<T>>::account_id(),316 balance_unit::<T>() * 4u32.into(),381 balance_unit::<T>() * 4u32.into(),317 );382 );318 let author = account("author", 0, SEED);383 let author = account("author", 0, SEED);319 let new_block: BlockNumberFor<T>= 10u32.into();384 let new_block: BlockNumberFor<T> = 10u32.into();320385321 frame_system::Pallet::<T>::set_block_number(new_block);386 frame_system::Pallet::<T>::set_block_number(new_block);322 assert!(T::Currency::balance(&author) == 0u32.into());387 assert!(T::Currency::balance(&author) == 0u32.into());388389 #[block]323 }: {390 {324 <CollatorSelection<T> as EventHandler<_, _>>::note_author(author.clone())391 <CollatorSelection<T> as EventHandler<_, _>>::note_author(author.clone());325 } verify {392 }393326 assert!(T::Currency::balance(&author) > 0u32.into());394 assert!(T::Currency::balance(&author) > 0u32.into());327 assert_eq!(frame_system::Pallet::<T>::block_number(), new_block);395 assert_eq!(frame_system::Pallet::<T>::block_number(), new_block);328 }396397 Ok(())398 }329399330 // worst case for new session.400 // worst case for new session.401 #[benchmark]331 new_session {402 fn new_session(403 r: Linear<0, MAX_INVULNERABLES>,404 c: Linear<0, MAX_INVULNERABLES>,405 ) -> Result<(), BenchmarkError> {332 let r in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES;406 let r = r + 1;333 let c in 1 .. T::MaxCollators::get() - INITIAL_INVULNERABLES;407 let c = c + 1;334408335 frame_system::Pallet::<T>::set_block_number(0u32.into());409 frame_system::Pallet::<T>::set_block_number(0u32.into());336410337 register_validators::<T>(c);411 register_validators::<T>(c);338 register_candidates::<T>(c);412 register_candidates::<T>(c);339413340 let new_block: BlockNumberFor<T>= 1800u32.into();414 let new_block: BlockNumberFor<T> = 1800u32.into();341 let zero_block: BlockNumberFor<T> = 0u32.into();415 let zero_block: BlockNumberFor<T> = 0u32.into();342 let candidates = <Candidates<T>>::get();416 let candidates = <Candidates<T>>::get();343417344 let non_removals = c.saturating_sub(r);418 let non_removals = c.saturating_sub(r);345419346 for i in 0..c {420 for i in 0..c {347 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), zero_block);421 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), zero_block);348 }422 }349423350 if non_removals > 0 {424 if non_removals > 0 {351 for i in 0..non_removals {425 for i in 0..non_removals {352 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), new_block);426 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), new_block);353 }427 }354 } else {428 } else {355 for i in 0..c {429 for i in 0..c {356 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), new_block);430 <LastAuthoredBlock<T>>::insert(candidates[i as usize].clone(), new_block);357 }431 }358 }432 }359433360 let pre_length = <Candidates<T>>::get().len();434 let pre_length = <Candidates<T>>::get().len();361435362 frame_system::Pallet::<T>::set_block_number(new_block);436 frame_system::Pallet::<T>::set_block_number(new_block);363437364 assert!(<Candidates<T>>::get().len() == c as usize);438 assert!(<Candidates<T>>::get().len() == c as usize);439440 #[block]441 {442 <CollatorSelection<T> as SessionManager<_>>::new_session(0);443 }444445 if c > r {446 assert!(<Candidates<T>>::get().len() < pre_length);447 } else {448 assert!(<Candidates<T>>::get().len() == pre_length);449 }450451 Ok(())365 }: {452 }453454 impl_benchmark_test_suite!(366 <CollatorSelection<T> as SessionManager<_>>::new_session(0)455 CollatorSelection,367 } verify {368 if c > r {369 assert!(<Candidates<T>>::get().len() < pre_length);456 crate::mock::new_test_ext(),370 } else {371 assert!(<Candidates<T>>::get().len() == pre_length);457 crate::mock::Test,372 }458 );373 }459}374}375376impl_benchmark_test_suite!(377 CollatorSelection,378 crate::mock::new_test_ext(),379 crate::mock::Test,380);381460pallets/common/src/benchmarking.rsdiffbeforeafterboth181819use core::convert::TryInto;19use core::convert::TryInto;202021use frame_benchmarking::{account, benchmarks};21use frame_benchmarking::{account, v2::*};22use frame_support::{22use frame_support::{23 pallet_prelude::ConstU32,23 pallet_prelude::ConstU32,24 traits::{fungible::Balanced, tokens::Precision, Get, Imbalance},24 traits::{fungible::Balanced, tokens::Precision, Get, Imbalance},25 BoundedVec,25 BoundedVec,26};26};27use pallet_evm::account::CrossAccountId;27use pallet_evm::account::CrossAccountId;28use sp_runtime::{traits::Zero, DispatchError};28use sp_runtime::{traits::Zero, DispatchError};29use sp_std::vec::Vec;29use sp_std::{vec, vec::Vec};30use up_data_structs::{30use up_data_structs::{31 AccessMode, CollectionId, CollectionMode, CollectionPermissions, CreateCollectionData,31 AccessMode, CollectionId, CollectionMode, CollectionPermissions, CreateCollectionData,32 NestingPermissions, PropertiesPermissionMap, Property, PropertyKey, PropertyValue,32 NestingPermissions, PropertiesPermissionMap, Property, PropertyKey, PropertyValue,178 () => {}178 () => {}179}179}180180181#[benchmarks]181benchmarks! {182mod benchmarks {183 use super::*;184185 #[benchmark]182 set_collection_properties {186 fn set_collection_properties(183 let b in 0..MAX_PROPERTIES_PER_ITEM;187 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,188 ) -> Result<(), BenchmarkError> {184 bench_init!{189 bench_init! {185 owner: sub; collection: collection(owner);190 owner: sub; collection: collection(owner);186 owner: cross_from_sub;191 owner: cross_from_sub;187 };192 };188 let props = (0..b).map(|p| Property {193 let props = (0..b)194 .map(|p| Property {189 key: property_key(p as usize),195 key: property_key(p as usize),190 value: property_value(),196 value: property_value(),191 }).collect::<Vec<_>>();197 })198 .collect::<Vec<_>>();199200 #[block]192 }: {<Pallet<T>>::set_collection_properties(&collection, &owner, props.into_iter())?}201 {193202 <Pallet<T>>::set_collection_properties(&collection, &owner, props.into_iter())?;203 }204205 Ok(())206 }207208 #[benchmark]194 delete_collection_properties {209 fn delete_collection_properties(195 let b in 0..MAX_PROPERTIES_PER_ITEM;210 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,211 ) -> Result<(), BenchmarkError> {196 bench_init!{212 bench_init! {197 owner: sub; collection: collection(owner);213 owner: sub; collection: collection(owner);198 owner: cross_from_sub;214 owner: cross_from_sub;199 };215 };200 let props = (0..b).map(|p| Property {216 let props = (0..b)217 .map(|p| Property {201 key: property_key(p as usize),218 key: property_key(p as usize),202 value: property_value(),219 value: property_value(),203 }).collect::<Vec<_>>();220 })221 .collect::<Vec<_>>();204 <Pallet<T>>::set_collection_properties(&collection, &owner, props.into_iter())?;222 <Pallet<T>>::set_collection_properties(&collection, &owner, props.into_iter())?;205 let to_delete = (0..b).map(|p| property_key(p as usize)).collect::<Vec<_>>();223 let to_delete = (0..b).map(|p| property_key(p as usize)).collect::<Vec<_>>();224225 #[block]206 }: {<Pallet<T>>::delete_collection_properties(&collection, &owner, to_delete.into_iter())?}226 {207227 <Pallet<T>>::delete_collection_properties(&collection, &owner, to_delete.into_iter())?;228 }229230 Ok(())231 }232233 #[benchmark]208 check_accesslist{234 fn check_accesslist() -> Result<(), BenchmarkError> {209 bench_init!{235 bench_init! {210 owner: sub; collection: collection(owner);236 owner: sub; collection: collection(owner);211 sender: cross_from_sub(owner);237 sender: cross_from_sub(owner);212 };238 };213239214 let mut collection_handle = <CollectionHandle<T>>::try_get(collection.id)?;240 let mut collection_handle = <CollectionHandle<T>>::try_get(collection.id)?;215 <Pallet<T>>::update_permissions(241 <Pallet<T>>::update_permissions(216 &sender,242 &sender,217 &mut collection_handle,243 &mut collection_handle,218 CollectionPermissions { access: Some(AccessMode::AllowList), ..Default::default() }244 CollectionPermissions {245 access: Some(AccessMode::AllowList),246 ..Default::default()247 },219 )?;248 )?;220249221 <Pallet<T>>::toggle_allowlist(250 <Pallet<T>>::toggle_allowlist(&collection, &sender, &sender, true)?;222 &collection,223 &sender,224 &sender,225 true,226 )?;227251228 assert_eq!(collection_handle.permissions.access(), AccessMode::AllowList);252 assert_eq!(229253 collection_handle.permissions.access(),254 AccessMode::AllowList255 );256257 #[block]258 {259 collection_handle.check_allowlist(&sender)?;260 }261262 Ok(())230 }: {collection_handle.check_allowlist(&sender)?;}263 }231264265 #[benchmark]232 init_token_properties_common {266 fn init_token_properties_common() -> Result<(), BenchmarkError> {233 bench_init!{267 bench_init! {234 owner: sub; collection: collection(owner);268 owner: sub; collection: collection(owner);235 sender: sub;269 sender: sub;236 sender: cross_from_sub(sender);270 sender: cross_from_sub(sender);237 };271 };272273 #[block]238 }: {load_is_admin_and_property_permissions(&collection, &sender);}274 {275 load_is_admin_and_property_permissions(&collection, &sender);276 }277278 Ok(())279 }239}280}240281pallets/configuration/src/benchmarking.rsdiffbeforeafterboth161617//! Benchmarking setup for pallet-configuration17//! Benchmarking setup for pallet-configuration181819use frame_benchmarking::benchmarks;19use frame_benchmarking::v2::*;20use frame_support::assert_ok;20use frame_support::assert_ok;21use frame_system::{pallet_prelude::*, EventRecord, RawOrigin};21use frame_system::{pallet_prelude::*, EventRecord, RawOrigin};22use sp_std::vec;222323use super::*;24use super::*;242530 assert_eq!(event, &system_event);31 assert_eq!(event, &system_event);31}32}323333benchmarks! {34#[benchmarks(34 where_clause { where35 where35 T: Config,36 T: Config,36 T::Balance: From<u32>37 T::Balance: From<u32>37 }38)]3839mod benchmarks {40 use super::*;4142 #[benchmark]39 set_weight_to_fee_coefficient_override {43 fn set_weight_to_fee_coefficient_override() -> Result<(), BenchmarkError> {40 let coeff: u64 = 999;44 let coeff: u64 = 999;4546 #[block]41 }: {47 {42 assert_ok!(48 assert_ok!(<Pallet<T>>::set_weight_to_fee_coefficient_override(43 <Pallet<T>>::set_weight_to_fee_coefficient_override(RawOrigin::Root.into(), Some(coeff))49 RawOrigin::Root.into(),50 Some(coeff)44 );51 ));45 }52 }465354 Ok(())55 }5657 #[benchmark]47 set_min_gas_price_override {58 fn set_min_gas_price_override() -> Result<(), BenchmarkError> {48 let coeff: u64 = 999;59 let coeff: u64 = 999;6061 #[block]49 }: {62 {50 assert_ok!(63 assert_ok!(<Pallet<T>>::set_min_gas_price_override(51 <Pallet<T>>::set_min_gas_price_override(RawOrigin::Root.into(), Some(coeff))64 RawOrigin::Root.into(),65 Some(coeff)52 );66 ));53 }67 }546869 Ok(())70 }7172 #[benchmark]55 set_app_promotion_configuration_override {73 fn set_app_promotion_configuration_override() -> Result<(), BenchmarkError> {56 let configuration: AppPromotionConfiguration<BlockNumberFor<T>> = Default::default();74 let configuration: AppPromotionConfiguration<BlockNumberFor<T>> = Default::default();7576 #[block]57 }: {77 {58 assert_ok!(78 assert_ok!(<Pallet<T>>::set_app_promotion_configuration_override(59 <Pallet<T>>::set_app_promotion_configuration_override(RawOrigin::Root.into(), configuration)79 RawOrigin::Root.into(),80 configuration60 );81 ));61 }82 }628384 Ok(())85 }8687 #[benchmark]63 set_collator_selection_desired_collators {88 fn set_collator_selection_desired_collators() -> Result<(), BenchmarkError> {64 let max: u32 = 999;89 let max: u32 = 999;9091 #[block]65 }: {92 {66 assert_ok!(93 assert_ok!(<Pallet<T>>::set_collator_selection_desired_collators(67 <Pallet<T>>::set_collator_selection_desired_collators(RawOrigin::Root.into(), Some(max))94 RawOrigin::Root.into(),95 Some(max)68 );96 ));69 }97 }70 verify {9871 assert_last_event::<T>(Event::NewDesiredCollators{desired_collators: Some(max)}.into());99 assert_last_event::<T>(72 }100 Event::NewDesiredCollators {73101 desired_collators: Some(max),102 }103 .into(),104 );105106 Ok(())107 }108109 #[benchmark]74 set_collator_selection_license_bond {110 fn set_collator_selection_license_bond() -> Result<(), BenchmarkError> {75 let bond_cost: Option<T::Balance> = Some(1000u32.into());111 let bond_cost: Option<T::Balance> = Some(1000u32.into());112113 #[block]76 }: {114 {77 assert_ok!(115 assert_ok!(<Pallet<T>>::set_collator_selection_license_bond(78 <Pallet<T>>::set_collator_selection_license_bond(RawOrigin::Root.into(), bond_cost)116 RawOrigin::Root.into(),117 bond_cost79 );118 ));80 }119 }81 verify {12082 assert_last_event::<T>(Event::NewCollatorLicenseBond{bond_cost}.into());121 assert_last_event::<T>(Event::NewCollatorLicenseBond { bond_cost }.into());83 }12284123 Ok(())124 }125126 #[benchmark]85 set_collator_selection_kick_threshold {127 fn set_collator_selection_kick_threshold() -> Result<(), BenchmarkError> {86 let threshold: Option<BlockNumberFor<T>> = Some(900u32.into());128 let threshold: Option<BlockNumberFor<T>> = Some(900u32.into());129130 #[block]87 }: {131 {88 assert_ok!(132 assert_ok!(<Pallet<T>>::set_collator_selection_kick_threshold(89 <Pallet<T>>::set_collator_selection_kick_threshold(RawOrigin::Root.into(), threshold)133 RawOrigin::Root.into(),134 threshold90 );135 ));91 }136 }92 verify {13793 assert_last_event::<T>(Event::NewCollatorKickThreshold{length_in_blocks: threshold}.into());138 assert_last_event::<T>(94 }139 Event::NewCollatorKickThreshold {95}140 length_in_blocks: threshold,141 }142 .into(),143 );144145 Ok(())146 }147}96148pallets/evm-migration/src/benchmarking.rsdiffbeforeafterboth161617#![allow(missing_docs)]17#![allow(missing_docs)]181819use frame_benchmarking::benchmarks;19use frame_benchmarking::v2::*;20use frame_system::RawOrigin;20use frame_system::RawOrigin;21use sp_core::{H160, H256};21use sp_core::{H160, H256};22use sp_std::{vec, vec::Vec};22use sp_std::{vec, vec::Vec};232324use super::{Call, Config, Pallet};24use super::{Call, Config, Pallet};252526benchmarks! {26#[benchmarks(27 where_clause { where <T as Config>::RuntimeEvent: parity_scale_codec::Encode }27 where <T as Config>::RuntimeEvent: parity_scale_codec::Encode2828)]29mod benchmarks {30 use super::*;3132 #[benchmark]29 begin {33 fn begin() -> Result<(), BenchmarkError> {34 #[extrinsic_call]30 }: _(RawOrigin::Root, H160::default())35 _(RawOrigin::Root, H160::default());313637 Ok(())38 }3940 #[benchmark]32 set_data {41 fn set_data(b: Linear<0, 80>) -> Result<(), BenchmarkError> {33 let b in 0..80;34 let address = H160::from_low_u64_be(b as u64);42 let address = H160::from_low_u64_be(b as u64);35 let mut data = Vec::new();43 let mut data = Vec::new();36 for i in 0..b {44 for i in 0..b {39 H256::from_low_u64_be(i as u64),47 H256::from_low_u64_be(i as u64),40 ));48 ));41 }49 }42 <Pallet<T>>::begin(RawOrigin::Root.into(), address)?;50 <Pallet<T>>::begin(RawOrigin::Root.into(), address)?;5152 #[extrinsic_call]43 }: _(RawOrigin::Root, address, data)53 _(RawOrigin::Root, address, data);445455 Ok(())56 }5758 #[benchmark]45 finish {59 fn finish(b: Linear<0, 80>) -> Result<(), BenchmarkError> {46 let b in 0..80;47 let address = H160::from_low_u64_be(b as u64);60 let address = H160::from_low_u64_be(b as u64);48 let data: Vec<u8> = (0..b as u8).collect();61 let data: Vec<u8> = (0..b as u8).collect();49 <Pallet<T>>::begin(RawOrigin::Root.into(), address)?;62 <Pallet<T>>::begin(RawOrigin::Root.into(), address)?;6364 #[extrinsic_call]50 }: _(RawOrigin::Root, address, data)65 _(RawOrigin::Root, address, data);516667 Ok(())68 }6970 #[benchmark]52 insert_eth_logs {71 fn insert_eth_logs(b: Linear<0, 200>) -> Result<(), BenchmarkError> {53 let b in 0..200;54 let logs = (0..b).map(|_| ethereum::Log {72 let logs = (0..b)73 .map(|_| ethereum::Log {55 address: H160([b as u8; 20]),74 address: H160([b as u8; 20]),56 data: vec![b as u8; 128],75 data: vec![b as u8; 128],57 topics: vec![H256([b as u8; 32]); 6],76 topics: vec![H256([b as u8; 32]); 6],58 }).collect::<Vec<_>>();77 })78 .collect::<Vec<_>>();7980 #[extrinsic_call]59 }: _(RawOrigin::Root, logs)81 _(RawOrigin::Root, logs);608283 Ok(())84 }8586 #[benchmark]61 insert_events {87 fn insert_events(b: Linear<0, 200>) -> Result<(), BenchmarkError> {62 let b in 0..200;63 use parity_scale_codec::Encode;88 use parity_scale_codec::Encode;64 let logs = (0..b).map(|_| <T as Config>::RuntimeEvent::from(crate::Event::<T>::TestEvent).encode()).collect::<Vec<_>>();89 let logs = (0..b)90 .map(|_| <T as Config>::RuntimeEvent::from(crate::Event::<T>::TestEvent).encode())91 .collect::<Vec<_>>();9293 #[extrinsic_call]65 }: _(RawOrigin::Root, logs)94 _(RawOrigin::Root, logs);66}9596 Ok(())97 }98}6799pallets/foreign-assets/src/benchmarking.rsdiffbeforeafterboth161617#![allow(missing_docs)]17#![allow(missing_docs)]181819use frame_benchmarking::{account, benchmarks};19use frame_benchmarking::{account, v2::*};20use frame_support::traits::Currency;20use frame_support::traits::Currency;21use frame_system::RawOrigin;21use frame_system::RawOrigin;22use sp_std::{boxed::Box, vec::Vec};22use sp_std::{boxed::Box, vec, vec::Vec};23use staging_xcm::{opaque::latest::Junction::Parachain, v3::Junctions::X1, VersionedMultiLocation};23use staging_xcm::{opaque::latest::Junction::Parachain, v3::Junctions::X1, VersionedMultiLocation};242425use super::{Call, Config, Pallet};25use super::{Call, Config, Pallet};31 .unwrap()31 .unwrap()32}32}333334#[benchmarks]34benchmarks! {35mod benchmarks {36 use super::*;3738 #[benchmark]35 register_foreign_asset {39 fn register_foreign_asset() -> Result<(), BenchmarkError> {36 let owner: T::AccountId = account("user", 0, 1);40 let owner: T::AccountId = account("user", 0, 1);37 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000)));41 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000)));38 let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{42 let metadata: AssetMetadata<43 <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,44 > = AssetMetadata {39 name: bounded(b"name"),45 name: bounded(b"name"),40 symbol: bounded(b"symbol"),46 symbol: bounded(b"symbol"),41 decimals: 18,47 decimals: 18,42 minimal_balance: 1u32.into()48 minimal_balance: 1u32.into(),43 };49 };44 let mut balance: <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance =50 let mut balance: <<T as Config>::Currency as Currency<51 <T as frame_system::Config>::AccountId,45 4_000_000_000u32.into();52 >>::Balance = 4_000_000_000u32.into();46 balance = balance * balance;53 balance = balance * balance;47 <T as Config>::Currency::make_free_balance_be(&owner,54 <T as Config>::Currency::make_free_balance_be(&owner, balance);48 balance);5556 #[extrinsic_call]57 _(58 RawOrigin::Root,59 owner,60 Box::new(location),61 Box::new(metadata),62 );6364 Ok(())49 }: _(RawOrigin::Root, owner, Box::new(location), Box::new(metadata))65 }506667 #[benchmark]51 update_foreign_asset {68 fn update_foreign_asset() -> Result<(), BenchmarkError> {52 let owner: T::AccountId = account("user", 0, 1);69 let owner: T::AccountId = account("user", 0, 1);53 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000)));70 let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000)));54 let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{71 let metadata: AssetMetadata<72 <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,73 > = AssetMetadata {55 name: bounded(b"name"),74 name: bounded(b"name"),56 symbol: bounded(b"symbol"),75 symbol: bounded(b"symbol"),57 decimals: 18,76 decimals: 18,58 minimal_balance: 1u32.into()77 minimal_balance: 1u32.into(),59 };78 };60 let metadata2: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{79 let metadata2: AssetMetadata<80 <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance,81 > = AssetMetadata {61 name: bounded(b"name2"),82 name: bounded(b"name2"),62 symbol: bounded(b"symbol2"),83 symbol: bounded(b"symbol2"),63 decimals: 18,84 decimals: 18,64 minimal_balance: 1u32.into()85 minimal_balance: 1u32.into(),65 };86 };66 let mut balance: <<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance =87 let mut balance: <<T as Config>::Currency as Currency<88 <T as frame_system::Config>::AccountId,67 4_000_000_000u32.into();89 >>::Balance = 4_000_000_000u32.into();68 balance = balance * balance;90 balance = balance * balance;69 <T as Config>::Currency::make_free_balance_be(&owner, balance);91 <T as Config>::Currency::make_free_balance_be(&owner, balance);70 Pallet::<T>::register_foreign_asset(RawOrigin::Root.into(), owner, Box::new(location.clone()), Box::new(metadata))?;92 Pallet::<T>::register_foreign_asset(93 RawOrigin::Root.into(),94 owner,95 Box::new(location.clone()),96 Box::new(metadata),97 )?;9899 #[extrinsic_call]100 _(RawOrigin::Root, 0, Box::new(location), Box::new(metadata2));101102 Ok(())71 }: _(RawOrigin::Root, 0, Box::new(location), Box::new(metadata2))103 }72}104}73105pallets/fungible/src/benchmarking.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use frame_benchmarking::{account, benchmarks};17use frame_benchmarking::{account, v2::*};18use pallet_common::{bench_init, benchmarking::create_collection_raw};18use pallet_common::{bench_init, benchmarking::create_collection_raw};19use sp_std::prelude::*;19use sp_std::prelude::*;20use up_data_structs::{budget::Unlimited, CollectionMode, MAX_ITEMS_PER_BATCH};20use up_data_structs::{budget::Unlimited, CollectionMode, MAX_ITEMS_PER_BATCH};35 )35 )36}36}373738#[benchmarks]38benchmarks! {39mod benchmarks {40 use super::*;4142 #[benchmark]39 create_item {43 fn create_item() -> Result<(), BenchmarkError> {40 bench_init!{44 bench_init! {41 owner: sub; collection: collection(owner);45 owner: sub; collection: collection(owner);42 sender: cross_from_sub(owner); to: cross_sub;46 sender: cross_from_sub(owner); to: cross_sub;43 };47 };4849 #[block]44 }: {<Pallet<T>>::create_item(&collection, &sender, (to, 200), &Unlimited)?}50 {4551 <Pallet<T>>::create_item(&collection, &sender, (to, 200), &Unlimited)?;52 }5354 Ok(())55 }5657 #[benchmark]46 create_multiple_items_ex {58 fn create_multiple_items_ex(b: Linear<0, MAX_ITEMS_PER_BATCH>) -> Result<(), BenchmarkError> {47 let b in 0..MAX_ITEMS_PER_BATCH;48 bench_init!{59 bench_init! {49 owner: sub; collection: collection(owner);60 owner: sub; collection: collection(owner);50 sender: cross_from_sub(owner);61 sender: cross_from_sub(owner);51 };62 };52 let data = (0..b).map(|i| {63 let data = (0..b)64 .map(|i| {53 bench_init!(to: cross_sub(i););65 bench_init!(to: cross_sub(i););54 (to, 200)66 (to, 200)55 }).collect::<BTreeMap<_, _>>();67 })68 .collect::<BTreeMap<_, _>>();6970 #[block]56 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}71 {5772 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;73 }7475 Ok(())76 }7778 #[benchmark]58 burn_item {79 fn burn_item() -> Result<(), BenchmarkError> {59 bench_init!{80 bench_init! {60 owner: sub; collection: collection(owner);81 owner: sub; collection: collection(owner);61 owner: cross_from_sub; burner: cross_sub;82 owner: cross_from_sub; burner: cross_sub;62 };83 };63 <Pallet<T>>::create_item(&collection, &owner, (burner.clone(), 200), &Unlimited)?;84 <Pallet<T>>::create_item(&collection, &owner, (burner.clone(), 200), &Unlimited)?;8586 #[block]87 {88 <Pallet<T>>::burn(&collection, &burner, 100)?;89 }9091 Ok(())64 }: {<Pallet<T>>::burn(&collection, &burner, 100)?}92 }659394 #[benchmark]66 transfer_raw {95 fn transfer_raw() -> Result<(), BenchmarkError> {67 bench_init!{96 bench_init! {68 owner: sub; collection: collection(owner);97 owner: sub; collection: collection(owner);69 owner: cross_from_sub; sender: cross_sub; to: cross_sub;98 owner: cross_from_sub; sender: cross_sub; to: cross_sub;70 };99 };71 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;100 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;101102 #[block]72 }: {<Pallet<T>>::transfer(&collection, &sender, &to, 200, &Unlimited)?}103 {73104 <Pallet<T>>::transfer(&collection, &sender, &to, 200, &Unlimited)?;105 }106107 Ok(())108 }109110 #[benchmark]74 approve {111 fn approve() -> Result<(), BenchmarkError> {75 bench_init!{112 bench_init! {76 owner: sub; collection: collection(owner);113 owner: sub; collection: collection(owner);77 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;114 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;78 };115 };79 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;116 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;117118 #[block]80 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, 100)?}119 {81120 <Pallet<T>>::set_allowance(&collection, &sender, &spender, 100)?;121 }122123 Ok(())124 }125126 #[benchmark]82 approve_from {127 fn approve_from() -> Result<(), BenchmarkError> {83 bench_init!{128 bench_init! {84 owner: sub; collection: collection(owner);129 owner: sub; collection: collection(owner);85 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;130 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;8613187 };132 };88 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());133 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());89 <Pallet<T>>::create_item(&collection, &owner, (owner_eth.clone(), 200), &Unlimited)?;134 <Pallet<T>>::create_item(&collection, &owner, (owner_eth.clone(), 200), &Unlimited)?;135136 #[block]137 {138 <Pallet<T>>::set_allowance_from(&collection, &sender, &owner_eth, &spender, 100)?;139 }140141 Ok(())90 }: {<Pallet<T>>::set_allowance_from(&collection, &sender, &owner_eth, &spender, 100)?}142 }91143144 #[benchmark]92 check_allowed_raw {145 fn check_allowed_raw() -> Result<(), BenchmarkError> {93 bench_init!{146 bench_init! {94 owner: sub; collection: collection(owner);147 owner: sub; collection: collection(owner);95 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;148 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;96 };149 };97 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;150 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;98 <Pallet<T>>::set_allowance(&collection, &sender, &spender, 200)?;151 <Pallet<T>>::set_allowance(&collection, &sender, &spender, 200)?;152153 #[block]154 {155 <Pallet<T>>::check_allowed(&collection, &spender, &sender, 200, &Unlimited)?;156 }157158 Ok(())99 }: {<Pallet<T>>::check_allowed(&collection, &spender, &sender, 200, &Unlimited)?;}159 }100160161 #[benchmark]101 set_allowance_unchecked_raw {162 fn set_allowance_unchecked_raw() -> Result<(), BenchmarkError> {102 bench_init!{163 bench_init! {103 owner: sub; collection: collection(owner);164 owner: sub; collection: collection(owner);104 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;165 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;105 };166 };106 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;167 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;168169 #[block]107 }: {<Pallet<T>>::set_allowance_unchecked(&collection, &sender, &spender, 200);}170 {108171 <Pallet<T>>::set_allowance_unchecked(&collection, &sender, &spender, 200);172 }173174 Ok(())175 }176177 #[benchmark]109 burn_from {178 fn burn_from() -> Result<(), BenchmarkError> {110 bench_init!{179 bench_init! {111 owner: sub; collection: collection(owner);180 owner: sub; collection: collection(owner);112 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;181 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;113 };182 };114 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;183 <Pallet<T>>::create_item(&collection, &owner, (sender.clone(), 200), &Unlimited)?;115 <Pallet<T>>::set_allowance(&collection, &sender, &burner, 200)?;184 <Pallet<T>>::set_allowance(&collection, &sender, &burner, 200)?;185186 #[block]187 {188 <Pallet<T>>::burn_from(&collection, &burner, &sender, 100, &Unlimited)?189 }190191 Ok(())116 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, 100, &Unlimited)?}192 }117}193}118194pallets/identity/src/benchmarking.rsdiffbeforeafterboth37#![cfg(feature = "runtime-benchmarks")]37#![cfg(feature = "runtime-benchmarks")]38#![allow(clippy::no_effect)]38#![allow(clippy::no_effect)]393940use frame_benchmarking::{account, benchmarks, whitelisted_caller};40use frame_benchmarking::v2::*;41use frame_support::{41use frame_support::{assert_ok, ensure, traits::EnsureOrigin};42 assert_ok, ensure,43 traits::{EnsureOrigin, Get},44};45use frame_system::RawOrigin;42use frame_system::RawOrigin;46use sp_runtime::traits::Bounded;43use sp_runtime::traits::Bounded;4744145 200u32.into()142 200u32.into()146}143}147144148benchmarks! {145#[benchmarks]146mod benchmarks {149 add_registrar {147 use super::*;148150 let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;149 const MAX_REGISTRARS: u32 = 20;150 const MAX_ADDITIONAL_FIELDS: u32 = 100;151 const MAX_SUB_ACCOUNTS: u32 = 100;152153 #[benchmark]154 fn add_registrar(r: Linear<2, MAX_REGISTRARS>) -> Result<(), BenchmarkError> {155 let r = r - 1;156 add_registrars::<T>(r)?;151 ensure!(Registrars::<T>::get().len() as u32 == r, "Registrars not set up correctly.");157 ensure!(158 Registrars::<T>::get().len() as u32 == r,159 "Registrars not set up correctly."160 );152 let origin = T::RegistrarOrigin::try_successful_origin().unwrap();161 let origin = T::RegistrarOrigin::try_successful_origin().unwrap();153 let account = T::Lookup::unlookup(account("registrar", r + 1, SEED));162 let account = T::Lookup::unlookup(account("registrar", r + 1, SEED));163154 }: _<T::RuntimeOrigin>(origin, account)164 #[extrinsic_call]155 verify {165 _(origin as T::RuntimeOrigin, account);166156 ensure!(Registrars::<T>::get().len() as u32 == r + 1, "Registrars not added.");167 ensure!(168 Registrars::<T>::get().len() as u32 == r + 1,169 "Registrars not added."170 );171172 Ok(())157 }173 }158174159 set_identity {175 #[benchmark]176 fn set_identity(160 let r in 1 .. T::MaxRegistrars::get() => add_registrars::<T>(r)?;177 x: Linear<0, MAX_ADDITIONAL_FIELDS>,178 r: Linear<1, MAX_REGISTRARS>,179 ) -> Result<(), BenchmarkError> {161 let x in 0 .. T::MaxAdditionalFields::get();180 add_registrars::<T>(r)?;162 let caller = {181 let caller = {163 // The target user182 // The target user164 let caller: T::AccountId = whitelisted_caller();183 let caller: T::AccountId = whitelisted_caller();165 let caller_lookup = T::Lookup::unlookup(caller.clone());184 let caller_lookup = T::Lookup::unlookup(caller.clone());166 let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();185 let caller_origin: <T as frame_system::Config>::RuntimeOrigin =186 RawOrigin::Signed(caller.clone()).into();167 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());187 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());168188169 // Add an initial identity189 // Add an initial identity173 // User requests judgement from all the registrars, and they approve193 // User requests judgement from all the registrars, and they approve174 for i in 0..r {194 for i in 0..r {175 let registrar: T::AccountId = account("registrar", i, SEED);195 let registrar: T::AccountId = account("registrar", i, SEED);176 let registrar_lookup = T::Lookup::unlookup(registrar.clone());196 let balance_to_use = balance_unit::<T>() * 10u32.into();177 let balance_to_use = balance_unit::<T>() * 10u32.into();178 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);197 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);179198180 Identity::<T>::request_judgement(caller_origin.clone(), i, 10u32.into())?;199 Identity::<T>::request_judgement(caller_origin.clone(), i, 10u32.into())?;188 }207 }189 caller208 caller190 };209 };210191 }: _(RawOrigin::Signed(caller.clone()), Box::new(create_identity_info::<T>(x)))211 #[extrinsic_call]192 verify {212 _(213 RawOrigin::Signed(caller.clone()),214 Box::new(create_identity_info::<T>(x)),215 );216193 assert_last_event::<T>(Event::<T>::IdentitySet { who: caller }.into());217 assert_last_event::<T>(Event::<T>::IdentitySet { who: caller }.into());218219 Ok(())194 }220 }195221196 // We need to split `set_subs` into two benchmarks to accurately isolate the potential222 // We need to split `set_subs` into two benchmarks to accurately isolate the potential197 // writes caused by new or old sub accounts. The actual weight should simply be223 // writes caused by new or old sub accounts. The actual weight should simply be198 // the sum of these two weights.224 // the sum of these two weights.199 set_subs_new {225 #[benchmark]226 fn set_subs_new(s: Linear<0, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {200 let caller: T::AccountId = whitelisted_caller();227 let caller: T::AccountId = whitelisted_caller();201 // Create a new subs vec with s sub accounts228 // Create a new subs vec with s sub accounts202 let s in 0 .. T::MaxSubAccounts::get() => ();203 let subs = create_sub_accounts::<T>(&caller, s)?;229 let subs = create_sub_accounts::<T>(&caller, s)?;204 ensure!(SubsOf::<T>::get(&caller).1.len() == 0, "Caller already has subs");230 ensure!(231 SubsOf::<T>::get(&caller).1.len() == 0,232 "Caller already has subs"233 );234205 }: set_subs(RawOrigin::Signed(caller.clone()), subs)235 #[extrinsic_call]206 verify {236 set_subs(RawOrigin::Signed(caller.clone()), subs);237207 ensure!(SubsOf::<T>::get(&caller).1.len() as u32 == s, "Subs not added");238 ensure!(239 SubsOf::<T>::get(&caller).1.len() as u32 == s,240 "Subs not added"241 );242243 Ok(())208 }244 }209245210 set_subs_old {246 #[benchmark]247 fn set_subs_old(p: Linear<0, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {211 let caller: T::AccountId = whitelisted_caller();248 let caller: T::AccountId = whitelisted_caller();212 // Give them p many previous sub accounts.249 // Give them p many previous sub accounts.213 let p in 0 .. T::MaxSubAccounts::get() => {250 let _ = add_sub_accounts::<T>(&caller, p)?;214 let _ = add_sub_accounts::<T>(&caller, p)?;215 };216 // Remove all subs.251 // Remove all subs.217 let subs = create_sub_accounts::<T>(&caller, 0)?;252 let subs = create_sub_accounts::<T>(&caller, 0)?;218 ensure!(253 ensure!(219 SubsOf::<T>::get(&caller).1.len() as u32 == p,254 SubsOf::<T>::get(&caller).1.len() as u32 == p,220 "Caller does have subs",255 "Caller does have subs",221 );256 );257222 }: set_subs(RawOrigin::Signed(caller.clone()), subs)258 #[extrinsic_call]223 verify {259 set_subs(RawOrigin::Signed(caller.clone()), subs);260224 ensure!(SubsOf::<T>::get(&caller).1.len() == 0, "Subs not removed");261 ensure!(SubsOf::<T>::get(&caller).1.len() == 0, "Subs not removed");262263 Ok(())225 }264 }226265227 clear_identity {266 #[benchmark]267 fn clear_identity(268 r: Linear<1, MAX_REGISTRARS>,269 s: Linear<0, MAX_SUB_ACCOUNTS>,270 x: Linear<0, MAX_ADDITIONAL_FIELDS>,271 ) -> Result<(), BenchmarkError> {228 let caller: T::AccountId = whitelisted_caller();272 let caller: T::AccountId = whitelisted_caller();229 let caller_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));230 let caller_lookup = <T::Lookup as StaticLookup>::unlookup(caller.clone());273 let caller_lookup = <T::Lookup as StaticLookup>::unlookup(caller.clone());231 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());274 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());232275233 let r in 1 .. T::MaxRegistrars::get() => add_registrars::<T>(r)?;276 add_registrars::<T>(r)?;277234 let s in 0 .. T::MaxSubAccounts::get() => {278 {235 // Give them s many sub accounts279 // Give them s many sub accounts236 let caller: T::AccountId = whitelisted_caller();280 let caller: T::AccountId = whitelisted_caller();237 let _ = add_sub_accounts::<T>(&caller, s)?;281 let _ = add_sub_accounts::<T>(&caller, s)?;238 };282 }239 let x in 0 .. T::MaxAdditionalFields::get();240283241 // Create their main identity with x additional fields284 // Create their main identity with x additional fields242 let info = create_identity_info::<T>(x);285 let info = create_identity_info::<T>(x);243 let caller: T::AccountId = whitelisted_caller();286 let caller: T::AccountId = whitelisted_caller();244 let caller_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));287 let caller_origin =288 <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));245 Identity::<T>::set_identity(caller_origin.clone(), Box::new(info.clone()))?;289 Identity::<T>::set_identity(caller_origin.clone(), Box::new(info.clone()))?;246290247 // User requests judgement from all the registrars, and they approve291 // User requests judgement from all the registrars, and they approve248 for i in 0..r {292 for i in 0..r {249 let registrar: T::AccountId = account("registrar", i, SEED);293 let registrar: T::AccountId = account("registrar", i, SEED);250 let balance_to_use = balance_unit::<T>() * 10u32.into();294 let balance_to_use = balance_unit::<T>() * 10u32.into();251 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);295 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);252296253 Identity::<T>::request_judgement(caller_origin.clone(), i, 10u32.into())?;297 Identity::<T>::request_judgement(caller_origin.clone(), i, 10u32.into())?;259 T::Hashing::hash_of(&info),303 T::Hashing::hash_of(&info),260 )?;304 )?;261 }305 }262 ensure!(IdentityOf::<T>::contains_key(&caller), "Identity does not exist.");306 ensure!(307 IdentityOf::<T>::contains_key(&caller),308 "Identity does not exist."309 );310263 }: _(RawOrigin::Signed(caller.clone()))311 #[extrinsic_call]264 verify {312 _(RawOrigin::Signed(caller.clone()));313265 ensure!(!IdentityOf::<T>::contains_key(&caller), "Identity not cleared.");314 ensure!(315 !IdentityOf::<T>::contains_key(&caller),316 "Identity not cleared."317 );318319 Ok(())266 }320 }267321268 request_judgement {322 #[benchmark]323 fn request_judgement(324 r: Linear<1, MAX_REGISTRARS>,325 x: Linear<0, MAX_ADDITIONAL_FIELDS>,326 ) -> Result<(), BenchmarkError> {269 let caller: T::AccountId = whitelisted_caller();327 let caller: T::AccountId = whitelisted_caller();270 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());328 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());271329272 let r in 1 .. T::MaxRegistrars::get() => add_registrars::<T>(r)?;330 add_registrars::<T>(r)?;331273 let x in 0 .. T::MaxAdditionalFields::get() => {332 {274 // Create their main identity with x additional fields333 // Create their main identity with x additional fields275 let info = create_identity_info::<T>(x);334 let info = create_identity_info::<T>(x);276 let caller: T::AccountId = whitelisted_caller();335 let caller: T::AccountId = whitelisted_caller();277 let caller_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller));336 let caller_origin =337 <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller));278 Identity::<T>::set_identity(caller_origin, Box::new(info))?;338 Identity::<T>::set_identity(caller_origin, Box::new(info))?;279 };339 }340280 }: _(RawOrigin::Signed(caller.clone()), r - 1, 10u32.into())341 #[extrinsic_call]281 verify {342 _(RawOrigin::Signed(caller.clone()), r - 1, 10u32.into());343282 assert_last_event::<T>(Event::<T>::JudgementRequested { who: caller, registrar_index: r-1 }.into());344 assert_last_event::<T>(345 Event::<T>::JudgementRequested {346 who: caller,347 registrar_index: r - 1,348 }349 .into(),350 );351352 Ok(())283 }353 }284354285 cancel_request {355 #[benchmark]356 fn cancel_request(357 r: Linear<1, MAX_REGISTRARS>,358 x: Linear<0, MAX_ADDITIONAL_FIELDS>,359 ) -> Result<(), BenchmarkError> {286 let caller: T::AccountId = whitelisted_caller();360 let caller: T::AccountId = whitelisted_caller();287 let caller_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));361 let caller_origin =362 <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller.clone()));288 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());363 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());289364290 let r in 1 .. T::MaxRegistrars::get() => add_registrars::<T>(r)?;365 add_registrars::<T>(r)?;366291 let x in 0 .. T::MaxAdditionalFields::get() => {367 {292 // Create their main identity with x additional fields368 // Create their main identity with x additional fields293 let info = create_identity_info::<T>(x);369 let info = create_identity_info::<T>(x);294 let caller: T::AccountId = whitelisted_caller();370 let caller: T::AccountId = whitelisted_caller();295 let caller_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller));371 let caller_origin =372 <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(caller));296 Identity::<T>::set_identity(caller_origin, Box::new(info))?;373 Identity::<T>::set_identity(caller_origin, Box::new(info))?;297 };374 }298375299 Identity::<T>::request_judgement(caller_origin, r - 1, 10u32.into())?;376 Identity::<T>::request_judgement(caller_origin, r - 1, 10u32.into())?;377300 }: _(RawOrigin::Signed(caller.clone()), r - 1)378 #[extrinsic_call]301 verify {379 _(RawOrigin::Signed(caller.clone()), r - 1);380302 assert_last_event::<T>(Event::<T>::JudgementUnrequested { who: caller, registrar_index: r-1 }.into());381 assert_last_event::<T>(382 Event::<T>::JudgementUnrequested {383 who: caller,384 registrar_index: r - 1,385 }386 .into(),387 );388389 Ok(())303 }390 }304391305 set_fee {392 #[benchmark]393 fn set_fee(r: Linear<2, MAX_REGISTRARS>) -> Result<(), BenchmarkError> {394 let r = r - 1;306 let caller: T::AccountId = whitelisted_caller();395 let caller: T::AccountId = whitelisted_caller();307 let caller_lookup = T::Lookup::unlookup(caller.clone());396 let caller_lookup = T::Lookup::unlookup(caller.clone());308397309 let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;398 add_registrars::<T>(r)?;310399311 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();400 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();312 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;401 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;313 let registrars = Registrars::<T>::get();402 let registrars = Registrars::<T>::get();314 ensure!(registrars[r as usize].as_ref().unwrap().fee == 0u32.into(), "Fee already set.");403 ensure!(404 registrars[r as usize].as_ref().unwrap().fee == 0u32.into(),405 "Fee already set."406 );407315 }: _(RawOrigin::Signed(caller), r, 100u32.into())408 #[extrinsic_call]316 verify {409 _(RawOrigin::Signed(caller), r, 100u32.into());410317 let registrars = Registrars::<T>::get();411 let registrars = Registrars::<T>::get();318 ensure!(registrars[r as usize].as_ref().unwrap().fee == 100u32.into(), "Fee not changed.");412 ensure!(413 registrars[r as usize].as_ref().unwrap().fee == 100u32.into(),414 "Fee not changed."415 );416417 Ok(())319 }418 }320419321 set_account_id {420 #[benchmark]421 fn set_account_id(r: Linear<2, MAX_REGISTRARS>) -> Result<(), BenchmarkError> {422 let r = r - 1;322 let caller: T::AccountId = whitelisted_caller();423 let caller: T::AccountId = whitelisted_caller();323 let caller_lookup = T::Lookup::unlookup(caller.clone());424 let caller_lookup = T::Lookup::unlookup(caller.clone());324 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());425 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());325426326 let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;427 add_registrars::<T>(r)?;327428328 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();429 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();329 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;430 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;330 let registrars = Registrars::<T>::get();431 let registrars = Registrars::<T>::get();331 ensure!(registrars[r as usize].as_ref().unwrap().account == caller, "id not set.");432 ensure!(433 registrars[r as usize].as_ref().unwrap().account == caller,434 "id not set."435 );332 let new_account = T::Lookup::unlookup(account("new", 0, SEED));436 let new_account = T::Lookup::unlookup(account("new", 0, SEED));437333 }: _(RawOrigin::Signed(caller), r, new_account)438 #[extrinsic_call]334 verify {439 _(RawOrigin::Signed(caller), r, new_account);440335 let registrars = Registrars::<T>::get();441 let registrars = Registrars::<T>::get();336 ensure!(registrars[r as usize].as_ref().unwrap().account == account("new", 0, SEED), "id not changed.");442 ensure!(443 registrars[r as usize].as_ref().unwrap().account == account("new", 0, SEED),444 "id not changed."445 );446447 Ok(())337 }448 }338449339 set_fields {450 #[benchmark]451 fn set_fields(r: Linear<2, MAX_REGISTRARS>) -> Result<(), BenchmarkError> {452 let r = r - 1;340 let caller: T::AccountId = whitelisted_caller();453 let caller: T::AccountId = whitelisted_caller();341 let caller_lookup = T::Lookup::unlookup(caller.clone());454 let caller_lookup = T::Lookup::unlookup(caller.clone());342 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());455 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());343456344 let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;457 add_registrars::<T>(r)?;345458346 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();459 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();347 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;460 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;348 let fields = IdentityFields(461 let fields = IdentityFields(349 IdentityField::Display | IdentityField::Legal | IdentityField::Web | IdentityField::Riot462 IdentityField::Display463 | IdentityField::Legal464 | IdentityField::Web465 | IdentityField::Riot350 | IdentityField::Email | IdentityField::PgpFingerprint | IdentityField::Image | IdentityField::Twitter466 | IdentityField::Email467 | IdentityField::PgpFingerprint468 | IdentityField::Image469 | IdentityField::Twitter,351 );470 );352 let registrars = Registrars::<T>::get();471 let registrars = Registrars::<T>::get();353 ensure!(registrars[r as usize].as_ref().unwrap().fields == Default::default(), "fields already set.");472 ensure!(473 registrars[r as usize].as_ref().unwrap().fields == Default::default(),474 "fields already set."475 );476354 }: _(RawOrigin::Signed(caller), r, fields)477 #[extrinsic_call]355 verify {478 _(RawOrigin::Signed(caller), r, fields);479356 let registrars = Registrars::<T>::get();480 let registrars = Registrars::<T>::get();357 ensure!(registrars[r as usize].as_ref().unwrap().fields != Default::default(), "fields not set.");481 ensure!(482 registrars[r as usize].as_ref().unwrap().fields != Default::default(),483 "fields not set."484 );485486 Ok(())358 }487 }359488360 provide_judgement {489 #[benchmark]490 fn provide_judgement(491 r: Linear<2, MAX_REGISTRARS>,492 x: Linear<0, MAX_ADDITIONAL_FIELDS>,493 ) -> Result<(), BenchmarkError> {494 let r = r - 1;361 // The user495 // The user362 let user: T::AccountId = account("user", r, SEED);496 let user: T::AccountId = account("user", r, SEED);363 let user_origin = <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(user.clone()));497 let user_origin =498 <T as frame_system::Config>::RuntimeOrigin::from(RawOrigin::Signed(user.clone()));364 let user_lookup = <T::Lookup as StaticLookup>::unlookup(user.clone());499 let user_lookup = <T::Lookup as StaticLookup>::unlookup(user.clone());365 let _ = T::Currency::make_free_balance_be(&user, BalanceOf::<T>::max_value());500 let _ = T::Currency::make_free_balance_be(&user, BalanceOf::<T>::max_value());366501367 let caller: T::AccountId = whitelisted_caller();502 let caller: T::AccountId = whitelisted_caller();368 let caller_lookup = T::Lookup::unlookup(caller.clone());503 let caller_lookup = T::Lookup::unlookup(caller.clone());369 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());504 let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());370505371 let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;506 add_registrars::<T>(r)?;372 let x in 0 .. T::MaxAdditionalFields::get();373507374 let info = create_identity_info::<T>(x);508 let info = create_identity_info::<T>(x);375 let info_hash = T::Hashing::hash_of(&info);509 let info_hash = T::Hashing::hash_of(&info);378 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();512 let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();379 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;513 Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;380 Identity::<T>::request_judgement(user_origin, r, 10u32.into())?;514 Identity::<T>::request_judgement(user_origin, r, 10u32.into())?;515381 }: _(RawOrigin::Signed(caller), r, user_lookup, Judgement::Reasonable, info_hash)516 #[extrinsic_call]517 _(518 RawOrigin::Signed(caller),519 r,520 user_lookup,521 Judgement::Reasonable,522 info_hash,382 verify {523 );524383 assert_last_event::<T>(Event::<T>::JudgementGiven { target: user, registrar_index: r }.into())525 assert_last_event::<T>(526 Event::<T>::JudgementGiven {527 target: user,528 registrar_index: r,529 }530 .into(),531 );532533 Ok(())384 }534 }385535386 kill_identity {536 #[benchmark]537 fn kill_identity(387 let r in 1 .. T::MaxRegistrars::get() => add_registrars::<T>(r)?;538 r: Linear<1, MAX_REGISTRARS>,388 let s in 0 .. T::MaxSubAccounts::get();539 s: Linear<0, MAX_SUB_ACCOUNTS>,389 let x in 0 .. T::MaxAdditionalFields::get();540 x: Linear<0, MAX_ADDITIONAL_FIELDS>,541 ) -> Result<(), BenchmarkError> {542 add_registrars::<T>(r)?;390543391 let target: T::AccountId = account("target", 0, SEED);544 let target: T::AccountId = account("target", 0, SEED);392 let target_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(target.clone()).into();545 let target_origin: <T as frame_system::Config>::RuntimeOrigin =546 RawOrigin::Signed(target.clone()).into();393 let target_lookup = T::Lookup::unlookup(target.clone());547 let target_lookup = T::Lookup::unlookup(target.clone());394 let _ = T::Currency::make_free_balance_be(&target, BalanceOf::<T>::max_value());548 let _ = T::Currency::make_free_balance_be(&target, BalanceOf::<T>::max_value());395549400 // User requests judgement from all the registrars, and they approve554 // User requests judgement from all the registrars, and they approve401 for i in 0..r {555 for i in 0..r {402 let registrar: T::AccountId = account("registrar", i, SEED);556 let registrar: T::AccountId = account("registrar", i, SEED);403 let balance_to_use = balance_unit::<T>() * 10u32.into();557 let balance_to_use = balance_unit::<T>() * 10u32.into();404 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);558 let _ = T::Currency::make_free_balance_be(®istrar, balance_to_use);405559406 Identity::<T>::request_judgement(target_origin.clone(), i, 10u32.into())?;560 Identity::<T>::request_judgement(target_origin.clone(), i, 10u32.into())?;414 }568 }415 ensure!(IdentityOf::<T>::contains_key(&target), "Identity not set");569 ensure!(IdentityOf::<T>::contains_key(&target), "Identity not set");416 let origin = T::ForceOrigin::try_successful_origin().unwrap();570 let origin = T::ForceOrigin::try_successful_origin().unwrap();571417 }: _<T::RuntimeOrigin>(origin, target_lookup)572 #[extrinsic_call]418 verify {573 _(origin as T::RuntimeOrigin, target_lookup);574419 ensure!(!IdentityOf::<T>::contains_key(&target), "Identity not removed");575 ensure!(576 !IdentityOf::<T>::contains_key(&target),577 "Identity not removed"578 );579580 Ok(())420 }581 }421582422 force_insert_identities {583 #[benchmark]584 fn force_insert_identities(423 let x in 0 .. T::MaxAdditionalFields::get();585 x: Linear<0, MAX_ADDITIONAL_FIELDS>,424 let n in 0..600;586 n: Linear<0, 600>,587 ) -> Result<(), BenchmarkError> {425 use frame_benchmarking::account;588 use frame_benchmarking::account;426 let identities = (0..n).map(|i| (589 let identities = (0..n)590 .map(|i| {591 (427 account("caller", i, SEED),592 account("caller", i, SEED),428 Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {593 Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {429 judgements: Default::default(),594 judgements: Default::default(),430 deposit: Default::default(),595 deposit: Default::default(),431 info: create_identity_info::<T>(x),596 info: create_identity_info::<T>(x),432 },597 },433 )).collect::<Vec<_>>();598 )599 })600 .collect::<Vec<_>>();434 let origin = T::ForceOrigin::try_successful_origin().unwrap();601 let origin = T::ForceOrigin::try_successful_origin().unwrap();435 }: _<T::RuntimeOrigin>(origin, identities)436602437 force_remove_identities {603 #[extrinsic_call]438 let x in 0 .. T::MaxAdditionalFields::get();604 _(origin as T::RuntimeOrigin, identities);605439 let n in 0..600;606 Ok(())607 }608609 #[benchmark]610 fn force_remove_identities(611 x: Linear<0, MAX_ADDITIONAL_FIELDS>,612 n: Linear<0, 600>,613 ) -> Result<(), BenchmarkError> {440 use frame_benchmarking::account;614 use frame_benchmarking::account;441 let origin = T::ForceOrigin::try_successful_origin().unwrap();615 let origin = T::ForceOrigin::try_successful_origin().unwrap();442 let identities = (0..n).map(|i| (616 let identities = (0..n)617 .map(|i| {618 (443 account("caller", i, SEED),619 account("caller", i, SEED),444 Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {620 Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {445 judgements: Default::default(),621 judgements: Default::default(),446 deposit: Default::default(),622 deposit: Default::default(),447 info: create_identity_info::<T>(x),623 info: create_identity_info::<T>(x),448 },624 },449 )).collect::<Vec<_>>();625 )626 })627 .collect::<Vec<_>>();450 assert_ok!(628 assert_ok!(Identity::<T>::force_insert_identities(451 Identity::<T>::force_insert_identities(origin.clone(), identities.clone()),629 origin.clone(),630 identities.clone()452 );631 ),);453 let identities = identities.into_iter().map(|(acc, _)| acc).collect::<Vec<_>>();632 let identities = identities454 }: _<T::RuntimeOrigin>(origin, identities)633 .into_iter()634 .map(|(acc, _)| acc)635 .collect::<Vec<_>>();455636456 force_set_subs {637 #[extrinsic_call]457 let s in 0 .. T::MaxSubAccounts::get();638 _(origin as T::RuntimeOrigin, identities);639458 let n in 0..600;640 Ok(())641 }642643 #[benchmark]644 fn force_set_subs(645 s: Linear<0, MAX_SUB_ACCOUNTS>,646 n: Linear<0, 600>,647 ) -> Result<(), BenchmarkError> {459 use frame_benchmarking::account;648 use frame_benchmarking::account;460 let identities = (0..n).map(|i| {649 let identities = (0..n)650 .map(|i| {461 let caller: T::AccountId = account("caller", i, SEED);651 let caller: T::AccountId = account("caller", i, SEED);462 (463 caller.clone(),464 (652 (465 BalanceOf::<T>::max_value(),653 caller.clone(),654 (655 BalanceOf::<T>::max_value(),466 create_sub_accounts::<T>(&caller, s).unwrap().try_into().unwrap(),656 create_sub_accounts::<T>(&caller, s)657 .unwrap()658 .try_into()659 .unwrap(),467 ),660 ),468 )661 )469 }).collect::<Vec<_>>();662 })663 .collect::<Vec<_>>();470 let origin = T::ForceOrigin::try_successful_origin().unwrap();664 let origin = T::ForceOrigin::try_successful_origin().unwrap();471 }: _<T::RuntimeOrigin>(origin, identities)472665473 add_sub {666 #[extrinsic_call]474 let s in 0 .. T::MaxSubAccounts::get() - 1;667 _(origin as T::RuntimeOrigin, identities);475668669 Ok(())670 }671672 #[benchmark]673 fn add_sub(s: Linear<1, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {674 let s = s - 1;476 let caller: T::AccountId = whitelisted_caller();675 let caller: T::AccountId = whitelisted_caller();477 let _ = add_sub_accounts::<T>(&caller, s)?;676 let _ = add_sub_accounts::<T>(&caller, s)?;478 let sub = account("new_sub", 0, SEED);677 let sub = account("new_sub", 0, SEED);479 let data = Data::Raw(vec![0; 32].try_into().unwrap());678 let data = Data::Raw(vec![0; 32].try_into().unwrap());480 ensure!(SubsOf::<T>::get(&caller).1.len() as u32 == s, "Subs not set.");679 ensure!(680 SubsOf::<T>::get(&caller).1.len() as u32 == s,681 "Subs not set."682 );683481 }: _(RawOrigin::Signed(caller.clone()), T::Lookup::unlookup(sub), data)684 #[extrinsic_call]685 _(686 RawOrigin::Signed(caller.clone()),687 T::Lookup::unlookup(sub),688 data,482 verify {689 );690483 ensure!(SubsOf::<T>::get(&caller).1.len() as u32 == s + 1, "Subs not added.");691 ensure!(692 SubsOf::<T>::get(&caller).1.len() as u32 == s + 1,693 "Subs not added."694 );695696 Ok(())484 }697 }485698486 rename_sub {699 #[benchmark]487 let s in 1 .. T::MaxSubAccounts::get();700 fn rename_sub(s: Linear<1, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {488489 let caller: T::AccountId = whitelisted_caller();701 let caller: T::AccountId = whitelisted_caller();490 let (sub, _) = add_sub_accounts::<T>(&caller, s)?.remove(0);702 let (sub, _) = add_sub_accounts::<T>(&caller, s)?.remove(0);491 let data = Data::Raw(vec![1; 32].try_into().unwrap());703 let data = Data::Raw(vec![1; 32].try_into().unwrap());492 ensure!(SuperOf::<T>::get(&sub).unwrap().1 != data, "data already set");704 ensure!(705 SuperOf::<T>::get(&sub).unwrap().1 != data,706 "data already set"707 );708493 }: _(RawOrigin::Signed(caller), T::Lookup::unlookup(sub.clone()), data.clone())709 #[extrinsic_call]494 verify {710 _(711 RawOrigin::Signed(caller),712 T::Lookup::unlookup(sub.clone()),713 data.clone(),714 );715495 ensure!(SuperOf::<T>::get(&sub).unwrap().1 == data, "data not set");716 ensure!(SuperOf::<T>::get(&sub).unwrap().1 == data, "data not set");717718 Ok(())496 }719 }497720498 remove_sub {721 #[benchmark]499 let s in 1 .. T::MaxSubAccounts::get();722 fn remove_sub(s: Linear<1, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {500501 let caller: T::AccountId = whitelisted_caller();723 let caller: T::AccountId = whitelisted_caller();502 let (sub, _) = add_sub_accounts::<T>(&caller, s)?.remove(0);724 let (sub, _) = add_sub_accounts::<T>(&caller, s)?.remove(0);503 ensure!(SuperOf::<T>::contains_key(&sub), "Sub doesn't exists");725 ensure!(SuperOf::<T>::contains_key(&sub), "Sub doesn't exists");726504 }: _(RawOrigin::Signed(caller), T::Lookup::unlookup(sub.clone()))727 #[extrinsic_call]505 verify {728 _(RawOrigin::Signed(caller), T::Lookup::unlookup(sub.clone()));729506 ensure!(!SuperOf::<T>::contains_key(&sub), "Sub not removed");730 ensure!(!SuperOf::<T>::contains_key(&sub), "Sub not removed");731732 Ok(())507 }733 }508734509 quit_sub {735 #[benchmark]736 fn quit_sub(s: Linear<1, MAX_SUB_ACCOUNTS>) -> Result<(), BenchmarkError> {510 let s in 0 .. T::MaxSubAccounts::get() - 1;737 let s = s - 1;511512 let caller: T::AccountId = whitelisted_caller();738 let caller: T::AccountId = whitelisted_caller();513 let sup = account("super", 0, SEED);739 let sup = account("super", 0, SEED);514 let _ = add_sub_accounts::<T>(&sup, s)?;740 let _ = add_sub_accounts::<T>(&sup, s)?;515 let sup_origin = RawOrigin::Signed(sup).into();741 let sup_origin = RawOrigin::Signed(sup).into();516 Identity::<T>::add_sub(sup_origin, T::Lookup::unlookup(caller.clone()), Data::Raw(vec![0; 32].try_into().unwrap()))?;742 Identity::<T>::add_sub(743 sup_origin,744 T::Lookup::unlookup(caller.clone()),745 Data::Raw(vec![0; 32].try_into().unwrap()),746 )?;517 ensure!(SuperOf::<T>::contains_key(&caller), "Sub doesn't exists");747 ensure!(SuperOf::<T>::contains_key(&caller), "Sub doesn't exists");748518 }: _(RawOrigin::Signed(caller.clone()))749 #[extrinsic_call]519 verify {750 _(RawOrigin::Signed(caller.clone()));751520 ensure!(!SuperOf::<T>::contains_key(&caller), "Sub not removed");752 ensure!(!SuperOf::<T>::contains_key(&caller), "Sub not removed");753754 Ok(())521 }755 }522756523 impl_benchmark_test_suite!(Identity, crate::tests::new_test_ext(), crate::tests::Test);757 impl_benchmark_test_suite!(Identity, crate::tests::new_test_ext(), crate::tests::Test);pallets/inflation/src/benchmarking.rsdiffbeforeafterboth161617#![cfg(feature = "runtime-benchmarks")]17#![cfg(feature = "runtime-benchmarks")]181819use frame_benchmarking::benchmarks;19use frame_benchmarking::v2::*;20use frame_support::{pallet_prelude::*, traits::Hooks};20use frame_support::traits::Hooks;21use sp_std::vec;212222use super::*;23use super::*;23use crate::Pallet as Inflation;24use crate::Pallet as Inflation;242526#[benchmarks]25benchmarks! {27mod benchmarks {2628 use super::*;2930 #[benchmark]27 on_initialize {31 fn on_initialize() -> Result<(), BenchmarkError> {28 let block1: BlockNumberFor<T> = 1u32.into();32 let block1: BlockNumberFor<T> = 1u32.into();29 let block2: BlockNumberFor<T> = 2u32.into();33 let block2: BlockNumberFor<T> = 2u32.into();30 <Inflation<T> as Hooks>::on_initialize(block1); // Create Treasury account34 <Inflation<T> as Hooks>::on_initialize(block1); // Create Treasury account3536 #[block]37 {31 }: { <Inflation<T> as Hooks>::on_initialize(block2); } // Benchmark deposit_into_existing path38 <Inflation<T> as Hooks>::on_initialize(block2);3239 // Benchmark deposit_into_existing path40 }4142 Ok(())43 }33}44}3445pallets/maintenance/src/benchmarking.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use frame_benchmarking::benchmarks;17use frame_benchmarking::v2::*;18use frame_support::{ensure, pallet_prelude::Weight, traits::StorePreimage};18use frame_support::{ensure, pallet_prelude::Weight, traits::StorePreimage};19use frame_system::RawOrigin;19use frame_system::RawOrigin;20use parity_scale_codec::Encode;20use parity_scale_codec::Encode;21use sp_std::vec;212222use super::*;23use super::*;23use crate::{Config, Pallet as Maintenance};24use crate::{Config, Pallet as Maintenance};242526#[benchmarks]25benchmarks! {27mod benchmarks {28 use super::*;2930 #[benchmark]26 enable {31 fn enable() -> Result<(), BenchmarkError> {32 #[extrinsic_call]27 }: _(RawOrigin::Root)33 _(RawOrigin::Root);28 verify {3429 ensure!(<Enabled<T>>::get(), "didn't enable the MM");35 ensure!(<Enabled<T>>::get(), "didn't enable the MM");30 }363137 Ok(())38 }3940 #[benchmark]32 disable {41 fn disable() -> Result<(), BenchmarkError> {33 Maintenance::<T>::enable(RawOrigin::Root.into())?;42 Maintenance::<T>::enable(RawOrigin::Root.into())?;4344 #[extrinsic_call]34 }: _(RawOrigin::Root)45 _(RawOrigin::Root);35 verify {4636 ensure!(!<Enabled<T>>::get(), "didn't disable the MM");47 ensure!(!<Enabled<T>>::get(), "didn't disable the MM");37 }483849 Ok(())50 }5152 // TODO: fix53 // #[pov_mode = MaxEncodedLen {54 // // PoV size is deducted from weight_bound55 // Preimage::PreimageFor: Measured56 // }]39 #[pov_mode = MaxEncodedLen {57 #[benchmark]40 // PoV size is deducted from weight_bound41 Preimage::PreimageFor: Measured42 }]43 execute_preimage {58 fn execute_preimage() -> Result<(), BenchmarkError> {44 let call = <T as Config>::RuntimeCall::from(frame_system::Call::<T>::remark { remark: 1u32.encode() });59 let call = <T as Config>::RuntimeCall::from(frame_system::Call::<T>::remark {60 remark: 1u32.encode(),61 });45 let hash = T::Preimages::note(call.encode().into())?;62 let hash = T::Preimages::note(call.encode().into())?;6364 #[extrinsic_call]65 _(66 RawOrigin::Root,67 hash,68 Weight::from_parts(100000000000, 100000000000),69 );7071 Ok(())46 }: _(RawOrigin::Root, hash, Weight::from_parts(100000000000, 100000000000))72 }47 verify {48 }49}73}5074pallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use frame_benchmarking::{account, benchmarks};17use frame_benchmarking::v2::{account, benchmarks, BenchmarkError};18use pallet_common::{18use pallet_common::{19 bench_init,19 bench_init,20 benchmarking::{20 benchmarking::{64 )64 )65}65}666667benchmarks! {67#[benchmarks]68mod benchmarks {68 create_item {69 use super::*;7071 #[benchmark]72 fn create_item() -> Result<(), BenchmarkError> {69 bench_init!{73 bench_init! {70 owner: sub; collection: collection(owner);74 owner: sub; collection: collection(owner);71 sender: cross_from_sub(owner); to: cross_sub;75 sender: cross_from_sub(owner); to: cross_sub;72 };76 };73 }: {create_max_item(&collection, &sender, to.clone())?}747775 create_multiple_items {78 #[block]79 {76 let b in 0..MAX_ITEMS_PER_BATCH;80 create_max_item(&collection, &sender, to.clone())?;81 }8283 Ok(())84 }8586 #[benchmark]87 fn create_multiple_items(b: Linear<0, MAX_ITEMS_PER_BATCH>) -> Result<(), BenchmarkError> {77 bench_init!{88 bench_init! {78 owner: sub; collection: collection(owner);89 owner: sub; collection: collection(owner);79 sender: cross_from_sub(owner); to: cross_sub;90 sender: cross_from_sub(owner); to: cross_sub;80 };91 };81 let data = (0..b).map(|_| create_max_item_data::<T>(to.clone())).collect();92 let data = (0..b)82 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}93 .map(|_| create_max_item_data::<T>(to.clone()))94 .collect();839584 create_multiple_items_ex {96 #[block]97 {85 let b in 0..MAX_ITEMS_PER_BATCH;98 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;99 }100101 Ok(())102 }103104 #[benchmark]105 fn create_multiple_items_ex(b: Linear<0, MAX_ITEMS_PER_BATCH>) -> Result<(), BenchmarkError> {86 bench_init!{106 bench_init! {87 owner: sub; collection: collection(owner);107 owner: sub; collection: collection(owner);88 sender: cross_from_sub(owner);108 sender: cross_from_sub(owner);89 };109 };90 let data = (0..b).map(|i| {110 let data = (0..b)111 .map(|i| {91 bench_init!(to: cross_sub(i););112 bench_init!(to: cross_sub(i););92 create_max_item_data::<T>(to)113 create_max_item_data::<T>(to)93 }).collect();114 })94 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}115 .collect();9511696 burn_item {117 #[block]118 {119 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;120 }121122 Ok(())123 }124125 #[benchmark]126 fn burn_item() -> Result<(), BenchmarkError> {97 bench_init!{127 bench_init! {98 owner: sub; collection: collection(owner);128 owner: sub; collection: collection(owner);99 sender: cross_from_sub(owner); burner: cross_sub;129 sender: cross_from_sub(owner); burner: cross_sub;100 };130 };101 let item = create_max_item(&collection, &sender, burner.clone())?;131 let item = create_max_item(&collection, &sender, burner.clone())?;102 }: {<Pallet<T>>::burn(&collection, &burner, item)?}103132104 burn_recursively_self_raw {133 #[block]134 {135 <Pallet<T>>::burn(&collection, &burner, item)?;136 }137138 Ok(())139 }140141 #[benchmark]142 fn burn_recursively_self_raw() -> Result<(), BenchmarkError> {105 bench_init!{143 bench_init! {106 owner: sub; collection: collection(owner);144 owner: sub; collection: collection(owner);107 sender: cross_from_sub(owner); burner: cross_sub;145 sender: cross_from_sub(owner); burner: cross_sub;108 };146 };109 let item = create_max_item(&collection, &sender, burner.clone())?;147 let item = create_max_item(&collection, &sender, burner.clone())?;110 }: {<Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?}111148112 burn_recursively_breadth_plus_self_plus_self_per_each_raw {149 #[block]150 {113 let b in 0..200;151 <Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?;152 }153154 Ok(())155 }156157 #[benchmark]158 fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(159 b: Linear<0, 200>,114 bench_init!{160 ) -> Result<(), BenchmarkError> {161 bench_init! {115 owner: sub; collection: collection(owner);162 owner: sub; collection: collection(owner);116 sender: cross_from_sub(owner); burner: cross_sub;163 sender: cross_from_sub(owner); burner: cross_sub;117 };164 };118 let item = create_max_item(&collection, &sender, burner.clone())?;165 let item = create_max_item(&collection, &sender, burner.clone())?;119 for i in 0..b {166 for _ in 0..b {120 create_max_item(&collection, &sender, T::CrossTokenAddressMapping::token_to_address(collection.id, item))?;167 create_max_item(168 &collection,169 &sender,170 T::CrossTokenAddressMapping::token_to_address(collection.id, item),171 )?;121 }172 }122 }: {<Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?}123173124 transfer_raw {174 #[block]175 {176 <Pallet<T>>::burn_recursively(&collection, &burner, item, &Unlimited, &Unlimited)?;177 }178179 Ok(())180 }181182 #[benchmark]183 fn transfer_raw() -> Result<(), BenchmarkError> {125 bench_init!{184 bench_init! {126 owner: sub; collection: collection(owner);185 owner: sub; collection: collection(owner);127 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;186 owner: cross_from_sub; sender: cross_sub; receiver: cross_sub;128 };187 };129 let item = create_max_item(&collection, &owner, sender.clone())?;188 let item = create_max_item(&collection, &owner, sender.clone())?;130 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, &Unlimited)?}131189132 approve {190 #[block]191 {192 <Pallet<T>>::transfer(&collection, &sender, &receiver, item, &Unlimited)?;193 }194195 Ok(())196 }197198 #[benchmark]199 fn approve() -> Result<(), BenchmarkError> {133 bench_init!{200 bench_init! {134 owner: sub; collection: collection(owner);201 owner: sub; collection: collection(owner);135 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;202 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;136 };203 };137 let item = create_max_item(&collection, &owner, sender.clone())?;204 let item = create_max_item(&collection, &owner, sender.clone())?;138 }: {<Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?}139205140 approve_from {206 #[block]207 {208 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;209 }210211 Ok(())212 }213214 #[benchmark]215 fn approve_from() -> Result<(), BenchmarkError> {141 bench_init!{216 bench_init! {142 owner: sub; collection: collection(owner);217 owner: sub; collection: collection(owner);143 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;218 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;144 };219 };145 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());220 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());146 let item = create_max_item(&collection, &owner, owner_eth.clone())?;221 let item = create_max_item(&collection, &owner, owner_eth.clone())?;147 }: {<Pallet<T>>::set_allowance_from(&collection, &sender, &owner_eth, item, Some(&spender))?}148222149 check_allowed_raw {223 #[block]224 {225 <Pallet<T>>::set_allowance_from(226 &collection,227 &sender,228 &owner_eth,229 item,230 Some(&spender),231 )?;232 }233234 Ok(())235 }236237 #[benchmark]238 fn check_allowed_raw() -> Result<(), BenchmarkError> {150 bench_init!{239 bench_init! {151 owner: sub; collection: collection(owner);240 owner: sub; collection: collection(owner);152 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;241 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;153 };242 };154 let item = create_max_item(&collection, &owner, sender.clone())?;243 let item = create_max_item(&collection, &owner, sender.clone())?;155 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;244 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&spender))?;156 }: {<Pallet<T>>::check_allowed(&collection, &spender, &sender, item, &Unlimited)?}157245158 burn_from {246 #[block]247 {248 <Pallet<T>>::check_allowed(&collection, &spender, &sender, item, &Unlimited)?;249 }250251 Ok(())252 }253254 #[benchmark]255 fn burn_from() -> Result<(), BenchmarkError> {159 bench_init!{256 bench_init! {160 owner: sub; collection: collection(owner);257 owner: sub; collection: collection(owner);161 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;258 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;162 };259 };163 let item = create_max_item(&collection, &owner, sender.clone())?;260 let item = create_max_item(&collection, &owner, sender.clone())?;164 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;261 <Pallet<T>>::set_allowance(&collection, &sender, item, Some(&burner))?;165 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?}166262167 set_token_property_permissions {263 #[block]264 {168 let b in 0..MAX_PROPERTIES_PER_ITEM;265 <Pallet<T>>::burn_from(&collection, &burner, &sender, item, &Unlimited)?;266 }267268 Ok(())269 }270271 #[benchmark]272 fn set_token_property_permissions(273 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,169 bench_init!{274 ) -> Result<(), BenchmarkError> {275 bench_init! {170 owner: sub; collection: collection(owner);276 owner: sub; collection: collection(owner);171 owner: cross_from_sub;277 owner: cross_from_sub;172 };278 };173 let perms = (0..b).map(|k| PropertyKeyPermission {279 let perms = (0..b)280 .map(|k| PropertyKeyPermission {174 key: property_key(k as usize),281 key: property_key(k as usize),175 permission: PropertyPermission {282 permission: PropertyPermission {176 mutable: false,283 mutable: false,177 collection_admin: false,284 collection_admin: false,178 token_owner: false,285 token_owner: false,179 },286 },180 }).collect::<Vec<_>>();287 })181 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}288 .collect::<Vec<_>>();182289183 set_token_properties {290 #[block]291 {184 let b in 0..MAX_PROPERTIES_PER_ITEM;292 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;293 }294295 Ok(())296 }297298 #[benchmark]299 fn set_token_properties(b: Linear<0, MAX_PROPERTIES_PER_ITEM>) -> Result<(), BenchmarkError> {185 bench_init!{300 bench_init! {186 owner: sub; collection: collection(owner);301 owner: sub; collection: collection(owner);187 owner: cross_from_sub;302 owner: cross_from_sub;188 };303 };189 let perms = (0..b).map(|k| PropertyKeyPermission {304 let perms = (0..b)305 .map(|k| PropertyKeyPermission {190 key: property_key(k as usize),306 key: property_key(k as usize),191 permission: PropertyPermission {307 permission: PropertyPermission {192 mutable: false,308 mutable: false,193 collection_admin: true,309 collection_admin: true,194 token_owner: true,310 token_owner: true,195 },311 },196 }).collect::<Vec<_>>();312 })313 .collect::<Vec<_>>();197 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;314 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;198 let props = (0..b).map(|k| Property {315 let props = (0..b)316 .map(|k| Property {199 key: property_key(k as usize),317 key: property_key(k as usize),200 value: property_value(),318 value: property_value(),201 }).collect::<Vec<_>>();319 })320 .collect::<Vec<_>>();202 let item = create_max_item(&collection, &owner, owner.clone())?;321 let item = create_max_item(&collection, &owner, owner.clone())?;203 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), &Unlimited)?}204322205 init_token_properties {323 #[block]324 {206 let b in 0..MAX_PROPERTIES_PER_ITEM;325 <Pallet<T>>::set_token_properties(326 &collection,327 &owner,328 item,329 props.into_iter(),330 &Unlimited,331 )?;332 }333334 Ok(())335 }336337 #[benchmark]338 fn init_token_properties(b: Linear<0, MAX_PROPERTIES_PER_ITEM>) -> Result<(), BenchmarkError> {207 bench_init!{339 bench_init! {208 owner: sub; collection: collection(owner);340 owner: sub; collection: collection(owner);209 owner: cross_from_sub;341 owner: cross_from_sub;210 };342 };211343212 let perms = (0..b).map(|k| PropertyKeyPermission {344 let perms = (0..b)345 .map(|k| PropertyKeyPermission {213 key: property_key(k as usize),346 key: property_key(k as usize),214 permission: PropertyPermission {347 permission: PropertyPermission {215 mutable: false,348 mutable: false,216 collection_admin: true,349 collection_admin: true,217 token_owner: true,350 token_owner: true,218 },351 },219 }).collect::<Vec<_>>();352 })353 .collect::<Vec<_>>();220 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;354 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;221 let props = (0..b).map(|k| Property {355 let props = (0..b)356 .map(|k| Property {222 key: property_key(k as usize),357 key: property_key(k as usize),223 value: property_value(),358 value: property_value(),224 }).collect::<Vec<_>>();359 })360 .collect::<Vec<_>>();225 let item = create_max_item(&collection, &owner, owner.clone())?;361 let item = create_max_item(&collection, &owner, owner.clone())?;226362227 let (is_collection_admin, property_permissions) = load_is_admin_and_property_permissions(&collection, &owner);363 let (is_collection_admin, property_permissions) =364 load_is_admin_and_property_permissions(&collection, &owner);228 }: {365 todo!();366 #[block]367 {}229 let mut property_writer = pallet_common::collection_info_loaded_property_writer(368 // let mut property_writer = pallet_common::collection_info_loaded_property_writer(230 &collection,369 // &collection,231 is_collection_admin,370 // is_collection_admin,232 property_permissions,371 // property_permissions,233 );372 // );234373235 property_writer.write_token_properties(374 // #[block]375 // {376 // property_writer.write_token_properties(236 true,377 // true,237 item,378 // item,238 props.into_iter(),379 // props.into_iter(),239 crate::erc::ERC721TokenEvent::TokenChanged {380 // crate::erc::ERC721TokenEvent::TokenChanged {240 token_id: item.into(),381 // token_id: item.into(),241 }382 // }242 .to_log(T::ContractAddress::get()),383 // .to_log(T::ContractAddress::get()),243 )?384 // )?;385 // }386387 Ok(())244 }388 }245389246 delete_token_properties {390 #[benchmark]391 fn delete_token_properties(247 let b in 0..MAX_PROPERTIES_PER_ITEM;392 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,248 bench_init!{393 ) -> Result<(), BenchmarkError> {394 bench_init! {249 owner: sub; collection: collection(owner);395 owner: sub; collection: collection(owner);250 owner: cross_from_sub;396 owner: cross_from_sub;251 };397 };252 let perms = (0..b).map(|k| PropertyKeyPermission {398 let perms = (0..b)399 .map(|k| PropertyKeyPermission {253 key: property_key(k as usize),400 key: property_key(k as usize),254 permission: PropertyPermission {401 permission: PropertyPermission {255 mutable: true,402 mutable: true,256 collection_admin: true,403 collection_admin: true,257 token_owner: true,404 token_owner: true,258 },405 },259 }).collect::<Vec<_>>();406 })407 .collect::<Vec<_>>();260 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;408 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;261 let props = (0..b).map(|k| Property {409 let props = (0..b)410 .map(|k| Property {262 key: property_key(k as usize),411 key: property_key(k as usize),263 value: property_value(),412 value: property_value(),264 }).collect::<Vec<_>>();413 })414 .collect::<Vec<_>>();265 let item = create_max_item(&collection, &owner, owner.clone())?;415 let item = create_max_item(&collection, &owner, owner.clone())?;266 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), &Unlimited)?;416 <Pallet<T>>::set_token_properties(417 &collection,418 &owner,419 item,420 props.into_iter(),421 &Unlimited,422 )?;267 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();423 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();268 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}269424270 token_owner {425 #[block]426 {427 <Pallet<T>>::delete_token_properties(428 &collection,429 &owner,430 item,431 to_delete.into_iter(),432 &Unlimited,433 )?;434 }435436 Ok(())437 }438439 #[benchmark]440 fn token_owner() -> Result<(), BenchmarkError> {271 bench_init!{441 bench_init! {272 owner: sub; collection: collection(owner);442 owner: sub; collection: collection(owner);273 owner: cross_from_sub;443 owner: cross_from_sub;274 };444 };275 let item = create_max_item(&collection, &owner, owner.clone())?;445 let item = create_max_item(&collection, &owner, owner.clone())?;276 }: {collection.token_owner(item).unwrap()}277446278 set_allowance_for_all {447 #[block]448 {449 collection.token_owner(item).unwrap();450 }451452 Ok(())453 }454455 #[benchmark]456 fn set_allowance_for_all() -> Result<(), BenchmarkError> {279 bench_init!{457 bench_init! {280 owner: sub; collection: collection(owner); owner: cross_from_sub;458 owner: sub; collection: collection(owner); owner: cross_from_sub;281 operator: cross_sub;459 operator: cross_sub;282 };460 };283 }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?}284461285 allowance_for_all {462 #[block]463 {464 <Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?;465 }466467 Ok(())468 }469470 #[benchmark]471 fn allowance_for_all() -> Result<(), BenchmarkError> {286 bench_init!{472 bench_init! {287 owner: sub; collection: collection(owner); owner: cross_from_sub;473 owner: sub; collection: collection(owner); owner: cross_from_sub;288 operator: cross_sub;474 operator: cross_sub;289 };475 };290 }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}291476292 repair_item {477 #[block]478 {479 <Pallet<T>>::allowance_for_all(&collection, &owner, &operator);480 }481482 Ok(())483 }484485 #[benchmark]486 fn repair_item() -> Result<(), BenchmarkError> {293 bench_init!{487 bench_init! {294 owner: sub; collection: collection(owner);488 owner: sub; collection: collection(owner);295 owner: cross_from_sub;489 owner: cross_from_sub;296 };490 };297 let item = create_max_item(&collection, &owner, owner.clone())?;491 let item = create_max_item(&collection, &owner, owner.clone())?;492298 }: {<Pallet<T>>::repair_item(&collection, item)?}493 #[block]494 {495 <Pallet<T>>::repair_item(&collection, item)?;496 }497498 Ok(())499 }299}500}300501pallets/refungible/src/benchmarking.rsdiffbeforeafterboth161617use core::{convert::TryInto, iter::IntoIterator};17use core::{convert::TryInto, iter::IntoIterator};181819use frame_benchmarking::{account, benchmarks};19use frame_benchmarking::v2::*;20use pallet_common::{20use pallet_common::{21 bench_init,21 bench_init,22 benchmarking::{22 benchmarking::{23 create_collection_raw, load_is_admin_and_property_permissions, property_key, property_value,23 create_collection_raw, /*load_is_admin_and_property_permissions,*/ property_key,24 property_value,24 },25 },25};26};26use sp_std::prelude::*;27use sp_std::prelude::*;68 )69 )69}70}707171benchmarks! {72#[benchmarks]73mod benchmarks {72 create_item {74 use super::*;7576 #[benchmark]77 fn create_item() -> Result<(), BenchmarkError> {73 bench_init!{78 bench_init! {74 owner: sub; collection: collection(owner);79 owner: sub; collection: collection(owner);75 sender: cross_from_sub(owner); to: cross_sub;80 sender: cross_from_sub(owner); to: cross_sub;76 };81 };77 }: {create_max_item(&collection, &sender, [(to.clone(), 200)])?}788279 create_multiple_items {83 #[block]84 {80 let b in 0..MAX_ITEMS_PER_BATCH;85 create_max_item(&collection, &sender, [(to.clone(), 200)])?;86 }8788 Ok(())89 }9091 #[benchmark]92 fn create_multiple_items(b: Linear<0, MAX_ITEMS_PER_BATCH>) -> Result<(), BenchmarkError> {81 bench_init!{93 bench_init! {82 owner: sub; collection: collection(owner);94 owner: sub; collection: collection(owner);83 sender: cross_from_sub(owner); to: cross_sub;95 sender: cross_from_sub(owner); to: cross_sub;84 };96 };85 let data = (0..b).map(|_| create_max_item_data::<T>([(to.clone(), 200)])).collect();97 let data = (0..b)86 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}98 .map(|_| create_max_item_data::<T>([(to.clone(), 200)]))99 .collect();8710088 create_multiple_items_ex_multiple_items {101 #[block]102 {89 let b in 0..MAX_ITEMS_PER_BATCH;103 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;104 }105106 Ok(())107 }108 #[benchmark]109 fn create_multiple_items_ex_multiple_items(110 b: Linear<0, MAX_ITEMS_PER_BATCH>,90 bench_init!{111 ) -> Result<(), BenchmarkError> {112 bench_init! {91 owner: sub; collection: collection(owner);113 owner: sub; collection: collection(owner);92 sender: cross_from_sub(owner);114 sender: cross_from_sub(owner);93 };115 };94 let data = (0..b).map(|t| {116 let data = (0..b)117 .map(|t| {95 bench_init!(to: cross_sub(t););118 bench_init!(to: cross_sub(t););96 create_max_item_data::<T>([(to, 200)])119 create_max_item_data::<T>([(to, 200)])97 }).collect();120 })98 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}121 .collect();99122100 create_multiple_items_ex_multiple_owners {123 #[block]124 {101 let b in 0..MAX_ITEMS_PER_BATCH;125 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;126 }127128 Ok(())129 }130131 #[benchmark]132 fn create_multiple_items_ex_multiple_owners(133 b: Linear<0, MAX_ITEMS_PER_BATCH>,102 bench_init!{134 ) -> Result<(), BenchmarkError> {135 bench_init! {103 owner: sub; collection: collection(owner);136 owner: sub; collection: collection(owner);104 sender: cross_from_sub(owner);137 sender: cross_from_sub(owner);105 };138 };106 let data = vec![create_max_item_data::<T>((0..b).map(|u| {139 let data = vec![create_max_item_data::<T>((0..b).map(|u| {107 bench_init!(to: cross_sub(u););140 bench_init!(to: cross_sub(u););108 (to, 200)141 (to, 200)109 }))];142 }))];110 }: {<Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?}111143144 #[block]145 {146 <Pallet<T>>::create_multiple_items(&collection, &sender, data, &Unlimited)?;147 }148149 Ok(())150 }151112 // Other user left, token data is kept152 // Other user left, token data is kept113 burn_item_partial {153 #[benchmark]154 fn burn_item_partial() -> Result<(), BenchmarkError> {114 bench_init!{155 bench_init! {115 owner: sub; collection: collection(owner);156 owner: sub; collection: collection(owner);116 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;157 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;117 };158 };118 let item = create_max_item(&collection, &sender, [(burner.clone(), 200), (another_owner, 200)])?;159 let item = create_max_item(160 &collection,161 &sender,162 [(burner.clone(), 200), (another_owner, 200)],163 )?;164119 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}165 #[block]166 {167 <Pallet<T>>::burn(&collection, &burner, item, 200)?;168 }169170 Ok(())171 }172120 // No users remaining, token is destroyed173 // No users remaining, token is destroyed121 burn_item_fully {174 #[benchmark]175 fn burn_item_fully() -> Result<(), BenchmarkError> {122 bench_init!{176 bench_init! {123 owner: sub; collection: collection(owner);177 owner: sub; collection: collection(owner);124 sender: cross_from_sub(owner); burner: cross_sub; another_owner: cross_sub;178 sender: cross_from_sub(owner); burner: cross_sub;125 };179 };126 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;180 let item = create_max_item(&collection, &sender, [(burner.clone(), 200)])?;127 }: {<Pallet<T>>::burn(&collection, &burner, item, 200)?}128181129 transfer_normal {182 #[block]183 {184 <Pallet<T>>::burn(&collection, &burner, item, 200)?;185 }186187 Ok(())188 }189190 #[benchmark]191 fn transfer_normal() -> Result<(), BenchmarkError> {130 bench_init!{192 bench_init! {131 owner: sub; collection: collection(owner);193 owner: sub; collection: collection(owner);132 sender: cross_from_sub(owner); receiver: cross_sub;194 sender: cross_from_sub(owner); receiver: cross_sub;133 };195 };134 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;196 let item = create_max_item(197 &collection,198 &sender,199 [(sender.clone(), 200), (receiver.clone(), 200)],200 )?;201135 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}202 #[block]203 {204 <Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?;205 }206207 Ok(())208 }209136 // Target account is created210 // Target account is created137 transfer_creating {211 #[benchmark]212 fn transfer_creating() -> Result<(), BenchmarkError> {138 bench_init!{213 bench_init! {139 owner: sub; collection: collection(owner);214 owner: sub; collection: collection(owner);140 sender: cross_from_sub(owner); receiver: cross_sub;215 sender: cross_from_sub(owner); receiver: cross_sub;141 };216 };142 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;217 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;218143 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?}219 #[block]220 {221 <Pallet<T>>::transfer(&collection, &sender, &receiver, item, 100, &Unlimited)?;222 }223224 Ok(())225 }226144 // Source account is destroyed227 // Source account is destroyed145 transfer_removing {228 #[benchmark]229 fn transfer_removing() -> Result<(), BenchmarkError> {146 bench_init!{230 bench_init! {147 owner: sub; collection: collection(owner);231 owner: sub; collection: collection(owner);148 sender: cross_from_sub(owner); receiver: cross_sub;232 sender: cross_from_sub(owner); receiver: cross_sub;149 };233 };150 let item = create_max_item(&collection, &sender, [(sender.clone(), 200), (receiver.clone(), 200)])?;234 let item = create_max_item(235 &collection,236 &sender,237 [(sender.clone(), 200), (receiver.clone(), 200)],238 )?;239151 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}240 #[block]241 {242 <Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?;243 }244245 Ok(())246 }247152 // Source account destroyed, target created248 // Source account destroyed, target created153 transfer_creating_removing {249 #[benchmark]250 fn transfer_creating_removing() -> Result<(), BenchmarkError> {154 bench_init!{251 bench_init! {155 owner: sub; collection: collection(owner);252 owner: sub; collection: collection(owner);156 sender: cross_from_sub(owner); receiver: cross_sub;253 sender: cross_from_sub(owner); receiver: cross_sub;157 };254 };158 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;255 let item = create_max_item(&collection, &sender, [(sender.clone(), 200)])?;159 }: {<Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?}160256161 approve {257 #[block]258 {259 <Pallet<T>>::transfer(&collection, &sender, &receiver, item, 200, &Unlimited)?;260 }261262 Ok(())263 }264265 #[benchmark]266 fn approve() -> Result<(), BenchmarkError> {162 bench_init!{267 bench_init! {163 owner: sub; collection: collection(owner);268 owner: sub; collection: collection(owner);164 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;269 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;165 };270 };166 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;271 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;167 }: {<Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?}168272169 approve_from {273 #[block]274 {275 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;276 }277278 Ok(())279 }280281 #[benchmark]282 fn approve_from() -> Result<(), BenchmarkError> {170 bench_init!{283 bench_init! {171 owner: sub; collection: collection(owner);284 owner: sub; collection: collection(owner);172 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;285 owner: cross_from_sub; sender: cross_sub; spender: cross_sub;173 };286 };174 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());287 let owner_eth = T::CrossAccountId::from_eth(*sender.as_eth());175 let item = create_max_item(&collection, &owner, [(owner_eth.clone(), 200)])?;288 let item = create_max_item(&collection, &owner, [(owner_eth.clone(), 200)])?;176 }: {<Pallet<T>>::set_allowance_from(&collection, &sender, &owner_eth, &spender, item, 100)?}177289178 transfer_from_normal {290 #[block]291 {292 <Pallet<T>>::set_allowance_from(&collection, &sender, &owner_eth, &spender, item, 100)?;293 }294295 Ok(())296 }297298 #[benchmark]299 fn transfer_from_normal() -> Result<(), BenchmarkError> {179 bench_init!{300 bench_init! {180 owner: sub; collection: collection(owner);301 owner: sub; collection: collection(owner);181 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;302 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;182 };303 };183 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;304 let item = create_max_item(305 &collection,306 &owner,307 [(sender.clone(), 200), (receiver.clone(), 200)],308 )?;184 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;309 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;310185 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}311 #[block]312 {313 <Pallet<T>>::transfer_from(314 &collection,315 &spender,316 &sender,317 &receiver,318 item,319 100,320 &Unlimited,321 )?;322 }323324 Ok(())325 }326186 // Target account is created327 // Target account is created187 transfer_from_creating {328 #[benchmark]329 fn transfer_from_creating() -> Result<(), BenchmarkError> {188 bench_init!{330 bench_init! {189 owner: sub; collection: collection(owner);331 owner: sub; collection: collection(owner);190 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;332 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;191 };333 };192 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;334 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;193 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;335 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 100)?;336194 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 100, &Unlimited)?}337 #[block]338 {339 <Pallet<T>>::transfer_from(340 &collection,341 &spender,342 &sender,343 &receiver,344 item,345 100,346 &Unlimited,347 )?;348 }349350 Ok(())351 }352195 // Source account is destroyed353 // Source account is destroyed196 transfer_from_removing {354 #[benchmark]355 fn transfer_from_removing() -> Result<(), BenchmarkError> {197 bench_init!{356 bench_init! {198 owner: sub; collection: collection(owner);357 owner: sub; collection: collection(owner);199 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;358 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;200 };359 };201 let item = create_max_item(&collection, &owner, [(sender.clone(), 200), (receiver.clone(), 200)])?;360 let item = create_max_item(361 &collection,362 &owner,363 [(sender.clone(), 200), (receiver.clone(), 200)],364 )?;202 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;365 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;366203 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}367 #[block]368 {369 <Pallet<T>>::transfer_from(370 &collection,371 &spender,372 &sender,373 &receiver,374 item,375 200,376 &Unlimited,377 )?;378 }379380 Ok(())381 }382204 // Source account destroyed, target created383 // Source account destroyed, target created205 transfer_from_creating_removing {384 #[benchmark]385 fn transfer_from_creating_removing() -> Result<(), BenchmarkError> {206 bench_init!{386 bench_init! {207 owner: sub; collection: collection(owner);387 owner: sub; collection: collection(owner);208 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;388 owner: cross_from_sub; sender: cross_sub; spender: cross_sub; receiver: cross_sub;209 };389 };210 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;390 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;211 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;391 <Pallet<T>>::set_allowance(&collection, &sender, &spender, item, 200)?;212 }: {<Pallet<T>>::transfer_from(&collection, &spender, &sender, &receiver, item, 200, &Unlimited)?}213392393 #[block]394 {395 <Pallet<T>>::transfer_from(396 &collection,397 &spender,398 &sender,399 &receiver,400 item,401 200,402 &Unlimited,403 )?;404 }405406 Ok(())407 }408214 // Both source account and token is destroyed409 // Both source account and token is destroyed215 burn_from {410 #[benchmark]411 fn burn_from() -> Result<(), BenchmarkError> {216 bench_init!{412 bench_init! {217 owner: sub; collection: collection(owner);413 owner: sub; collection: collection(owner);218 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;414 owner: cross_from_sub; sender: cross_sub; burner: cross_sub;219 };415 };220 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;416 let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;221 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;417 <Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;222 }: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}223418224 set_token_property_permissions {419 #[block]420 {225 let b in 0..MAX_PROPERTIES_PER_ITEM;421 <Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?;422 }423424 Ok(())425 }426427 #[benchmark]428 fn set_token_property_permissions(429 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,226 bench_init!{430 ) -> Result<(), BenchmarkError> {431 bench_init! {227 owner: sub; collection: collection(owner);432 owner: sub; collection: collection(owner);228 owner: cross_from_sub;433 owner: cross_from_sub;229 };434 };230 let perms = (0..b).map(|k| PropertyKeyPermission {435 let perms = (0..b)436 .map(|k| PropertyKeyPermission {231 key: property_key(k as usize),437 key: property_key(k as usize),232 permission: PropertyPermission {438 permission: PropertyPermission {233 mutable: false,439 mutable: false,234 collection_admin: false,440 collection_admin: false,235 token_owner: false,441 token_owner: false,236 },442 },237 }).collect::<Vec<_>>();443 })238 }: {<Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?}444 .collect::<Vec<_>>();239445240 set_token_properties {446 #[block]447 {241 let b in 0..MAX_PROPERTIES_PER_ITEM;448 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;449 }450451 Ok(())452 }453454 #[benchmark]455 fn set_token_properties(b: Linear<0, MAX_PROPERTIES_PER_ITEM>) -> Result<(), BenchmarkError> {242 bench_init!{456 bench_init! {243 owner: sub; collection: collection(owner);457 owner: sub; collection: collection(owner);244 owner: cross_from_sub;458 owner: cross_from_sub;245 };459 };246 let perms = (0..b).map(|k| PropertyKeyPermission {460 let perms = (0..b)461 .map(|k| PropertyKeyPermission {247 key: property_key(k as usize),462 key: property_key(k as usize),248 permission: PropertyPermission {463 permission: PropertyPermission {249 mutable: false,464 mutable: false,250 collection_admin: true,465 collection_admin: true,251 token_owner: true,466 token_owner: true,252 },467 },253 }).collect::<Vec<_>>();468 })469 .collect::<Vec<_>>();254 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;470 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;255 let props = (0..b).map(|k| Property {471 let props = (0..b)472 .map(|k| Property {256 key: property_key(k as usize),473 key: property_key(k as usize),257 value: property_value(),474 value: property_value(),258 }).collect::<Vec<_>>();475 })476 .collect::<Vec<_>>();259 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;477 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;260 }: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), &Unlimited)?}261478262 init_token_properties {479 #[block]480 {263 let b in 0..MAX_PROPERTIES_PER_ITEM;481 <Pallet<T>>::set_token_properties(482 &collection,483 &owner,484 item,485 props.into_iter(),486 &Unlimited,487 )?;488 }489490 Ok(())491 }492493 #[benchmark]494 fn init_token_properties(b: Linear<0, MAX_PROPERTIES_PER_ITEM>) -> Result<(), BenchmarkError> {264 bench_init!{495 bench_init! {265 owner: sub; collection: collection(owner);496 owner: sub; collection: collection(owner);266 owner: cross_from_sub;497 owner: cross_from_sub;267 };498 };268499269 let perms = (0..b).map(|k| PropertyKeyPermission {500 let perms = (0..b)501 .map(|k| PropertyKeyPermission {270 key: property_key(k as usize),502 key: property_key(k as usize),271 permission: PropertyPermission {503 permission: PropertyPermission {272 mutable: false,504 mutable: false,273 collection_admin: true,505 collection_admin: true,274 token_owner: true,506 token_owner: true,275 },507 },276 }).collect::<Vec<_>>();508 })509 .collect::<Vec<_>>();277 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;510 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;278 let props = (0..b).map(|k| Property {511 // let props = (0..b).map(|k| Property {279 key: property_key(k as usize),512 // key: property_key(k as usize),280 value: property_value(),513 // value: property_value(),281 }).collect::<Vec<_>>();514 // }).collect::<Vec<_>>();282 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;515 // let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;283516284 let (is_collection_admin, property_permissions) = load_is_admin_and_property_permissions(&collection, &owner);517 // let (is_collection_admin, property_permissions) = load_is_admin_and_property_permissions(&collection, &owner);285 }: {286 let mut property_writer = pallet_common::collection_info_loaded_property_writer(287 &collection,288 is_collection_admin,289 property_permissions,290 );291518292 property_writer.write_token_properties(519 #[block]520 {}521 todo!();522 // let mut property_writer = pallet_common::collection_info_loaded_property_writer(523 // &collection,524 // is_collection_admin,525 // property_permissions,526 // );527528 // #[block]529 // {530 // property_writer.write_token_properties(293 true,531 // true,294 item,532 // item,295 props.into_iter(),533 // props.into_iter(),296 crate::erc::ERC721TokenEvent::TokenChanged {534 // crate::erc::ERC721TokenEvent::TokenChanged {297 token_id: item.into(),535 // token_id: item.into(),298 }536 // }299 .to_log(T::ContractAddress::get()),537 // .to_log(T::ContractAddress::get()),300 )?538 // )?;539 // }540541 Ok(())301 }542 }302543303 delete_token_properties {544 #[benchmark]545 fn delete_token_properties(304 let b in 0..MAX_PROPERTIES_PER_ITEM;546 b: Linear<0, MAX_PROPERTIES_PER_ITEM>,305 bench_init!{547 ) -> Result<(), BenchmarkError> {548 bench_init! {306 owner: sub; collection: collection(owner);549 owner: sub; collection: collection(owner);307 owner: cross_from_sub;550 owner: cross_from_sub;308 };551 };309 let perms = (0..b).map(|k| PropertyKeyPermission {552 let perms = (0..b)553 .map(|k| PropertyKeyPermission {310 key: property_key(k as usize),554 key: property_key(k as usize),311 permission: PropertyPermission {555 permission: PropertyPermission {312 mutable: true,556 mutable: true,313 collection_admin: true,557 collection_admin: true,314 token_owner: true,558 token_owner: true,315 },559 },316 }).collect::<Vec<_>>();560 })561 .collect::<Vec<_>>();317 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;562 <Pallet<T>>::set_token_property_permissions(&collection, &owner, perms)?;318 let props = (0..b).map(|k| Property {563 let props = (0..b)564 .map(|k| Property {319 key: property_key(k as usize),565 key: property_key(k as usize),320 value: property_value(),566 value: property_value(),321 }).collect::<Vec<_>>();567 })568 .collect::<Vec<_>>();322 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;569 let item = create_max_item(&collection, &owner, [(owner.clone(), 200)])?;323 <Pallet<T>>::set_token_properties(&collection, &owner, item, props.into_iter(), &Unlimited)?;570 <Pallet<T>>::set_token_properties(571 &collection,572 &owner,573 item,574 props.into_iter(),575 &Unlimited,576 )?;324 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();577 let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();325 }: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete.into_iter(), &Unlimited)?}326578327 repartition_item {579 #[block]580 {581 <Pallet<T>>::delete_token_properties(582 &collection,583 &owner,584 item,585 to_delete.into_iter(),586 &Unlimited,587 )?;588 }589590 Ok(())591 }592593 #[benchmark]594 fn repartition_item() -> Result<(), BenchmarkError> {328 bench_init!{595 bench_init! {329 owner: sub; collection: collection(owner);596 owner: sub; collection: collection(owner);330 sender: cross_from_sub(owner); owner: cross_sub;597 sender: cross_from_sub(owner); owner: cross_sub;331 };598 };332 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;599 let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;333 }: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}334600335 token_owner {601 #[block]602 {603 <Pallet<T>>::repartition(&collection, &owner, item, 200)?;604 }605606 Ok(())607 }608609 #[benchmark]610 fn token_owner() -> Result<(), BenchmarkError> {336 bench_init!{611 bench_init! {337 owner: sub; collection: collection(owner);612 owner: sub; collection: collection(owner);338 sender: cross_from_sub(owner); owner: cross_sub;613 sender: cross_from_sub(owner); owner: cross_sub;339 };614 };340 let item = create_max_item(&collection, &sender, [(owner, 100)])?;615 let item = create_max_item(&collection, &sender, [(owner, 100)])?;341 }: {<Pallet<T>>::token_owner(collection.id, item).unwrap()}342616343 set_allowance_for_all {617 #[block]618 {619 <Pallet<T>>::token_owner(collection.id, item).unwrap();620 }621622 Ok(())623 }624625 #[benchmark]626 fn set_allowance_for_all() -> Result<(), BenchmarkError> {344 bench_init!{627 bench_init! {345 owner: sub; collection: collection(owner); owner: cross_from_sub;628 owner: sub; collection: collection(owner); owner: cross_from_sub;346 operator: cross_sub;629 operator: cross_sub;347 };630 };348 }: {<Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?}349631350 allowance_for_all {632 #[block]633 {634 <Pallet<T>>::set_allowance_for_all(&collection, &owner, &operator, true)?;635 }636637 Ok(())638 }639640 #[benchmark]641 fn allowance_for_all() -> Result<(), BenchmarkError> {351 bench_init!{642 bench_init! {352 owner: sub; collection: collection(owner); owner: cross_from_sub;643 owner: sub; collection: collection(owner); owner: cross_from_sub;353 operator: cross_sub;644 operator: cross_sub;354 };645 };355 }: {<Pallet<T>>::allowance_for_all(&collection, &owner, &operator)}356646357 repair_item {647 #[block]648 {649 <Pallet<T>>::allowance_for_all(&collection, &owner, &operator);650 }651652 Ok(())653 }654655 #[benchmark]656 fn repair_item() -> Result<(), BenchmarkError> {358 bench_init!{657 bench_init! {359 owner: sub; collection: collection(owner);658 owner: sub; collection: collection(owner);360 owner: cross_from_sub;659 owner: cross_from_sub;361 };660 };362 let item = create_max_item(&collection, &owner, [(owner.clone(), 100)])?;661 let item = create_max_item(&collection, &owner, [(owner.clone(), 100)])?;662363 }: {<Pallet<T>>::repair_item(&collection, item)?}663 #[block]664 {665 <Pallet<T>>::repair_item(&collection, item)?;666 }667668 Ok(())669 }364}670}365671pallets/structure/src/benchmarking.rsdiffbeforeafterboth14// You should have received a copy of the GNU General Public License14// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.161617use frame_benchmarking::{account, benchmarks};17use frame_benchmarking::v2::{account, benchmarks, BenchmarkError};18use frame_support::traits::{fungible::Balanced, tokens::Precision, Get};18use frame_support::traits::{fungible::Balanced, tokens::Precision, Get};19use pallet_common::Config as CommonConfig;19use pallet_common::Config as CommonConfig;20use pallet_evm::account::CrossAccountId;20use pallet_evm::account::CrossAccountId;21use sp_std::vec;21use up_data_structs::{22use up_data_structs::{22 budget::Unlimited, CollectionMode, CreateCollectionData, CreateItemData, CreateNftData,23 budget::Unlimited, CollectionMode, CreateCollectionData, CreateItemData, CreateNftData,23};24};262727const SEED: u32 = 1;28const SEED: u32 = 1;282930#[benchmarks]29benchmarks! {31mod benchmarks {32 use super::*;3334 #[benchmark]30 find_parent {35 fn find_parent() -> Result<(), BenchmarkError> {31 let caller: T::AccountId = account("caller", 0, SEED);36 let caller: T::AccountId = account("caller", 0, SEED);32 let caller_cross = T::CrossAccountId::from_sub(caller.clone());37 let caller_cross = T::CrossAccountId::from_sub(caller.clone());333834 let _ = <T as CommonConfig>::Currency::deposit(&caller, T::CollectionCreationPrice::get(), Precision::Exact).unwrap();39 let _ = <T as CommonConfig>::Currency::deposit(40 &caller,41 T::CollectionCreationPrice::get(),42 Precision::Exact,43 )44 .unwrap();35 T::CollectionDispatch::create(45 T::CollectionDispatch::create(57 caller_cross.clone(),58 caller_cross,59 CreateItemData::NFT(CreateNftData::default()),60 &Unlimited,61 )?;6263 #[block]64 {65 let parent = <Pallet<T>>::find_parent(CollectionId(1), TokenId(1))?;66 assert!(matches!(parent, Parent::User(_)));67 }6869 Ok(())47 }: {70 }48 let parent = <Pallet<T>>::find_parent(CollectionId(1), TokenId(1))?;49 assert!(matches!(parent, Parent::User(_)))50 }51}71}5272pallets/unique/src/benchmarking.rsdiffbeforeafterboth161617#![cfg(feature = "runtime-benchmarks")]17#![cfg(feature = "runtime-benchmarks")]181819use frame_benchmarking::{account, benchmarks};19use frame_benchmarking::v2::{account, benchmarks, BenchmarkError};20use frame_support::traits::{fungible::Balanced, tokens::Precision, Get};20use frame_support::traits::{fungible::Balanced, tokens::Precision, Get};21use frame_system::RawOrigin;21use frame_system::RawOrigin;22use pallet_common::{22use pallet_common::{63 create_collection_helper::<T>(owner, CollectionMode::NFT)63 create_collection_helper::<T>(owner, CollectionMode::NFT)64}64}656566#[benchmarks]66benchmarks! {67mod benchmarks {68 use super::*;6970 #[benchmark]67 create_collection {71 fn create_collection() -> Result<(), BenchmarkError> {68 let col_name = create_u16_data::<{MAX_COLLECTION_NAME_LENGTH}>();72 let col_name = create_u16_data::<{ MAX_COLLECTION_NAME_LENGTH }>();69 let col_desc = create_u16_data::<{MAX_COLLECTION_DESCRIPTION_LENGTH}>();73 let col_desc = create_u16_data::<{ MAX_COLLECTION_DESCRIPTION_LENGTH }>();70 let token_prefix = create_data::<{MAX_TOKEN_PREFIX_LENGTH}>();74 let token_prefix = create_data::<{ MAX_TOKEN_PREFIX_LENGTH }>();71 let mode: CollectionMode = CollectionMode::NFT;75 let mode: CollectionMode = CollectionMode::NFT;72 let caller: T::AccountId = account("caller", 0, SEED);76 let caller: T::AccountId = account("caller", 0, SEED);73 let _ = <T as CommonConfig>::Currency::deposit(&caller, T::CollectionCreationPrice::get(), Precision::Exact).unwrap();77 let _ = <T as CommonConfig>::Currency::deposit(78 &caller,79 T::CollectionCreationPrice::get(),80 Precision::Exact,81 )82 .unwrap();8384 #[extrinsic_call]74 }: _(RawOrigin::Signed(caller.clone()), col_name, col_desc, token_prefix, mode)85 _(75 verify {86 RawOrigin::Signed(caller.clone()),87 col_name,88 col_desc,89 token_prefix,90 mode,91 );9276 assert_eq!(<pallet_common::CollectionById<T>>::get(CollectionId(1)).unwrap().owner, caller);93 assert_eq!(77 }94 <pallet_common::CollectionById<T>>::get(CollectionId(1))7895 .unwrap()96 .owner,97 caller98 );99100 Ok(())101 }102103 #[benchmark]79 destroy_collection {104 fn destroy_collection() -> Result<(), BenchmarkError> {80 let caller: T::AccountId = account("caller", 0, SEED);105 let caller: T::AccountId = account("caller", 0, SEED);81 let collection = create_nft_collection::<T>(caller.clone())?;106 let collection = create_nft_collection::<T>(caller.clone())?;107108 #[extrinsic_call]82 }: _(RawOrigin::Signed(caller.clone()), collection)109 _(RawOrigin::Signed(caller.clone()), collection);83110111 Ok(())112 }113114 #[benchmark]84 add_to_allow_list {115 fn add_to_allow_list() -> Result<(), BenchmarkError> {85 let caller: T::AccountId = account("caller", 0, SEED);116 let caller: T::AccountId = account("caller", 0, SEED);86 let allowlist_account: T::AccountId = account("admin", 0, SEED);117 let allowlist_account: T::AccountId = account("admin", 0, SEED);87 let collection = create_nft_collection::<T>(caller.clone())?;118 let collection = create_nft_collection::<T>(caller.clone())?;119120 #[extrinsic_call]88 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))121 _(89122 RawOrigin::Signed(caller.clone()),123 collection,124 T::CrossAccountId::from_sub(allowlist_account),125 );126127 Ok(())128 }129130 #[benchmark]90 remove_from_allow_list {131 fn remove_from_allow_list() -> Result<(), BenchmarkError> {91 let caller: T::AccountId = account("caller", 0, SEED);132 let caller: T::AccountId = account("caller", 0, SEED);92 let allowlist_account: T::AccountId = account("admin", 0, SEED);133 let allowlist_account: T::AccountId = account("admin", 0, SEED);93 let collection = create_nft_collection::<T>(caller.clone())?;134 let collection = create_nft_collection::<T>(caller.clone())?;94 <Pallet<T>>::add_to_allow_list(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(allowlist_account.clone()))?;135 <Pallet<T>>::add_to_allow_list(136 RawOrigin::Signed(caller.clone()).into(),137 collection,138 T::CrossAccountId::from_sub(allowlist_account.clone()),139 )?;140141 #[extrinsic_call]142 _(143 RawOrigin::Signed(caller.clone()),144 collection,145 T::CrossAccountId::from_sub(allowlist_account),146 );147148 Ok(())95 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(allowlist_account))149 }9615097 change_collection_owner {151 #[benchmark]152 fn change_collection_owner() -> Result<(), BenchmarkError> {98 let caller: T::AccountId = account("caller", 0, SEED);153 let caller: T::AccountId = account("caller", 0, SEED);99 let collection = create_nft_collection::<T>(caller.clone())?;154 let collection = create_nft_collection::<T>(caller.clone())?;100 let new_owner: T::AccountId = account("admin", 0, SEED);155 let new_owner: T::AccountId = account("admin", 0, SEED);156157 #[extrinsic_call]101 }: _(RawOrigin::Signed(caller.clone()), collection, new_owner)158 _(RawOrigin::Signed(caller.clone()), collection, new_owner);102159160 Ok(())161 }162163 #[benchmark]103 add_collection_admin {164 fn add_collection_admin() -> Result<(), BenchmarkError> {104 let caller: T::AccountId = account("caller", 0, SEED);165 let caller: T::AccountId = account("caller", 0, SEED);105 let collection = create_nft_collection::<T>(caller.clone())?;166 let collection = create_nft_collection::<T>(caller.clone())?;106 let new_admin: T::AccountId = account("admin", 0, SEED);167 let new_admin: T::AccountId = account("admin", 0, SEED);168169 #[extrinsic_call]107 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))170 _(108171 RawOrigin::Signed(caller.clone()),172 collection,173 T::CrossAccountId::from_sub(new_admin),174 );175176 Ok(())177 }178179 #[benchmark]109 remove_collection_admin {180 fn remove_collection_admin() -> Result<(), BenchmarkError> {110 let caller: T::AccountId = account("caller", 0, SEED);181 let caller: T::AccountId = account("caller", 0, SEED);111 let collection = create_nft_collection::<T>(caller.clone())?;182 let collection = create_nft_collection::<T>(caller.clone())?;112 let new_admin: T::AccountId = account("admin", 0, SEED);183 let new_admin: T::AccountId = account("admin", 0, SEED);113 <Pallet<T>>::add_collection_admin(RawOrigin::Signed(caller.clone()).into(), collection, T::CrossAccountId::from_sub(new_admin.clone()))?;184 <Pallet<T>>::add_collection_admin(185 RawOrigin::Signed(caller.clone()).into(),186 collection,187 T::CrossAccountId::from_sub(new_admin.clone()),188 )?;189190 #[extrinsic_call]191 _(192 RawOrigin::Signed(caller.clone()),193 collection,194 T::CrossAccountId::from_sub(new_admin),195 );196197 Ok(())114 }: _(RawOrigin::Signed(caller.clone()), collection, T::CrossAccountId::from_sub(new_admin))198 }115199116 set_collection_sponsor {200 #[benchmark]201 fn set_collection_sponsor() -> Result<(), BenchmarkError> {117 let caller: T::AccountId = account("caller", 0, SEED);202 let caller: T::AccountId = account("caller", 0, SEED);118 let collection = create_nft_collection::<T>(caller.clone())?;203 let collection = create_nft_collection::<T>(caller.clone())?;204205 #[extrinsic_call]119 }: _(RawOrigin::Signed(caller.clone()), collection, caller.clone())206 _(120207 RawOrigin::Signed(caller.clone()),208 collection,209 caller.clone(),210 );211212 Ok(())213 }214215 #[benchmark]121 confirm_sponsorship {216 fn confirm_sponsorship() -> Result<(), BenchmarkError> {122 let caller: T::AccountId = account("caller", 0, SEED);217 let caller: T::AccountId = account("caller", 0, SEED);123 let collection = create_nft_collection::<T>(caller.clone())?;218 let collection = create_nft_collection::<T>(caller.clone())?;124 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;219 <Pallet<T>>::set_collection_sponsor(220 RawOrigin::Signed(caller.clone()).into(),221 collection,222 caller.clone(),223 )?;224225 #[extrinsic_call]226 _(RawOrigin::Signed(caller.clone()), collection);227228 Ok(())125 }: _(RawOrigin::Signed(caller.clone()), collection)229 }126230231 #[benchmark]127 remove_collection_sponsor {232 fn remove_collection_sponsor() -> Result<(), BenchmarkError> {128 let caller: T::AccountId = account("caller", 0, SEED);233 let caller: T::AccountId = account("caller", 0, SEED);129 let collection = create_nft_collection::<T>(caller.clone())?;234 let collection = create_nft_collection::<T>(caller.clone())?;130 <Pallet<T>>::set_collection_sponsor(RawOrigin::Signed(caller.clone()).into(), collection, caller.clone())?;235 <Pallet<T>>::set_collection_sponsor(236 RawOrigin::Signed(caller.clone()).into(),237 collection,238 caller.clone(),239 )?;131 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;240 <Pallet<T>>::confirm_sponsorship(RawOrigin::Signed(caller.clone()).into(), collection)?;241242 #[extrinsic_call]243 _(RawOrigin::Signed(caller.clone()), collection);244245 Ok(())132 }: _(RawOrigin::Signed(caller.clone()), collection)246 }133247134 set_transfers_enabled_flag {248 #[benchmark]249 fn set_transfers_enabled_flag() -> Result<(), BenchmarkError> {135 let caller: T::AccountId = account("caller", 0, SEED);250 let caller: T::AccountId = account("caller", 0, SEED);136 let collection = create_nft_collection::<T>(caller.clone())?;251 let collection = create_nft_collection::<T>(caller.clone())?;252253 #[extrinsic_call]137 }: _(RawOrigin::Signed(caller.clone()), collection, false)254 _(RawOrigin::Signed(caller.clone()), collection, false);138255139256 Ok(())257 }258259 #[benchmark]140 set_collection_limits {260 fn set_collection_limits() -> Result<(), BenchmarkError> {141 let caller: T::AccountId = account("caller", 0, SEED);261 let caller: T::AccountId = account("caller", 0, SEED);142 let collection = create_nft_collection::<T>(caller.clone())?;262 let collection = create_nft_collection::<T>(caller.clone())?;143263144 let cl = CollectionLimits {264 let cl = CollectionLimits {145 account_token_ownership_limit: Some(0),265 account_token_ownership_limit: Some(0),153 transfers_enabled: Some(true),273 transfers_enabled: Some(true),154 };274 };275276 #[extrinsic_call]277 set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl);278279 Ok(())155 }: set_collection_limits(RawOrigin::Signed(caller.clone()), collection, cl)280 }156281157 force_repair_collection {282 #[benchmark]283 fn force_repair_collection() -> Result<(), BenchmarkError> {158 let caller: T::AccountId = account("caller", 0, SEED);284 let caller: T::AccountId = account("caller", 0, SEED);159 let collection = create_nft_collection::<T>(caller)?;285 let collection = create_nft_collection::<T>(caller)?;286287 #[extrinsic_call]160 }: _(RawOrigin::Root, collection)288 _(RawOrigin::Root, collection);289290 Ok(())291 }161}292}162293