mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 07:58:00 +00:00
93e8ffed55
* Introduce preimages module in traits * Multisize Preimages * Len not actually necessary * Tweaks to the preimage API * Fixes * Get Scheduler building with new API * Scheduler tests pass * Bounded Scheduler 🎉 * Use Agenda holes and introduce IncompleteSince to avoid need to reschedule * Tests pass with new weight system * New benchmarks * Add missing file * Drop preimage when permenantly overeight * Drop preimage when permenantly overeight * Referenda uses latest preimage API * Testing ok * Adding tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * fmt Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add preimage migration Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Docs * Remove dbg * Refactor Democracy * Refactor Democracy * Add final MEL * Remove silly maps * Fixes * Minor refactor * Formatting * Fixes * Fixes * Fixes * Update frame/preimage/src/lib.rs Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> * Add migrations to Democracy * WIP Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Resolve conflicts Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Revert "Resolve conflicts" This reverts commit 734d66d69e54553471ffa54fa52e3e304dc8f106. * Undo wrong resolves... Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * WIP Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Make compile Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * massage clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * clippy annoyance Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * clippy annoyance Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix benchmarks Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * add missing file * Test <Preimage as QueryPreimage> Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Clippy harassment Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fixup tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Remove old stuff Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * fmt Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Test <Scheduler as Anon> trait functions Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update pallet-ui tests Why is this needed? Should not be the case unless master is broken... Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More scheduler trait test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Apply review suggestion Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Beauty fixes Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add Scheduler test migration_v3_to_v4_works Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Merge fixup Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Keep referenda benchmarks instantiatable Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update weights Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use new scheduler weight functions Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use new democracy weight functions Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use weight compare functions Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Update pallet-ui tests Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More renaming… Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * More renaming… Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add comment Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Implement OnRuntimeUpgrade for scheduler::v3_to_v4 migration Put the migration into a proper `MigrateToV4` struct and implement the OnRuntimeUpgrade hooks for it. Also move the test to use that instead. This should make it easier for adding it to Polkadot. Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Clippy Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Handle undecodable Agendas Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Remove trash Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use new OnRuntimeUpgrade functions Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * fix test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix BoundedSlice::truncate_from Co-authored-by: jakoblell Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix pre_upgrade hook return values Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Add more error logging Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Find too large preimages in the pre_upgrade hook Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Test that too large Calls in agendas are ignored Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Use new OnRuntimeUpgrade hooks Why did the CI not catch this?! Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * works fine - just more logs Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix staking migration Causing issues on Kusama... Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix UI tests No idea why this is needed. This is actually undoing an earlier change. Maybe the CI has different rustc versions!? Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Remove multisig's Calls (#12072) * Remove multisig's Calls * Multisig: Fix tests and re-introduce reserve logic (#12241) * Fix tests and re-introduce reserve logic * fix benches * add todo * remove irrelevant bench * [Feature] Add a migration that drains and refunds stored calls (#12313) * [Feature] Add a migration that drains and refunds stored calls * migration fixes * fixes * address review comments * consume the whole block weight * fix assertions * license header * fix interface Co-authored-by: parity-processbot <> Co-authored-by: parity-processbot <> Co-authored-by: Roman Useinov <roman.useinov@gmail.com> * Fix test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Fix multisig benchmarks Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * ".git/.scripts/bench-bot.sh" pallet dev pallet_democracy * ".git/.scripts/bench-bot.sh" pallet dev pallet_scheduler * ".git/.scripts/bench-bot.sh" pallet dev pallet_preimage Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: parity-processbot <> Co-authored-by: Roman Useinov <roman.useinov@gmail.com>
215 lines
9.2 KiB
Rust
215 lines
9.2 KiB
Rust
// This file is part of Substrate.
|
|
|
|
// Copyright (C) 2019-2022 Parity Technologies (UK) Ltd.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// Benchmarks for Multisig Pallet
|
|
|
|
#![cfg(feature = "runtime-benchmarks")]
|
|
|
|
use super::*;
|
|
use frame_benchmarking::{account, benchmarks};
|
|
use frame_system::RawOrigin;
|
|
use sp_runtime::traits::Bounded;
|
|
|
|
use crate::Pallet as Multisig;
|
|
|
|
const SEED: u32 = 0;
|
|
|
|
fn setup_multi<T: Config>(
|
|
s: u32,
|
|
z: u32,
|
|
) -> Result<(Vec<T::AccountId>, Box<<T as Config>::RuntimeCall>), &'static str> {
|
|
let mut signatories: Vec<T::AccountId> = Vec::new();
|
|
for i in 0..s {
|
|
let signatory = account("signatory", i, SEED);
|
|
// Give them some balance for a possible deposit
|
|
let balance = BalanceOf::<T>::max_value();
|
|
T::Currency::make_free_balance_be(&signatory, balance);
|
|
signatories.push(signatory);
|
|
}
|
|
signatories.sort();
|
|
// Must first convert to runtime call type.
|
|
let call: <T as Config>::RuntimeCall =
|
|
frame_system::Call::<T>::remark { remark: vec![0; z as usize] }.into();
|
|
Ok((signatories, Box::new(call)))
|
|
}
|
|
|
|
benchmarks! {
|
|
as_multi_threshold_1 {
|
|
// Transaction Length
|
|
let z in 0 .. 10_000;
|
|
let max_signatories = T::MaxSignatories::get().into();
|
|
let (mut signatories, _) = setup_multi::<T>(max_signatories, z)?;
|
|
let call: <T as Config>::RuntimeCall = frame_system::Call::<T>::remark {
|
|
remark: vec![0; z as usize]
|
|
}.into();
|
|
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.
|
|
}
|
|
|
|
as_multi_create {
|
|
// Signatories, need at least 2 total 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 call_hash = call.using_encoded(blake2_256);
|
|
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, Weight::zero())
|
|
verify {
|
|
assert!(Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
|
}
|
|
|
|
as_multi_approve {
|
|
// 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 = call.using_encoded(blake2_256);
|
|
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
|
|
Multisig::<T>::as_multi(RawOrigin::Signed(caller).into(), s as u16, signatories, None, call.clone(), Weight::zero())?;
|
|
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, Weight::zero())
|
|
verify {
|
|
let multisig = Multisigs::<T>::get(multi_account_id, call_hash).ok_or("multisig not created")?;
|
|
assert_eq!(multisig.approvals.len(), 2);
|
|
}
|
|
|
|
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;
|
|
let (mut signatories, call) = setup_multi::<T>(s, z)?;
|
|
let call_hash = call.using_encoded(blake2_256);
|
|
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
|
|
Multisig::<T>::as_multi(RawOrigin::Signed(caller).into(), s as u16, signatories, None, call.clone(), Weight::zero())?;
|
|
// Everyone except the first person approves
|
|
for i in 1 .. s - 1 {
|
|
let mut signatories_loop = signatories2.clone();
|
|
let caller_loop = signatories_loop.remove(i as usize);
|
|
let o = RawOrigin::Signed(caller_loop).into();
|
|
Multisig::<T>::as_multi(o, s as u16, signatories_loop, Some(timepoint), call.clone(), Weight::zero())?;
|
|
}
|
|
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, Weight::MAX)
|
|
verify {
|
|
assert!(!Multisigs::<T>::contains_key(&multi_account_id, call_hash));
|
|
}
|
|
|
|
approve_as_multi_create {
|
|
// Signatories, need at least 2 people
|
|
let s in 2 .. T::MaxSignatories::get() as u32;
|
|
// 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 = call.using_encoded(blake2_256);
|
|
// 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, Weight::zero())
|
|
verify {
|
|
assert!(Multisigs::<T>::contains_key(multi_account_id, call_hash));
|
|
}
|
|
|
|
approve_as_multi_approve {
|
|
// Signatories, need at least 2 people
|
|
let s in 2 .. T::MaxSignatories::get() as u32;
|
|
// 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());
|
|
let caller = signatories.pop().ok_or("signatories should have len 2 or more")?;
|
|
let call_hash = call.using_encoded(blake2_256);
|
|
// before the call, get the timepoint
|
|
let timepoint = Multisig::<T>::timepoint();
|
|
// Create the multi
|
|
Multisig::<T>::as_multi(
|
|
RawOrigin::Signed(caller).into(),
|
|
s as u16,
|
|
signatories,
|
|
None,
|
|
call,
|
|
Weight::zero()
|
|
)?;
|
|
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, Weight::zero())
|
|
verify {
|
|
let multisig = Multisigs::<T>::get(multi_account_id, call_hash).ok_or("multisig not created")?;
|
|
assert_eq!(multisig.approvals.len(), 2);
|
|
}
|
|
|
|
cancel_as_multi {
|
|
// Signatories, need at least 2 people
|
|
let s in 2 .. T::MaxSignatories::get() as u32;
|
|
// 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 = call.using_encoded(blake2_256);
|
|
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, Weight::zero())?;
|
|
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(&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));
|
|
}
|
|
|
|
impl_benchmark_test_suite!(Multisig, crate::tests::new_test_ext(), crate::tests::Test);
|
|
}
|