mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-09 20:11:09 +00:00
Staking: Add deprecate_controller_batch AdminOrigin call (#2589)
Partially Addresses #2500 Adds a `deprecate_controller_batch` call to the staking pallet that is callable by `Root` and `StakingAdmin`. To be used for controller account deprecation and removed thereafter. Adds `MaxControllersDeprecationBatch` pallet constant that defines max possible deprecations per call. - [x] Add `deprecate_controller_batch` call, and `MaxControllersInDeprecationBatch` constant. - [x] Add tests, benchmark, weights. Tests that weight is only consumed if unique pair. - [x] Adds `StakingAdmin` origin to staking's `AdminOrigin` type in westend runtime. - [x] Determined that worst case 5,900 deprecations does fit into `maxBlock` `proofSize` and `refTime` in both normal and operational thresholds, meaning we can deprecate all controllers for each network in one call. ## Block Weights By querying `consts.system.blockWeights` we can see that the `deprecate_controller_batch` weights fit within the `normal` threshold on Polkadot. #### `controller_deprecation_batch` where i = 5900: #### Ref time: 69,933,325,300 #### Proof size: 21,040,390 ### Polkadot ``` // consts.query.blockWeights maxBlock: { refTime: 2,000,000,000,000 proofSize: 18,446,744,073,709,551,615 } normal: { maxExtrinsic: { refTime: 1,479,873,955,000 proofSize: 13,650,590,614,545,068,195 } maxTotal: { refTime: 1,500,000,000,000 proofSize: 13,835,058,055,282,163,711 } } ``` ### Kusama ``` // consts.query.blockWeights maxBlock: { refTime: 2,000,000,000,000 proofSize: 18,446,744,073,709,551,615 } normal: { maxExtrinsic: { refTime: 1,479,875,294,000 proofSize: 13,650,590,614,545,068,195 } maxTotal: { refTime: 1,500,000,000,000 proofSize: 13,835,058,055,282,163,711 } } ``` --------- Co-authored-by: command-bot <> Co-authored-by: Gonçalo Pestana <g6pestana@gmail.com>
This commit is contained in:
@@ -25,6 +25,7 @@ use codec::Decode;
|
||||
use frame_election_provider_support::{bounds::DataProviderBounds, SortedListProvider};
|
||||
use frame_support::{
|
||||
pallet_prelude::*,
|
||||
storage::bounded_vec::BoundedVec,
|
||||
traits::{Currency, Get, Imbalance, UnfilteredDispatchable},
|
||||
};
|
||||
use sp_runtime::{
|
||||
@@ -525,6 +526,39 @@ benchmarks! {
|
||||
assert_eq!(Invulnerables::<T>::get().len(), v as usize);
|
||||
}
|
||||
|
||||
deprecate_controller_batch {
|
||||
// We pass a dynamic number of controllers to the benchmark, up to
|
||||
// `MaxControllersInDeprecationBatch`.
|
||||
let i in 0 .. T::MaxControllersInDeprecationBatch::get();
|
||||
|
||||
let mut controllers: Vec<_> = vec![];
|
||||
let mut stashes: Vec<_> = vec![];
|
||||
for n in 0..i as u32 {
|
||||
let (stash, controller) = create_unique_stash_controller::<T>(
|
||||
n,
|
||||
100,
|
||||
RewardDestination::Staked,
|
||||
false
|
||||
)?;
|
||||
controllers.push(controller);
|
||||
stashes.push(stash);
|
||||
}
|
||||
let bounded_controllers: BoundedVec<_, T::MaxControllersInDeprecationBatch> =
|
||||
BoundedVec::try_from(controllers.clone()).unwrap();
|
||||
}: _(RawOrigin::Root, bounded_controllers)
|
||||
verify {
|
||||
for n in 0..i as u32 {
|
||||
let stash = &stashes[n as usize];
|
||||
let controller = &controllers[n as usize];
|
||||
// Ledger no longer keyed by controller.
|
||||
assert_eq!(Ledger::<T>::get(controller), None);
|
||||
// Bonded now maps to the stash.
|
||||
assert_eq!(Bonded::<T>::get(stash), Some(stash.clone()));
|
||||
// Ledger is now keyed by stash.
|
||||
assert_eq!(Ledger::<T>::get(stash).unwrap().stash, *stash);
|
||||
}
|
||||
}
|
||||
|
||||
force_unstake {
|
||||
// Slashing Spans
|
||||
let s in 0 .. MAX_SPANS;
|
||||
|
||||
Reference in New Issue
Block a user