mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 04:01:10 +00:00
WeightInfo for Multisig Pallet (#7154)
* as multi threshold 1 * add `as_multi_approve_store` benchmark * finish update * final weights * integrate into runtime * whitelist accounts * whitelisted caller weights * clean up comments * Get up to date `call_len` * better implementation * fix spacing * spacing * Update frame/multisig/src/benchmarking.rs Co-authored-by: Alexander Popiak <alexander.popiak@parity.io> Co-authored-by: Alexander Popiak <alexander.popiak@parity.io>
This commit is contained in:
@@ -59,6 +59,9 @@ benchmarks! {
|
||||
let call_hash = call.using_encoded(blake2_256);
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, 1);
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: _(RawOrigin::Signed(caller.clone()), signatories, Box::new(call))
|
||||
verify {
|
||||
// If the benchmark resolves, then the call was dispatched successfully.
|
||||
@@ -73,9 +76,13 @@ benchmarks! {
|
||||
let call_hash = blake2_256(&call);
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: as_multi(RawOrigin::Signed(caller), s as u16, signatories, None, call, false, 0)
|
||||
verify {
|
||||
assert!(Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
||||
assert!(!Calls::<T>::contains_key(call_hash));
|
||||
}
|
||||
|
||||
as_multi_create_store {
|
||||
@@ -88,6 +95,9 @@ benchmarks! {
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: as_multi(RawOrigin::Signed(caller), s as u16, signatories, None, call, true, 0)
|
||||
verify {
|
||||
assert!(Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
||||
@@ -108,13 +118,43 @@ benchmarks! {
|
||||
let timepoint = Multisig::<T>::timepoint();
|
||||
// Create the multi, storing for worst case
|
||||
Multisig::<T>::as_multi(RawOrigin::Signed(caller).into(), s as u16, signatories, None, call.clone(), true, 0)?;
|
||||
assert!(Calls::<T>::contains_key(call_hash));
|
||||
let caller2 = signatories2.remove(0);
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller2);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: as_multi(RawOrigin::Signed(caller2), s as u16, signatories2, Some(timepoint), call, false, 0)
|
||||
verify {
|
||||
let multisig = Multisigs::<T>::get(multi_account_id, call_hash).ok_or("multisig not created")?;
|
||||
assert_eq!(multisig.approvals.len(), 2);
|
||||
}
|
||||
|
||||
as_multi_approve_store {
|
||||
// Signatories, need at least 3 people (so we don't complete the multisig)
|
||||
let s in 3 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let call_hash = blake2_256(&call);
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let mut signatories2 = signatories.clone();
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
// before the call, get the timepoint
|
||||
let timepoint = Multisig::<T>::timepoint();
|
||||
// Create the multi, not storing
|
||||
Multisig::<T>::as_multi(RawOrigin::Signed(caller).into(), s as u16, signatories, None, call.clone(), false, 0)?;
|
||||
assert!(!Calls::<T>::contains_key(call_hash));
|
||||
let caller2 = signatories2.remove(0);
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller2);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: as_multi(RawOrigin::Signed(caller2), s as u16, signatories2, Some(timepoint), call, true, 0)
|
||||
verify {
|
||||
let multisig = Multisigs::<T>::get(multi_account_id, call_hash).ok_or("multisig not created")?;
|
||||
assert_eq!(multisig.approvals.len(), 2);
|
||||
assert!(Calls::<T>::contains_key(call_hash));
|
||||
}
|
||||
|
||||
as_multi_complete {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
@@ -138,6 +178,9 @@ benchmarks! {
|
||||
}
|
||||
let caller2 = signatories2.remove(0);
|
||||
assert!(Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller2);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: as_multi(RawOrigin::Signed(caller2), s as u16, signatories2, Some(timepoint), call, false, Weight::max_value())
|
||||
verify {
|
||||
assert!(!Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
@@ -146,12 +189,15 @@ benchmarks! {
|
||||
approve_as_multi_create {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
// Transaction Length, not a component
|
||||
let z = 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
let call_hash = blake2_256(&call);
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
// Create the multi
|
||||
}: approve_as_multi(RawOrigin::Signed(caller), s as u16, signatories, None, call_hash, 0)
|
||||
verify {
|
||||
@@ -161,8 +207,8 @@ benchmarks! {
|
||||
approve_as_multi_approve {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
// Transaction Length, not a component
|
||||
let z = 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let mut signatories2 = signatories.clone();
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
@@ -181,6 +227,9 @@ benchmarks! {
|
||||
0
|
||||
)?;
|
||||
let caller2 = signatories2.remove(0);
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller2);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: approve_as_multi(RawOrigin::Signed(caller2), s as u16, signatories2, Some(timepoint), call_hash, 0)
|
||||
verify {
|
||||
let multisig = Multisigs::<T>::get(multi_account_id, call_hash).ok_or("multisig not created")?;
|
||||
@@ -190,8 +239,8 @@ benchmarks! {
|
||||
approve_as_multi_complete {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
// Transaction Length, not a component
|
||||
let z = 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let mut signatories2 = signatories.clone();
|
||||
@@ -211,6 +260,9 @@ benchmarks! {
|
||||
}
|
||||
let caller2 = signatories2.remove(0);
|
||||
assert!(Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller2);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: approve_as_multi(
|
||||
RawOrigin::Signed(caller2),
|
||||
s as u16,
|
||||
@@ -226,8 +278,8 @@ benchmarks! {
|
||||
cancel_as_multi {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
// Transaction Length, not a component
|
||||
let z = 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
@@ -237,30 +289,13 @@ benchmarks! {
|
||||
let o = RawOrigin::Signed(caller.clone()).into();
|
||||
Multisig::<T>::as_multi(o, s as u16, signatories.clone(), None, call.clone(), true, 0)?;
|
||||
assert!(Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
}: _(RawOrigin::Signed(caller), s as u16, signatories, timepoint, call_hash)
|
||||
verify {
|
||||
assert!(!Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
||||
}
|
||||
|
||||
cancel_as_multi_store {
|
||||
// Signatories, need at least 2 people
|
||||
let s in 2 .. T::MaxSignatories::get() as u32;
|
||||
// Transaction Length
|
||||
let z in 0 .. 10_000;
|
||||
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
||||
let multi_account_id = Multisig::<T>::multi_account_id(&signatories, s.try_into().unwrap());
|
||||
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
||||
T::Currency::make_free_balance_be(&caller, BalanceOf::<T>::max_value());
|
||||
let call_hash = blake2_256(&call);
|
||||
let timepoint = Multisig::<T>::timepoint();
|
||||
// Create the multi
|
||||
let o = RawOrigin::Signed(caller.clone()).into();
|
||||
Multisig::<T>::as_multi(o, s as u16, signatories.clone(), None, call.clone(), true, 0)?;
|
||||
assert!(Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
assert!(Calls::<T>::contains_key(call_hash));
|
||||
}: cancel_as_multi(RawOrigin::Signed(caller), s as u16, signatories, timepoint, call_hash)
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
}: _(RawOrigin::Signed(caller), s as u16, signatories, timepoint, call_hash)
|
||||
verify {
|
||||
assert!(!Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
||||
assert!(!Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
||||
assert!(!Calls::<T>::contains_key(call_hash));
|
||||
}
|
||||
}
|
||||
@@ -278,12 +313,12 @@ mod tests {
|
||||
assert_ok!(test_benchmark_as_multi_create::<Test>());
|
||||
assert_ok!(test_benchmark_as_multi_create_store::<Test>());
|
||||
assert_ok!(test_benchmark_as_multi_approve::<Test>());
|
||||
assert_ok!(test_benchmark_as_multi_approve_store::<Test>());
|
||||
assert_ok!(test_benchmark_as_multi_complete::<Test>());
|
||||
assert_ok!(test_benchmark_approve_as_multi_create::<Test>());
|
||||
assert_ok!(test_benchmark_approve_as_multi_approve::<Test>());
|
||||
assert_ok!(test_benchmark_approve_as_multi_complete::<Test>());
|
||||
assert_ok!(test_benchmark_cancel_as_multi::<Test>());
|
||||
assert_ok!(test_benchmark_cancel_as_multi_store::<Test>());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user