diff --git a/pallets/authority-members/src/benchmarking.rs b/pallets/authority-members/src/benchmarking.rs index 893d89ba867bb56f5d9f209536f2df6fccb428e4..808ea5865cee6ab763bcdf1be40adcc66ff08051 100644 --- a/pallets/authority-members/src/benchmarking.rs +++ b/pallets/authority-members/src/benchmarking.rs @@ -17,70 +17,83 @@ #![cfg(feature = "runtime-benchmarks")] use super::*; - -use frame_benchmarking::benchmarks; -use frame_system::RawOrigin; - use crate::Pallet; -fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { - frame_system::Pallet::<T>::assert_has_event(generic_event.into()); -} +use frame_benchmarking::v2::*; +use frame_system::RawOrigin; -benchmarks! { - where_clause { +#[benchmarks( where - T::MemberId: From<u32>, + <T as Config>::MemberId: From<u32>, +)] +mod benchmarks { + use super::*; + + fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { + frame_system::Pallet::<T>::assert_has_event(generic_event.into()); } - go_offline { + + #[benchmark] + fn go_offline() { let id: T::MemberId = OnlineAuthorities::<T>::get()[0]; let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - }: _<T::RuntimeOrigin>(caller_origin) - verify { - assert_has_event::<T>(Event::<T>::MemberGoOffline{member: id}.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller)); + + assert_has_event::<T>(Event::<T>::MemberGoOffline { member: id }.into()); } - go_online { + + #[benchmark] + fn go_online() { let id: T::MemberId = OnlineAuthorities::<T>::get()[0]; let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); OnlineAuthorities::<T>::mutate(|ids| { ids.retain(|&x| x != id); }); OutgoingAuthorities::<T>::mutate(|ids| { ids.retain(|&x| x != id); }); - }: _<T::RuntimeOrigin>(caller_origin) - verify { - assert_has_event::<T>(Event::<T>::MemberGoOnline{member: id}.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller)); + + assert_has_event::<T>(Event::<T>::MemberGoOnline { member: id }.into()); } - set_session_keys { + + #[benchmark] + fn set_session_keys() { let id: T::MemberId = OnlineAuthorities::<T>::get()[0]; let caller: T::AccountId = Members::<T>::get(id).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - let validator_id = T::ValidatorIdOf::convert(caller.clone()).unwrap(); - let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap(); - }: _<T::RuntimeOrigin>(caller_origin, session_keys) - remove_member { + let validator_id = T::ValidatorIdOf::convert(caller.clone()).unwrap(); + let session_keys: T::Keys = pallet_session::NextKeys::<T>::get(validator_id).unwrap(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), session_keys); + } + + #[benchmark] + fn remove_member() { let id: T::MemberId = OnlineAuthorities::<T>::get()[0]; - let caller_origin = RawOrigin::Root.into(); - }: _<T::RuntimeOrigin>(caller_origin, id) - verify { - assert_has_event::<T>(Event::<T>::MemberRemoved{member: id}.into()); + + #[extrinsic_call] + _(RawOrigin::Root, id); + + assert_has_event::<T>(Event::<T>::MemberRemoved { member: id }.into()); } - remove_member_from_blacklist { + + #[benchmark] + fn remove_member_from_blacklist() { let id: T::MemberId = OnlineAuthorities::<T>::get()[0]; Blacklist::<T>::mutate(|blacklist| { blacklist.push(id); }); - }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), id) - verify { - assert_has_event::<T>(Event::<T>::MemberRemovedFromBlacklist{member: id}.into()); + + #[extrinsic_call] + _(RawOrigin::Root, id); + + assert_has_event::<T>(Event::<T>::MemberRemovedFromBlacklist { member: id }.into()); } - impl_benchmark_test_suite!( - Pallet, - crate::mock::new_test_ext(2), - crate::mock::Test - ); + impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(2), crate::mock::Test); } diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs index 5aa67fdf40a170cd4d629e99ebdf6abbdb26c9d6..353fdfd1619953f3246cee1e5d6235cdc24872c3 100644 --- a/pallets/certification/src/benchmarking.rs +++ b/pallets/certification/src/benchmarking.rs @@ -18,122 +18,160 @@ use super::*; -use frame_benchmarking::benchmarks; +use frame_benchmarking::v2::*; use frame_system::RawOrigin; use sp_runtime::traits::Zero; -#[cfg(test)] -use maplit::btreemap; - use crate::Pallet; -fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { - frame_system::Pallet::<T>::assert_has_event(generic_event.into()); -} +#[benchmarks( + where + <T as Config>::IdtyIndex: From<u32>, +)] +mod benchmarks { + use super::*; -fn add_certs<T: Config>(i: u32, receiver: T::IdtyIndex) -> Result<(), &'static str> { - Pallet::<T>::remove_all_certs_received_by(RawOrigin::Root.into(), receiver)?; - for j in 1..i { - Pallet::<T>::do_add_cert_checked(j.into(), receiver, false)?; + fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { + frame_system::Pallet::<T>::assert_has_event(generic_event.into()); } - assert!( - CertsByReceiver::<T>::get(receiver).len() as u32 == i - 1, - "Certs not added", - ); - Ok(()) -} -benchmarks! { - where_clause { - where - T::IdtyIndex: From<u32>, + fn add_certs<T: Config>(i: u32, receiver: T::IdtyIndex) -> Result<(), &'static str> { + Pallet::<T>::remove_all_certs_received_by(RawOrigin::Root.into(), receiver)?; + for j in 1..i { + Pallet::<T>::do_add_cert_checked(j.into(), receiver, false)?; + } + assert!( + CertsByReceiver::<T>::get(receiver).len() as u32 == i - 1, + "Certs not added", + ); + Ok(()) } - add_cert { + + #[benchmark] + fn add_cert() -> Result<(), BenchmarkError> { let issuer: T::IdtyIndex = 1.into(); - let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap(); - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); + let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap(); let receiver: T::IdtyIndex = 2.into(); Pallet::<T>::del_cert(RawOrigin::Root.into(), issuer, receiver)?; - let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count; - let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count; frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get()); - }: _<T::RuntimeOrigin>(caller_origin, receiver) - verify { - assert_has_event::<T>(Event::<T>::CertAdded{ issuer, receiver }.into()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), receiver); + + assert_has_event::<T>(Event::<T>::CertAdded { issuer, receiver }.into()); + Ok(()) } - renew_cert { + #[benchmark] + fn renew_cert() -> Result<(), BenchmarkError> { let issuer: T::IdtyIndex = 1.into(); - let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap(); - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); + let caller: T::AccountId = T::IdtyAttr::owner_key(issuer).unwrap(); let receiver: T::IdtyIndex = 2.into(); Pallet::<T>::del_cert(RawOrigin::Root.into(), issuer, receiver)?; - let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count; - let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count; frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get()); - Pallet::<T>::add_cert(caller_origin.clone(), receiver)?; - frame_system::pallet::Pallet::<T>::set_block_number(T::CertPeriod::get() + T::CertPeriod::get()); - }: _<T::RuntimeOrigin>(caller_origin, receiver) - verify { - assert_has_event::<T>(Event::<T>::CertAdded{ issuer, receiver }.into()); + Pallet::<T>::add_cert(RawOrigin::Signed(caller.clone()).into(), receiver)?; + frame_system::pallet::Pallet::<T>::set_block_number( + T::CertPeriod::get() + T::CertPeriod::get(), + ); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), receiver); + + assert_has_event::<T>(Event::<T>::CertAdded { issuer, receiver }.into()); + Ok(()) } - del_cert { + #[benchmark] + fn del_cert() -> Result<(), BenchmarkError> { let issuer: T::IdtyIndex = 1.into(); let receiver: T::IdtyIndex = 2.into(); // try to add cert if missing, else ignore // this depends on initial data - let _ = Pallet::<T>::do_add_cert_checked(issuer, receiver, false); - let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count; - let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count; - }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), issuer, receiver) - verify { - assert_has_event::<T>(Event::<T>::CertRemoved{ issuer, receiver, expiration: false }.into()); + Pallet::<T>::do_add_cert_checked(issuer, receiver, false)?; + + #[extrinsic_call] + _(RawOrigin::Root, issuer, receiver); + + assert_has_event::<T>( + Event::<T>::CertRemoved { + issuer, + receiver, + expiration: false, + } + .into(), + ); + Ok(()) } - remove_all_certs_received_by { + #[benchmark] + fn remove_all_certs_received_by(i: Linear<2, 1_000>) -> Result<(), BenchmarkError> { let receiver: T::IdtyIndex = 0.into(); - let i in 2..1000 => add_certs::<T>(i, receiver)?; - }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), receiver) - verify { - assert!(CertsByReceiver::<T>::get(receiver).is_empty() ); + add_certs::<T>(i, receiver)?; + + #[extrinsic_call] + _(RawOrigin::Root, receiver); + + assert!(CertsByReceiver::<T>::get(receiver).is_empty()); + Ok(()) } - on_initialize { + #[benchmark] + fn on_initialize() { assert!(CertsRemovableOn::<T>::try_get(BlockNumberFor::<T>::zero()).is_err()); - }: {Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());} - do_remove_cert_noop { - }: {Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(BlockNumberFor::<T>::zero()));} + #[block] + { + Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero()); + } + } + + #[benchmark] + fn do_remove_cert_noop() { + #[block] + { + Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(BlockNumberFor::<T>::zero())); + } + } - do_remove_cert { + #[benchmark] + fn do_remove_cert() -> Result<(), BenchmarkError> { let issuer: T::IdtyIndex = 1.into(); let receiver: T::IdtyIndex = 0.into(); Pallet::<T>::do_remove_cert(issuer, receiver, None); Pallet::<T>::do_add_cert_checked(issuer, receiver, false)?; - let issuer_cert: u32 = StorageIdtyCertMeta::<T>::get(issuer).issued_count; - let receiver_cert: u32 = StorageIdtyCertMeta::<T>::get(receiver).received_count; let block_number = T::ValidityPeriod::get(); frame_system::pallet::Pallet::<T>::set_block_number(block_number); - }: {Pallet::<T>::do_remove_cert(issuer, receiver, Some(block_number));} - verify { - assert_has_event::<T>(Event::<T>::CertRemoved{ issuer, receiver, expiration: true }.into()); + + #[block] + { + Pallet::<T>::do_remove_cert(issuer, receiver, Some(block_number)); + } + + assert_has_event::<T>( + Event::<T>::CertRemoved { + issuer, + receiver, + expiration: true, + } + .into(), + ); + Ok(()) } impl_benchmark_test_suite!( Pallet, crate::mock::new_test_ext(crate::mock::DefaultCertificationConfig { - apply_cert_period_at_genesis: true, - certs_by_receiver: btreemap![ - 0 => btreemap![ + apply_cert_period_at_genesis: true, + certs_by_receiver: maplit::btreemap![ + 0 => maplit::btreemap![ 1 => Some(7), 2 => Some(9), ], - 1 => btreemap![ + 1 => maplit::btreemap![ 0 => Some(10), 2 => Some(3), ], - ] , + ], }), crate::mock::Test ); diff --git a/pallets/distance/src/benchmarking.rs b/pallets/distance/src/benchmarking.rs index 4b5fb9557650cbae9ec1dc1f758c6de36d3852ec..0e888c8264c180d1ee4f494675ad8a853b4180b6 100644 --- a/pallets/distance/src/benchmarking.rs +++ b/pallets/distance/src/benchmarking.rs @@ -19,7 +19,7 @@ use super::*; use codec::Encode; -use frame_benchmarking::benchmarks; +use frame_benchmarking::v2::*; use frame_support::traits::{Currency, OnFinalize}; use frame_system::pallet_prelude::BlockNumberFor; use frame_system::RawOrigin; @@ -29,92 +29,150 @@ use sp_runtime::Perbill; use crate::Pallet; -fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { - frame_system::Pallet::<T>::assert_has_event(generic_event.into()); -} - -fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> { - EvaluationPool0::<T>::mutate(|current_pool| -> Result<(), &'static str> { - for j in 0..i { - current_pool - .evaluations - .try_push((j, median::MedianAcc::new())) - .map_err(|_| Error::<T>::QueueFull)?; - } - Ok(()) - }) -} - -benchmarks! { - where_clause { +#[benchmarks( where - T: pallet_balances::Config, T::Balance: From<u64>, + T: pallet_balances::Config, + T::Balance: From<u64>, BlockNumberFor<T>: From<u32>, +)] +mod benchmarks { + use super::*; + + fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { + frame_system::Pallet::<T>::assert_has_event(generic_event.into()); } - // request distance evaluation - request_distance_evaluation { + fn populate_pool<T: Config>(i: u32) -> Result<(), &'static str> { + EvaluationPool0::<T>::mutate(|current_pool| -> Result<(), &'static str> { + for j in 0..i { + current_pool + .evaluations + .try_push((j, median::MedianAcc::new())) + .map_err(|_| Error::<T>::QueueFull)?; + } + Ok(()) + }) + } + + #[benchmark] + fn request_distance_evaluation() { let idty = T::IdtyIndex::one(); - let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - let _ = <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value()); - }: _<T::RuntimeOrigin>(caller_origin.clone()) - verify { - assert!(PendingEvaluationRequest::<T>::get(idty) == Some(caller.clone()), "Request not added"); - assert_has_event::<T>(Event::<T>::EvaluationRequested { idty_index: idty, who: caller }.into()); + let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty) + .unwrap() + .owner_key; + let _ = + <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone())); + + assert!( + PendingEvaluationRequest::<T>::get(idty) == Some(caller.clone()), + "Request not added" + ); + assert_has_event::<T>( + Event::<T>::EvaluationRequested { + idty_index: idty, + who: caller, + } + .into(), + ); } - // request distance evaluation for - request_distance_evaluation_for { + #[benchmark] + fn request_distance_evaluation_for() { let idty = T::IdtyIndex::one(); - let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - let _ = <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value()); - let target = 2u32; + let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty) + .unwrap() + .owner_key; + <Balances<T> as Currency<_>>::make_free_balance_be(&caller, T::Balance::max_value()); + let target: T::IdtyIndex = 2u32; // set target status since targeted distance evaluation only allowed for unvalidated - pallet_identity::Identities::<T>::mutate(target, - |idty_val| idty_val.as_mut().unwrap().status = pallet_identity::IdtyStatus::Unvalidated); - }: _<T::RuntimeOrigin>(caller_origin.clone(), target) - verify { - assert!(PendingEvaluationRequest::<T>::get(target) == Some(caller.clone()), "Request not added"); - assert_has_event::<T>(Event::<T>::EvaluationRequested { idty_index: target, who: caller }.into()); + pallet_identity::Identities::<T>::mutate(target, |idty_val| { + idty_val.as_mut().unwrap().status = pallet_identity::IdtyStatus::Unvalidated + }); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), target); + + assert!( + PendingEvaluationRequest::<T>::get(target) == Some(caller.clone()), + "Request not added" + ); + assert_has_event::<T>( + Event::<T>::EvaluationRequested { + idty_index: target, + who: caller, + } + .into(), + ); } - // update evaluation - update_evaluation { + #[benchmark] + fn update_evaluation(i: Linear<1, MAX_EVALUATIONS_PER_SESSION>) -> Result<(), BenchmarkError> { let digest_data = sp_consensus_babe::digests::PreDigest::SecondaryPlain( - sp_consensus_babe::digests::SecondaryPlainPreDigest { authority_index: 0u32, slot: Default::default() }); + sp_consensus_babe::digests::SecondaryPlainPreDigest { + authority_index: 0u32, + slot: Default::default(), + }, + ); // A BABE digest item is needed to check authorship let digest = sp_runtime::DigestItem::PreRuntime(*b"BABE", digest_data.encode()); - let _ = <frame_system::Pallet<T>>::deposit_log(digest); + <frame_system::Pallet<T>>::deposit_log(digest); + populate_pool::<T>(i)?; + + #[extrinsic_call] + _( + RawOrigin::None, + ComputationResult { + distances: vec![Perbill::one(); i as usize], + }, + ); + + Ok(()) + } + + #[benchmark] + fn force_update_evaluation( + i: Linear<1, MAX_EVALUATIONS_PER_SESSION>, + ) -> Result<(), BenchmarkError> { let idty = T::IdtyIndex::one(); - let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?; - }: _<T::RuntimeOrigin>(RawOrigin::None.into(), ComputationResult{distances: vec![Perbill::one(); i as usize]}) - - // force update evaluation - force_update_evaluation { - let idty = T::IdtyIndex::one(); - let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key; - let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into(); - let i in 1 .. MAX_EVALUATIONS_PER_SESSION => populate_pool::<T>(i)?; - }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), caller.clone(), ComputationResult{distances: vec![Perbill::one(); i as usize]}) - - // force valid distance status - force_valid_distance_status { + let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty) + .unwrap() + .owner_key; + populate_pool::<T>(i)?; + + #[extrinsic_call] + _( + RawOrigin::Root, + caller, + ComputationResult { + distances: vec![Perbill::one(); i as usize], + }, + ); + + Ok(()) + } + + #[benchmark] + fn force_valid_distance_status() { let idty = T::IdtyIndex::one(); - let caller: T::AccountId = pallet_identity::Identities::<T>::get(idty).unwrap().owner_key; - }: _<T::RuntimeOrigin>(RawOrigin::Root.into(), idty) - verify { + + #[extrinsic_call] + _(RawOrigin::Root, idty); + assert_has_event::<T>(Event::<T>::EvaluatedValid { idty_index: idty }.into()); } - // on finalize - on_finalize { + #[benchmark] + fn on_finalize() { DidUpdate::<T>::set(true); - }: { Pallet::<T>::on_finalize(Default::default()); } - verify { + + #[block] + { + Pallet::<T>::on_finalize(Default::default()); + } + assert!(!DidUpdate::<T>::get()); } diff --git a/pallets/duniter-account/src/benchmarking.rs b/pallets/duniter-account/src/benchmarking.rs index 27a839e1a714503c4c3f01dd940f1cec48576771..74835636c1c00dd0fdc1f6757976e2cce2a43360 100644 --- a/pallets/duniter-account/src/benchmarking.rs +++ b/pallets/duniter-account/src/benchmarking.rs @@ -18,73 +18,139 @@ use super::*; -use frame_benchmarking::{account, benchmarks, whitelisted_caller}; +use frame_benchmarking::v2::*; use frame_support::sp_runtime::{traits::One, Saturating}; -use frame_support::traits::{Currency, Get}; +use frame_support::traits::Currency; +use frame_system::RawOrigin; use pallet_provide_randomness::OnFilledRandomness; use crate::Pallet; -fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { - frame_system::Pallet::<T>::assert_has_event(generic_event.into()); -} +#[benchmarks] +mod benchmarks { + use super::*; -fn create_pending_accounts<T: Config>( - i: u32, - is_balance: bool, - is_sufficient: bool, -) -> Result<(), &'static str> { - for _ in 0..i { - let caller: T::AccountId = whitelisted_caller(); - if is_balance { - let existential_deposit = T::ExistentialDeposit::get(); - let balance = existential_deposit.saturating_mul((200u32).into()); - let _ = <pallet_balances::Pallet<T> as Currency<T::AccountId>>::make_free_balance_be( - &caller, balance, - ); - } else { - assert!( - frame_system::Pallet::<T>::get(&caller).free - < T::NewAccountPrice::get() + T::ExistentialDeposit::get() - ); - } - if is_sufficient { - frame_system::Pallet::<T>::inc_sufficients(&caller); - } else { - assert!(frame_system::Pallet::<T>::sufficients(&caller) == 0); + fn assert_has_event<T: Config>(generic_event: <T as Config>::RuntimeEvent) { + frame_system::Pallet::<T>::assert_has_event(generic_event.into()); + } + + fn create_pending_accounts<T: Config>( + i: u32, + is_balance: bool, + is_sufficient: bool, + ) -> Result<(), &'static str> { + for _ in 0..i { + let caller: T::AccountId = whitelisted_caller(); + if is_balance { + let existential_deposit = T::ExistentialDeposit::get(); + let balance = existential_deposit.saturating_mul((200u32).into()); + let _ = + <pallet_balances::Pallet<T> as Currency<T::AccountId>>::make_free_balance_be( + &caller, balance, + ); + } else { + assert!( + frame_system::Pallet::<T>::get(&caller).free + < T::NewAccountPrice::get() + T::ExistentialDeposit::get() + ); + } + if is_sufficient { + frame_system::Pallet::<T>::inc_sufficients(&caller); + } else { + assert!(frame_system::Pallet::<T>::sufficients(&caller) == 0); + } + PendingNewAccounts::<T>::insert(caller, ()); } - PendingNewAccounts::<T>::insert(caller, ()); + Ok(()) } - Ok(()) -} -benchmarks! { - unlink_identity { + #[benchmark] + fn unlink_identity() { let account = account("Alice", 1, 1); - let origin = frame_system::RawOrigin::Signed(account); - }: _<T::RuntimeOrigin>(origin.into()) - on_initialize_sufficient { - let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, true)?; - }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); } - on_initialize_with_balance { - let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, true, false)?; - }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); } - on_initialize_no_balance { - let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, false)?; - }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); } - on_filled_randomness_pending { + + #[extrinsic_call] + _(RawOrigin::Signed(account)); + } + + #[benchmark] + fn on_initialize_sufficient( + i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>, + ) -> Result<(), BenchmarkError> { + create_pending_accounts::<T>(i, false, true)?; + + #[block] + { + Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); + } + + Ok(()) + } + + #[benchmark] + fn on_initialize_with_balance( + i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>, + ) -> Result<(), BenchmarkError> { + create_pending_accounts::<T>(i, true, false)?; + + #[block] + { + Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); + } + + Ok(()) + } + + #[benchmark] + fn on_initialize_no_balance( + i: Linear<0, { T::MaxNewAccountsPerBlock::get() }>, + ) -> Result<(), BenchmarkError> { + create_pending_accounts::<T>(i, false, false)?; + + #[block] + { + Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); + } + + Ok(()) + } + + #[benchmark] + fn on_filled_randomness_pending() { let caller: T::AccountId = whitelisted_caller(); let randomness = H256(T::AccountIdToSalt::convert(caller.clone())); - let request_id = pallet_provide_randomness::Pallet::<T>::force_request(pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, randomness); + let request_id = pallet_provide_randomness::Pallet::<T>::force_request( + pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, + randomness, + ); PendingRandomIdAssignments::<T>::insert(request_id, caller.clone()); - }: { Pallet::<T>::on_filled_randomness(request_id, randomness); } - verify { - assert_has_event::<T>(Event::<T>::RandomIdAssigned { who: caller, random_id: randomness }.into()); + + #[block] + { + Pallet::<T>::on_filled_randomness(request_id, randomness); + } + + assert_has_event::<T>( + Event::<T>::RandomIdAssigned { + who: caller, + random_id: randomness, + } + .into(), + ); } - on_filled_randomness_no_pending { + + #[benchmark] + fn on_filled_randomness_no_pending() { let caller: T::AccountId = whitelisted_caller(); let randomness = H256(T::AccountIdToSalt::convert(caller.clone())); - let request_id = pallet_provide_randomness::Pallet::<T>::force_request(pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, randomness); + let request_id = pallet_provide_randomness::Pallet::<T>::force_request( + pallet_provide_randomness::RandomnessType::RandomnessFromTwoEpochsAgo, + randomness, + ); assert!(!PendingRandomIdAssignments::<T>::contains_key(request_id)); - }: { Pallet::<T>::on_filled_randomness(request_id, randomness); } + + #[block] + { + Pallet::<T>::on_filled_randomness(request_id, randomness); + } + } }