mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 20:47:56 +00:00
Bound staking storage items (#12230)
* replace pallet level unboundedness to individual storage items * bound structs * bounding history depth * defensive error * use the era history depth from config * clean up history depth from storage in v11 * keep the name HistoryDepth for the new configuration value * use u32 for history depth in node runtime * improve doc comments * add HistoryDepth to mock runtimes with pallet-staking * rustfmt * refactor and doc improve * apply re-benchmarked weight for staking * pr feedback improvements * test for claimed rewards following the expected bounds * refactor test to calculate first and last reward era programmatically * verify previous eras cannot be claimed * add migration v12 * ".git/.scripts/bench-bot.sh" pallet dev pallet_staking * fix compiler error * corrupting history depth does not lead to catastrophic issue * fix new line * remove unused import * fmt * add test to document scenario where history depth is reduced without migration * fmt * Update frame/staking/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/staking/src/migrations.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * doc for all storage items bounded by HistoryDepth * Update frame/staking/src/pallet/mod.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/staking/src/tests.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * pr feedback fixes * Update frame/staking/src/tests.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * remove extra checks * fix merge * fmt Co-authored-by: command-bot <> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: kianenigma <kian@parity.io>
This commit is contained in:
@@ -660,25 +660,6 @@ benchmarks! {
|
||||
assert!(original_bonded < new_bonded);
|
||||
}
|
||||
|
||||
set_history_depth {
|
||||
let e in 1 .. 100;
|
||||
HistoryDepth::<T>::put(e);
|
||||
CurrentEra::<T>::put(e);
|
||||
let dummy = || -> T::AccountId { codec::Decode::decode(&mut TrailingZeroInput::zeroes()).unwrap() };
|
||||
for i in 0 .. e {
|
||||
<ErasStakers<T>>::insert(i, dummy(), Exposure::<T::AccountId, BalanceOf<T>>::default());
|
||||
<ErasStakersClipped<T>>::insert(i, dummy(), Exposure::<T::AccountId, BalanceOf<T>>::default());
|
||||
<ErasValidatorPrefs<T>>::insert(i, dummy(), ValidatorPrefs::default());
|
||||
<ErasValidatorReward<T>>::insert(i, BalanceOf::<T>::one());
|
||||
<ErasRewardPoints<T>>::insert(i, EraRewardPoints::<T::AccountId>::default());
|
||||
<ErasTotalStake<T>>::insert(i, BalanceOf::<T>::one());
|
||||
ErasStartSessionIndex::<T>::insert(i, i);
|
||||
}
|
||||
}: _(RawOrigin::Root, EraIndex::zero(), u32::MAX)
|
||||
verify {
|
||||
assert_eq!(HistoryDepth::<T>::get(), 0);
|
||||
}
|
||||
|
||||
reap_stash {
|
||||
let s in 1 .. MAX_SPANS;
|
||||
// clean up any existing state.
|
||||
@@ -698,7 +679,7 @@ benchmarks! {
|
||||
active: T::Currency::minimum_balance() - One::one(),
|
||||
total: T::Currency::minimum_balance() - One::one(),
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
};
|
||||
Ledger::<T>::insert(&controller, l);
|
||||
|
||||
|
||||
@@ -299,12 +299,12 @@ pub mod weights;
|
||||
|
||||
mod pallet;
|
||||
|
||||
use codec::{Decode, Encode, HasCompact};
|
||||
use codec::{Decode, Encode, HasCompact, MaxEncodedLen};
|
||||
use frame_support::{
|
||||
parameter_types,
|
||||
traits::{Currency, Defensive, Get},
|
||||
weights::Weight,
|
||||
BoundedVec, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound,
|
||||
BoundedVec, CloneNoBound, EqNoBound, PartialEqNoBound, RuntimeDebugNoBound,
|
||||
};
|
||||
use scale_info::TypeInfo;
|
||||
use sp_runtime::{
|
||||
@@ -354,7 +354,7 @@ parameter_types! {
|
||||
}
|
||||
|
||||
/// Information regarding the active era (era in used in session).
|
||||
#[derive(Encode, Decode, RuntimeDebug, TypeInfo)]
|
||||
#[derive(Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
pub struct ActiveEraInfo {
|
||||
/// Index of era.
|
||||
pub index: EraIndex,
|
||||
@@ -395,7 +395,7 @@ pub enum StakerStatus<AccountId> {
|
||||
}
|
||||
|
||||
/// A destination account for payment.
|
||||
#[derive(PartialEq, Eq, Copy, Clone, Encode, Decode, RuntimeDebug, TypeInfo)]
|
||||
#[derive(PartialEq, Eq, Copy, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
pub enum RewardDestination<AccountId> {
|
||||
/// Pay into the stash account, increasing the amount at stake accordingly.
|
||||
Staked,
|
||||
@@ -416,7 +416,7 @@ impl<AccountId> Default for RewardDestination<AccountId> {
|
||||
}
|
||||
|
||||
/// Preference of what happens regarding validation.
|
||||
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, Default)]
|
||||
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, Default, MaxEncodedLen)]
|
||||
pub struct ValidatorPrefs {
|
||||
/// Reward that validator takes up-front; only the rest is split between themselves and
|
||||
/// nominators.
|
||||
@@ -429,8 +429,8 @@ pub struct ValidatorPrefs {
|
||||
}
|
||||
|
||||
/// Just a Balance/BlockNumber tuple to encode when a chunk of funds will be unlocked.
|
||||
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)]
|
||||
pub struct UnlockChunk<Balance: HasCompact> {
|
||||
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
pub struct UnlockChunk<Balance: HasCompact + MaxEncodedLen> {
|
||||
/// Amount of funds to be unlocked.
|
||||
#[codec(compact)]
|
||||
value: Balance,
|
||||
@@ -440,7 +440,16 @@ pub struct UnlockChunk<Balance: HasCompact> {
|
||||
}
|
||||
|
||||
/// The ledger of a (bonded) stash.
|
||||
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebugNoBound, TypeInfo)]
|
||||
#[derive(
|
||||
PartialEqNoBound,
|
||||
EqNoBound,
|
||||
CloneNoBound,
|
||||
Encode,
|
||||
Decode,
|
||||
RuntimeDebugNoBound,
|
||||
TypeInfo,
|
||||
MaxEncodedLen,
|
||||
)]
|
||||
#[scale_info(skip_type_params(T))]
|
||||
pub struct StakingLedger<T: Config> {
|
||||
/// The stash account whose balance is actually locked and at stake.
|
||||
@@ -459,7 +468,7 @@ pub struct StakingLedger<T: Config> {
|
||||
pub unlocking: BoundedVec<UnlockChunk<BalanceOf<T>>, MaxUnlockingChunks>,
|
||||
/// List of eras for which the stakers behind a validator have claimed rewards. Only updated
|
||||
/// for validators.
|
||||
pub claimed_rewards: Vec<EraIndex>,
|
||||
pub claimed_rewards: BoundedVec<EraIndex, T::HistoryDepth>,
|
||||
}
|
||||
|
||||
impl<T: Config> StakingLedger<T> {
|
||||
@@ -470,7 +479,7 @@ impl<T: Config> StakingLedger<T> {
|
||||
total: Zero::zero(),
|
||||
active: Zero::zero(),
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -676,7 +685,9 @@ impl<T: Config> StakingLedger<T> {
|
||||
}
|
||||
|
||||
/// A record of the nominations made by a specific account.
|
||||
#[derive(PartialEqNoBound, EqNoBound, Clone, Encode, Decode, RuntimeDebugNoBound, TypeInfo)]
|
||||
#[derive(
|
||||
PartialEqNoBound, EqNoBound, Clone, Encode, Decode, RuntimeDebugNoBound, TypeInfo, MaxEncodedLen,
|
||||
)]
|
||||
#[codec(mel_bound())]
|
||||
#[scale_info(skip_type_params(T))]
|
||||
pub struct Nominations<T: Config> {
|
||||
@@ -850,7 +861,7 @@ impl<Balance: AtLeast32BitUnsigned + Clone, T: Get<&'static PiecewiseLinear<'sta
|
||||
}
|
||||
|
||||
/// Mode of era-forcing.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum Forcing {
|
||||
/// Not forcing anything - just let whatever happen.
|
||||
@@ -874,7 +885,7 @@ impl Default for Forcing {
|
||||
// A value placed in storage that represents the current version of the Staking storage. This value
|
||||
// is used by the `on_runtime_upgrade` logic to determine whether we run storage migration logic.
|
||||
// This should match directly with the semantic versions of the Rust crate.
|
||||
#[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)]
|
||||
#[derive(Encode, Decode, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
|
||||
enum Releases {
|
||||
V1_0_0Ancient,
|
||||
V2_0_0,
|
||||
@@ -887,6 +898,7 @@ enum Releases {
|
||||
V9_0_0, // inject validators into `VoterList` as well.
|
||||
V10_0_0, // remove `EarliestUnappliedSlash`.
|
||||
V11_0_0, // Move pallet storage prefix, e.g. BagsList -> VoterBagsList
|
||||
V12_0_0, // remove `HistoryDepth`.
|
||||
}
|
||||
|
||||
impl Default for Releases {
|
||||
|
||||
@@ -20,6 +20,53 @@ use super::*;
|
||||
use frame_election_provider_support::SortedListProvider;
|
||||
use frame_support::traits::OnRuntimeUpgrade;
|
||||
|
||||
pub mod v12 {
|
||||
use super::*;
|
||||
use frame_support::{pallet_prelude::ValueQuery, storage_alias};
|
||||
|
||||
#[storage_alias]
|
||||
type HistoryDepth<T: Config> = StorageValue<Pallet<T>, u32, ValueQuery>;
|
||||
|
||||
/// Clean up `HistoryDepth` from storage.
|
||||
///
|
||||
/// We will be depending on the configurable value of `HistoryDepth` post
|
||||
/// this release.
|
||||
pub struct MigrateToV12<T>(sp_std::marker::PhantomData<T>);
|
||||
impl<T: Config> OnRuntimeUpgrade for MigrateToV12<T> {
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn pre_upgrade() -> Result<Vec<u8>, &'static str> {
|
||||
frame_support::ensure!(
|
||||
T::HistoryDepth::get() == HistoryDepth::<T>::get(),
|
||||
"Provided value of HistoryDepth should be same as the existing storage value"
|
||||
);
|
||||
|
||||
Ok(Default::default())
|
||||
}
|
||||
|
||||
fn on_runtime_upgrade() -> frame_support::weights::Weight {
|
||||
if StorageVersion::<T>::get() == Releases::V11_0_0 {
|
||||
HistoryDepth::<T>::kill();
|
||||
StorageVersion::<T>::put(Releases::V12_0_0);
|
||||
|
||||
log!(info, "v12 applied successfully");
|
||||
T::DbWeight::get().reads_writes(1, 2)
|
||||
} else {
|
||||
log!(warn, "Skipping v12, should be removed");
|
||||
T::DbWeight::get().reads(1)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
|
||||
frame_support::ensure!(
|
||||
StorageVersion::<T>::get() == crate::Releases::V12_0_0,
|
||||
"v12 not applied"
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod v11 {
|
||||
use super::*;
|
||||
use frame_support::{
|
||||
@@ -82,11 +129,6 @@ pub mod v11 {
|
||||
|
||||
#[cfg(feature = "try-runtime")]
|
||||
fn post_upgrade(_state: Vec<u8>) -> Result<(), &'static str> {
|
||||
frame_support::ensure!(
|
||||
StorageVersion::<T>::get() == crate::Releases::V11_0_0,
|
||||
"wrong version after the upgrade"
|
||||
);
|
||||
|
||||
let old_pallet_name = N::get();
|
||||
let new_pallet_name = <P as PalletInfoAccess>::name();
|
||||
|
||||
|
||||
@@ -236,6 +236,7 @@ const THRESHOLDS: [sp_npos_elections::VoteWeight; 9] =
|
||||
parameter_types! {
|
||||
pub static BagThresholds: &'static [sp_npos_elections::VoteWeight] = &THRESHOLDS;
|
||||
pub static MaxNominations: u32 = 16;
|
||||
pub static HistoryDepth: u32 = 80;
|
||||
pub static RewardOnUnbalanceWasCalled: bool = false;
|
||||
pub static LedgerSlashPerEra: (BalanceOf<Test>, BTreeMap<EraIndex, BalanceOf<Test>>) = (Zero::zero(), BTreeMap::new());
|
||||
}
|
||||
@@ -301,6 +302,7 @@ impl crate::pallet::pallet::Config for Test {
|
||||
type VoterList = VoterBagsList;
|
||||
type TargetList = UseValidatorsMap<Self>;
|
||||
type MaxUnlockingChunks = ConstU32<32>;
|
||||
type HistoryDepth = HistoryDepth;
|
||||
type OnStakerSlash = OnStakerSlashMock<Test>;
|
||||
type BenchmarkingConfig = TestBenchmarkingConfig;
|
||||
type WeightInfo = ();
|
||||
|
||||
@@ -25,8 +25,8 @@ use frame_support::{
|
||||
dispatch::WithPostDispatchInfo,
|
||||
pallet_prelude::*,
|
||||
traits::{
|
||||
Currency, CurrencyToVote, Defensive, EstimateNextNewSession, Get, Imbalance,
|
||||
LockableCurrency, OnUnbalanced, UnixTime, WithdrawReasons,
|
||||
Currency, CurrencyToVote, Defensive, DefensiveResult, EstimateNextNewSession, Get,
|
||||
Imbalance, LockableCurrency, OnUnbalanced, UnixTime, WithdrawReasons,
|
||||
},
|
||||
weights::Weight,
|
||||
};
|
||||
@@ -101,7 +101,7 @@ impl<T: Config> Pallet<T> {
|
||||
Error::<T>::InvalidEraToReward
|
||||
.with_weight(T::WeightInfo::payout_stakers_alive_staked(0))
|
||||
})?;
|
||||
let history_depth = Self::history_depth();
|
||||
let history_depth = T::HistoryDepth::get();
|
||||
ensure!(
|
||||
era <= current_era && era >= current_era.saturating_sub(history_depth),
|
||||
Error::<T>::InvalidEraToReward
|
||||
@@ -123,11 +123,18 @@ impl<T: Config> Pallet<T> {
|
||||
ledger
|
||||
.claimed_rewards
|
||||
.retain(|&x| x >= current_era.saturating_sub(history_depth));
|
||||
|
||||
match ledger.claimed_rewards.binary_search(&era) {
|
||||
Ok(_) =>
|
||||
return Err(Error::<T>::AlreadyClaimed
|
||||
.with_weight(T::WeightInfo::payout_stakers_alive_staked(0))),
|
||||
Err(pos) => ledger.claimed_rewards.insert(pos, era),
|
||||
Err(pos) => ledger
|
||||
.claimed_rewards
|
||||
.try_insert(pos, era)
|
||||
// Since we retain era entries in `claimed_rewards` only upto
|
||||
// `HistoryDepth`, following bound is always expected to be
|
||||
// satisfied.
|
||||
.defensive_map_err(|_| Error::<T>::BoundNotMet)?,
|
||||
}
|
||||
|
||||
let exposure = <ErasStakersClipped<T>>::get(&era, &ledger.stash);
|
||||
@@ -417,7 +424,7 @@ impl<T: Config> Pallet<T> {
|
||||
ErasStartSessionIndex::<T>::insert(&new_planned_era, &start_session_index);
|
||||
|
||||
// Clean old era information.
|
||||
if let Some(old_era) = new_planned_era.checked_sub(Self::history_depth() + 1) {
|
||||
if let Some(old_era) = new_planned_era.checked_sub(T::HistoryDepth::get() + 1) {
|
||||
Self::clear_era_information(old_era);
|
||||
}
|
||||
|
||||
@@ -966,7 +973,7 @@ impl<T: Config> ElectionDataProvider for Pallet<T> {
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
},
|
||||
);
|
||||
|
||||
@@ -984,7 +991,7 @@ impl<T: Config> ElectionDataProvider for Pallet<T> {
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
},
|
||||
);
|
||||
Self::do_add_validator(
|
||||
@@ -1025,7 +1032,7 @@ impl<T: Config> ElectionDataProvider for Pallet<T> {
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
},
|
||||
);
|
||||
Self::do_add_validator(
|
||||
@@ -1046,7 +1053,7 @@ impl<T: Config> ElectionDataProvider for Pallet<T> {
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: Default::default(),
|
||||
},
|
||||
);
|
||||
Self::do_add_nominator(
|
||||
|
||||
@@ -22,10 +22,12 @@ use frame_support::{
|
||||
dispatch::Codec,
|
||||
pallet_prelude::*,
|
||||
traits::{
|
||||
Currency, CurrencyToVote, Defensive, DefensiveSaturating, EnsureOrigin,
|
||||
EstimateNextNewSession, Get, LockIdentifier, LockableCurrency, OnUnbalanced, UnixTime,
|
||||
Currency, CurrencyToVote, Defensive, DefensiveResult, DefensiveSaturating, EnsureOrigin,
|
||||
EstimateNextNewSession, Get, LockIdentifier, LockableCurrency, OnUnbalanced, TryCollect,
|
||||
UnixTime,
|
||||
},
|
||||
weights::Weight,
|
||||
BoundedVec,
|
||||
};
|
||||
use frame_system::{ensure_root, ensure_signed, pallet_prelude::*};
|
||||
use sp_runtime::{
|
||||
@@ -58,7 +60,6 @@ pub mod pallet {
|
||||
|
||||
#[pallet::pallet]
|
||||
#[pallet::generate_store(pub(crate) trait Store)]
|
||||
#[pallet::without_storage_info]
|
||||
pub struct Pallet<T>(_);
|
||||
|
||||
/// Possible operations on the configuration values of this pallet.
|
||||
@@ -124,6 +125,28 @@ pub mod pallet {
|
||||
#[pallet::constant]
|
||||
type MaxNominations: Get<u32>;
|
||||
|
||||
/// Number of eras to keep in history.
|
||||
///
|
||||
/// Following information is kept for eras in `[current_era -
|
||||
/// HistoryDepth, current_era]`: `ErasStakers`, `ErasStakersClipped`,
|
||||
/// `ErasValidatorPrefs`, `ErasValidatorReward`, `ErasRewardPoints`,
|
||||
/// `ErasTotalStake`, `ErasStartSessionIndex`,
|
||||
/// `StakingLedger.claimed_rewards`.
|
||||
///
|
||||
/// Must be more than the number of eras delayed by session.
|
||||
/// I.e. active era must always be in history. I.e. `active_era >
|
||||
/// current_era - history_depth` must be guaranteed.
|
||||
///
|
||||
/// If migrating an existing pallet from storage value to config value,
|
||||
/// this should be set to same value or greater as in storage.
|
||||
///
|
||||
/// Note: `HistoryDepth` is used as the upper bound for the `BoundedVec`
|
||||
/// item `StakingLedger.claimed_rewards`. Setting this value lower than
|
||||
/// the existing value can lead to inconsistencies and will need to be
|
||||
/// handled properly in a migration.
|
||||
#[pallet::constant]
|
||||
type HistoryDepth: Get<u32>;
|
||||
|
||||
/// Tokens have been minted and are unused for validator-reward.
|
||||
/// See [Era payout](./index.html#era-payout).
|
||||
type RewardRemainder: OnUnbalanced<NegativeImbalanceOf<Self>>;
|
||||
@@ -230,22 +253,6 @@ pub mod pallet {
|
||||
type WeightInfo: WeightInfo;
|
||||
}
|
||||
|
||||
#[pallet::type_value]
|
||||
pub(crate) fn HistoryDepthOnEmpty() -> u32 {
|
||||
84u32
|
||||
}
|
||||
|
||||
/// Number of eras to keep in history.
|
||||
///
|
||||
/// Information is kept for eras in `[current_era - history_depth; current_era]`.
|
||||
///
|
||||
/// Must be more than the number of eras delayed by session otherwise. I.e. active era must
|
||||
/// always be in history. I.e. `active_era > current_era - history_depth` must be
|
||||
/// guaranteed.
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn history_depth)]
|
||||
pub(crate) type HistoryDepth<T> = StorageValue<_, u32, ValueQuery, HistoryDepthOnEmpty>;
|
||||
|
||||
/// The ideal number of staking participants.
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn validator_count)]
|
||||
@@ -261,6 +268,7 @@ pub mod pallet {
|
||||
/// invulnerables) and restricted to testnets.
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn invulnerables)]
|
||||
#[pallet::unbounded]
|
||||
pub type Invulnerables<T: Config> = StorageValue<_, Vec<T::AccountId>, ValueQuery>;
|
||||
|
||||
/// Map from all locked "stash" accounts to the controller account.
|
||||
@@ -364,6 +372,7 @@ pub mod pallet {
|
||||
/// If stakers hasn't been set or has been removed then empty exposure is returned.
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn eras_stakers)]
|
||||
#[pallet::unbounded]
|
||||
pub type ErasStakers<T: Config> = StorageDoubleMap<
|
||||
_,
|
||||
Twox64Concat,
|
||||
@@ -386,6 +395,7 @@ pub mod pallet {
|
||||
/// Is it removed after `HISTORY_DEPTH` eras.
|
||||
/// If stakers hasn't been set or has been removed then empty exposure is returned.
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
#[pallet::getter(fn eras_stakers_clipped)]
|
||||
pub type ErasStakersClipped<T: Config> = StorageDoubleMap<
|
||||
_,
|
||||
@@ -425,6 +435,7 @@ pub mod pallet {
|
||||
/// Rewards for the last `HISTORY_DEPTH` eras.
|
||||
/// If reward hasn't been set or has been removed then 0 reward is returned.
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
#[pallet::getter(fn eras_reward_points)]
|
||||
pub type ErasRewardPoints<T: Config> =
|
||||
StorageMap<_, Twox64Concat, EraIndex, EraRewardPoints<T::AccountId>, ValueQuery>;
|
||||
@@ -456,6 +467,7 @@ pub mod pallet {
|
||||
|
||||
/// All unapplied slashes that are queued for later.
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
pub type UnappliedSlashes<T: Config> = StorageMap<
|
||||
_,
|
||||
Twox64Concat,
|
||||
@@ -469,6 +481,7 @@ pub mod pallet {
|
||||
/// Must contains information for eras for the range:
|
||||
/// `[active_era - bounding_duration; active_era]`
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
pub(crate) type BondedEras<T: Config> =
|
||||
StorageValue<_, Vec<(EraIndex, SessionIndex)>, ValueQuery>;
|
||||
|
||||
@@ -491,6 +504,7 @@ pub mod pallet {
|
||||
|
||||
/// Slashing spans for stash accounts.
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
pub(crate) type SlashingSpans<T: Config> =
|
||||
StorageMap<_, Twox64Concat, T::AccountId, slashing::SlashingSpans>;
|
||||
|
||||
@@ -522,6 +536,7 @@ pub mod pallet {
|
||||
/// whether a given validator has previously offended using binary search. It gets cleared when
|
||||
/// the era ends.
|
||||
#[pallet::storage]
|
||||
#[pallet::unbounded]
|
||||
#[pallet::getter(fn offending_validators)]
|
||||
pub type OffendingValidators<T: Config> = StorageValue<_, Vec<(u32, bool)>, ValueQuery>;
|
||||
|
||||
@@ -540,7 +555,6 @@ pub mod pallet {
|
||||
|
||||
#[pallet::genesis_config]
|
||||
pub struct GenesisConfig<T: Config> {
|
||||
pub history_depth: u32,
|
||||
pub validator_count: u32,
|
||||
pub minimum_validator_count: u32,
|
||||
pub invulnerables: Vec<T::AccountId>,
|
||||
@@ -559,7 +573,6 @@ pub mod pallet {
|
||||
impl<T: Config> Default for GenesisConfig<T> {
|
||||
fn default() -> Self {
|
||||
GenesisConfig {
|
||||
history_depth: 84u32,
|
||||
validator_count: Default::default(),
|
||||
minimum_validator_count: Default::default(),
|
||||
invulnerables: Default::default(),
|
||||
@@ -578,7 +591,6 @@ pub mod pallet {
|
||||
#[pallet::genesis_build]
|
||||
impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
|
||||
fn build(&self) {
|
||||
HistoryDepth::<T>::put(self.history_depth);
|
||||
ValidatorCount::<T>::put(self.validator_count);
|
||||
MinimumValidatorCount::<T>::put(self.minimum_validator_count);
|
||||
Invulnerables::<T>::put(&self.invulnerables);
|
||||
@@ -729,6 +741,8 @@ pub mod pallet {
|
||||
TooManyValidators,
|
||||
/// Commission is too low. Must be at least `MinCommission`.
|
||||
CommissionTooLow,
|
||||
/// Some bound is not met.
|
||||
BoundNotMet,
|
||||
}
|
||||
|
||||
#[pallet::hooks]
|
||||
@@ -830,7 +844,7 @@ pub mod pallet {
|
||||
<Payee<T>>::insert(&stash, payee);
|
||||
|
||||
let current_era = CurrentEra::<T>::get().unwrap_or(0);
|
||||
let history_depth = Self::history_depth();
|
||||
let history_depth = T::HistoryDepth::get();
|
||||
let last_reward_era = current_era.saturating_sub(history_depth);
|
||||
|
||||
let stash_balance = T::Currency::free_balance(&stash);
|
||||
@@ -841,7 +855,12 @@ pub mod pallet {
|
||||
total: value,
|
||||
active: value,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: (last_reward_era..current_era).collect(),
|
||||
claimed_rewards: (last_reward_era..current_era)
|
||||
.try_collect()
|
||||
// Since last_reward_era is calculated as `current_era -
|
||||
// HistoryDepth`, following bound is always expected to be
|
||||
// satisfied.
|
||||
.defensive_map_err(|_| Error::<T>::BoundNotMet)?,
|
||||
};
|
||||
Self::update_ledger(&controller, &item);
|
||||
Ok(())
|
||||
@@ -1466,48 +1485,6 @@ pub mod pallet {
|
||||
Ok(Some(T::WeightInfo::rebond(removed_chunks)).into())
|
||||
}
|
||||
|
||||
/// Set `HistoryDepth` value. This function will delete any history information
|
||||
/// when `HistoryDepth` is reduced.
|
||||
///
|
||||
/// Parameters:
|
||||
/// - `new_history_depth`: The new history depth you would like to set.
|
||||
/// - `era_items_deleted`: The number of items that will be deleted by this dispatch. This
|
||||
/// should report all the storage items that will be deleted by clearing old era history.
|
||||
/// Needed to report an accurate weight for the dispatch. Trusted by `Root` to report an
|
||||
/// accurate number.
|
||||
///
|
||||
/// RuntimeOrigin must be root.
|
||||
///
|
||||
/// # <weight>
|
||||
/// - E: Number of history depths removed, i.e. 10 -> 7 = 3
|
||||
/// - Weight: O(E)
|
||||
/// - DB Weight:
|
||||
/// - Reads: Current Era, History Depth
|
||||
/// - Writes: History Depth
|
||||
/// - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs
|
||||
/// - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake,
|
||||
/// ErasStartSessionIndex
|
||||
/// # </weight>
|
||||
#[pallet::weight(T::WeightInfo::set_history_depth(*_era_items_deleted))]
|
||||
pub fn set_history_depth(
|
||||
origin: OriginFor<T>,
|
||||
#[pallet::compact] new_history_depth: EraIndex,
|
||||
#[pallet::compact] _era_items_deleted: u32,
|
||||
) -> DispatchResult {
|
||||
ensure_root(origin)?;
|
||||
if let Some(current_era) = Self::current_era() {
|
||||
HistoryDepth::<T>::mutate(|history_depth| {
|
||||
let last_kept = current_era.saturating_sub(*history_depth);
|
||||
let new_last_kept = current_era.saturating_sub(new_history_depth);
|
||||
for era_index in last_kept..new_last_kept {
|
||||
Self::clear_era_information(era_index);
|
||||
}
|
||||
*history_depth = new_history_depth
|
||||
})
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Remove all data structures concerning a staker/stash once it is at a state where it can
|
||||
/// be considered `dust` in the staking system. The requirements are:
|
||||
///
|
||||
|
||||
@@ -53,7 +53,7 @@ use crate::{
|
||||
BalanceOf, Config, Error, Exposure, NegativeImbalanceOf, Pallet, Perbill, SessionInterface,
|
||||
Store, UnappliedSlash,
|
||||
};
|
||||
use codec::{Decode, Encode};
|
||||
use codec::{Decode, Encode, MaxEncodedLen};
|
||||
use frame_support::{
|
||||
ensure,
|
||||
traits::{Currency, Defensive, Get, Imbalance, OnUnbalanced},
|
||||
@@ -182,7 +182,7 @@ impl SlashingSpans {
|
||||
}
|
||||
|
||||
/// A slashing-span record for a particular stash.
|
||||
#[derive(Encode, Decode, Default, TypeInfo)]
|
||||
#[derive(Encode, Decode, Default, TypeInfo, MaxEncodedLen)]
|
||||
pub(crate) struct SpanRecord<Balance> {
|
||||
slashed: Balance,
|
||||
paid_out: Balance,
|
||||
|
||||
@@ -148,14 +148,14 @@ fn basic_setup_works() {
|
||||
|
||||
// Account 10 controls the stash from account 11, which is 100 * balance_factor units
|
||||
assert_eq!(
|
||||
Staking::ledger(&10),
|
||||
Some(StakingLedger {
|
||||
Staking::ledger(&10).unwrap(),
|
||||
StakingLedger {
|
||||
stash: 11,
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
})
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
// Account 20 controls the stash from account 21, which is 200 * balance_factor units
|
||||
assert_eq!(
|
||||
@@ -165,7 +165,7 @@ fn basic_setup_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
// Account 1 does not control any stash
|
||||
@@ -188,7 +188,7 @@ fn basic_setup_works() {
|
||||
total: 500,
|
||||
active: 500,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]);
|
||||
@@ -433,7 +433,7 @@ fn staking_should_work() {
|
||||
total: 1500,
|
||||
active: 1500,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![0],
|
||||
claimed_rewards: bounded_vec![0],
|
||||
})
|
||||
);
|
||||
// e.g. it cannot reserve more than 500 that it has free from the total 2000
|
||||
@@ -1022,7 +1022,7 @@ fn reward_destination_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1045,7 +1045,7 @@ fn reward_destination_works() {
|
||||
total: 1000 + total_payout_0,
|
||||
active: 1000 + total_payout_0,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![0],
|
||||
claimed_rewards: bounded_vec![0],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1073,7 +1073,7 @@ fn reward_destination_works() {
|
||||
total: 1000 + total_payout_0,
|
||||
active: 1000 + total_payout_0,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![0, 1],
|
||||
claimed_rewards: bounded_vec![0, 1],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1102,7 +1102,7 @@ fn reward_destination_works() {
|
||||
total: 1000 + total_payout_0,
|
||||
active: 1000 + total_payout_0,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![0, 1, 2],
|
||||
claimed_rewards: bounded_vec![0, 1, 2],
|
||||
})
|
||||
);
|
||||
// Check that amount in staked account is NOT increased.
|
||||
@@ -1164,7 +1164,7 @@ fn bond_extra_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1181,7 +1181,7 @@ fn bond_extra_works() {
|
||||
total: 1000 + 100,
|
||||
active: 1000 + 100,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1195,7 +1195,7 @@ fn bond_extra_works() {
|
||||
total: 1000000,
|
||||
active: 1000000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
});
|
||||
@@ -1233,7 +1233,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -1251,7 +1251,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000 + 100,
|
||||
active: 1000 + 100,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
// Exposure is a snapshot! only updated after the next era update.
|
||||
@@ -1272,7 +1272,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000 + 100,
|
||||
active: 1000 + 100,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
// Exposure is now updated.
|
||||
@@ -1290,7 +1290,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000 + 100,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 1000, era: 2 + 3 }],
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -1303,7 +1303,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000 + 100,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 1000, era: 2 + 3 }],
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -1319,7 +1319,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 1000 + 100,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 1000, era: 2 + 3 }],
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -1335,7 +1335,7 @@ fn bond_extra_and_withdraw_unbonded_works() {
|
||||
total: 100,
|
||||
active: 100,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}),
|
||||
);
|
||||
})
|
||||
@@ -1405,7 +1405,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1424,7 +1424,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 900, era: 2 + 3 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1437,7 +1437,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1450,7 +1450,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 900, era: 5 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1463,7 +1463,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 600,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 400, era: 5 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1476,7 +1476,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1491,7 +1491,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 900, era: 5 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1504,7 +1504,7 @@ fn rebond_works() {
|
||||
total: 1000,
|
||||
active: 600,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 400, era: 5 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
})
|
||||
@@ -1531,7 +1531,7 @@ fn rebond_is_fifo() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1546,7 +1546,7 @@ fn rebond_is_fifo() {
|
||||
total: 1000,
|
||||
active: 600,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 400, era: 2 + 3 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1564,7 +1564,7 @@ fn rebond_is_fifo() {
|
||||
UnlockChunk { value: 400, era: 2 + 3 },
|
||||
UnlockChunk { value: 300, era: 3 + 3 },
|
||||
],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1583,7 +1583,7 @@ fn rebond_is_fifo() {
|
||||
UnlockChunk { value: 300, era: 3 + 3 },
|
||||
UnlockChunk { value: 200, era: 4 + 3 },
|
||||
],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1599,7 +1599,7 @@ fn rebond_is_fifo() {
|
||||
UnlockChunk { value: 400, era: 2 + 3 },
|
||||
UnlockChunk { value: 100, era: 3 + 3 },
|
||||
],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
})
|
||||
@@ -1628,7 +1628,7 @@ fn rebond_emits_right_value_in_event() {
|
||||
total: 1000,
|
||||
active: 100,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 900, era: 1 + 3 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1641,7 +1641,7 @@ fn rebond_emits_right_value_in_event() {
|
||||
total: 1000,
|
||||
active: 200,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 800, era: 1 + 3 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
// Event emitted should be correct
|
||||
@@ -1656,7 +1656,7 @@ fn rebond_emits_right_value_in_event() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
// Event emitted should be correct, only 800
|
||||
@@ -1692,7 +1692,7 @@ fn reward_to_stake_works() {
|
||||
total: 69,
|
||||
active: 69,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1756,7 +1756,7 @@ fn reap_stash_works() {
|
||||
total: 5,
|
||||
active: 5,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
},
|
||||
);
|
||||
|
||||
@@ -1891,7 +1891,7 @@ fn bond_with_no_staked_value() {
|
||||
active: 0,
|
||||
total: 5,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 5, era: 3 }],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
|
||||
@@ -2990,7 +2990,7 @@ fn staker_cannot_bail_deferred_slash() {
|
||||
active: 0,
|
||||
total: 500,
|
||||
stash: 101,
|
||||
claimed_rewards: Default::default(),
|
||||
claimed_rewards: bounded_vec![],
|
||||
unlocking: bounded_vec![UnlockChunk { era: 4u32, value: 500 }],
|
||||
}
|
||||
);
|
||||
@@ -3397,7 +3397,7 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() {
|
||||
// * double claim of one era fails
|
||||
ExtBuilder::default().nominate(true).build_and_execute(|| {
|
||||
// Consumed weight for all payout_stakers dispatches that fail
|
||||
let err_weight = weights::SubstrateWeight::<Test>::payout_stakers_alive_staked(0);
|
||||
let err_weight = <Test as Config>::WeightInfo::payout_stakers_alive_staked(0);
|
||||
|
||||
let init_balance_10 = Balances::total_balance(&10);
|
||||
let init_balance_100 = Balances::total_balance(&100);
|
||||
@@ -3432,7 +3432,7 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() {
|
||||
assert!(total_payout_2 != total_payout_0);
|
||||
assert!(total_payout_2 != total_payout_1);
|
||||
|
||||
mock::start_active_era(Staking::history_depth() + 1);
|
||||
mock::start_active_era(HistoryDepth::get() + 1);
|
||||
|
||||
let active_era = active_era();
|
||||
|
||||
@@ -3440,7 +3440,7 @@ fn claim_reward_at_the_last_era_and_no_double_claim_and_invalid_claim() {
|
||||
let current_era = Staking::current_era().unwrap();
|
||||
|
||||
// Last kept is 1:
|
||||
assert!(current_era - Staking::history_depth() == 1);
|
||||
assert!(current_era - HistoryDepth::get() == 1);
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 0),
|
||||
// Fail: Era out of history
|
||||
@@ -3604,25 +3604,6 @@ fn test_max_nominator_rewarded_per_validator_and_cant_steal_someone_else_reward(
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn set_history_depth_works() {
|
||||
ExtBuilder::default().build_and_execute(|| {
|
||||
mock::start_active_era(10);
|
||||
Staking::set_history_depth(RuntimeOrigin::root(), 20, 0).unwrap();
|
||||
assert!(<Staking as Store>::ErasTotalStake::contains_key(10 - 4));
|
||||
assert!(<Staking as Store>::ErasTotalStake::contains_key(10 - 5));
|
||||
Staking::set_history_depth(RuntimeOrigin::root(), 4, 0).unwrap();
|
||||
assert!(<Staking as Store>::ErasTotalStake::contains_key(10 - 4));
|
||||
assert!(!<Staking as Store>::ErasTotalStake::contains_key(10 - 5));
|
||||
Staking::set_history_depth(RuntimeOrigin::root(), 3, 0).unwrap();
|
||||
assert!(!<Staking as Store>::ErasTotalStake::contains_key(10 - 4));
|
||||
assert!(!<Staking as Store>::ErasTotalStake::contains_key(10 - 5));
|
||||
Staking::set_history_depth(RuntimeOrigin::root(), 8, 0).unwrap();
|
||||
assert!(!<Staking as Store>::ErasTotalStake::contains_key(10 - 4));
|
||||
assert!(!<Staking as Store>::ErasTotalStake::contains_key(10 - 5));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_payout_stakers() {
|
||||
// Test that payout_stakers work in general, including that only the top
|
||||
@@ -3686,7 +3667,7 @@ fn test_payout_stakers() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![1]
|
||||
claimed_rewards: bounded_vec![1]
|
||||
})
|
||||
);
|
||||
|
||||
@@ -3717,11 +3698,15 @@ fn test_payout_stakers() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: (1..=14).collect()
|
||||
claimed_rewards: (1..=14).collect::<Vec<_>>().try_into().unwrap()
|
||||
})
|
||||
);
|
||||
|
||||
for i in 16..100 {
|
||||
let last_era = 99;
|
||||
let history_depth = HistoryDepth::get();
|
||||
let expected_last_reward_era = last_era - 1;
|
||||
let expected_start_reward_era = last_era - history_depth;
|
||||
for i in 16..=last_era {
|
||||
Staking::reward_by_ids(vec![(11, 1)]);
|
||||
// compute and ensure the reward amount is greater than zero.
|
||||
let _ = current_total_payout_for_duration(reward_time_per_era());
|
||||
@@ -3729,8 +3714,16 @@ fn test_payout_stakers() {
|
||||
}
|
||||
|
||||
// We clean it up as history passes
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 15));
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 98));
|
||||
assert_ok!(Staking::payout_stakers(
|
||||
RuntimeOrigin::signed(1337),
|
||||
11,
|
||||
expected_start_reward_era
|
||||
));
|
||||
assert_ok!(Staking::payout_stakers(
|
||||
RuntimeOrigin::signed(1337),
|
||||
11,
|
||||
expected_last_reward_era
|
||||
));
|
||||
assert_eq!(
|
||||
Staking::ledger(&10),
|
||||
Some(StakingLedger {
|
||||
@@ -3738,7 +3731,7 @@ fn test_payout_stakers() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![15, 98]
|
||||
claimed_rewards: bounded_vec![expected_start_reward_era, expected_last_reward_era]
|
||||
})
|
||||
);
|
||||
|
||||
@@ -3753,7 +3746,13 @@ fn test_payout_stakers() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![15, 23, 42, 69, 98]
|
||||
claimed_rewards: bounded_vec![
|
||||
expected_start_reward_era,
|
||||
23,
|
||||
42,
|
||||
69,
|
||||
expected_last_reward_era
|
||||
]
|
||||
})
|
||||
);
|
||||
});
|
||||
@@ -3764,7 +3763,7 @@ fn payout_stakers_handles_basic_errors() {
|
||||
// Here we will test payouts handle all errors.
|
||||
ExtBuilder::default().has_stakers(false).build_and_execute(|| {
|
||||
// Consumed weight for all payout_stakers dispatches that fail
|
||||
let err_weight = weights::SubstrateWeight::<Test>::payout_stakers_alive_staked(0);
|
||||
let err_weight = <Test as Config>::WeightInfo::payout_stakers_alive_staked(0);
|
||||
|
||||
// Same setup as the test above
|
||||
let balance = 1000;
|
||||
@@ -3794,32 +3793,47 @@ fn payout_stakers_handles_basic_errors() {
|
||||
Error::<Test>::NotStash.with_weight(err_weight)
|
||||
);
|
||||
|
||||
for i in 3..100 {
|
||||
let last_era = 99;
|
||||
for i in 3..=last_era {
|
||||
Staking::reward_by_ids(vec![(11, 1)]);
|
||||
// compute and ensure the reward amount is greater than zero.
|
||||
let _ = current_total_payout_for_duration(reward_time_per_era());
|
||||
mock::start_active_era(i);
|
||||
}
|
||||
// We are at era 99, with history depth of 84
|
||||
// We should be able to payout era 15 through 98 (84 total eras), but not 14 or 99.
|
||||
|
||||
let history_depth = HistoryDepth::get();
|
||||
let expected_last_reward_era = last_era - 1;
|
||||
let expected_start_reward_era = last_era - history_depth;
|
||||
|
||||
// We are at era last_era=99. Given history_depth=80, we should be able
|
||||
// to payout era starting from expected_start_reward_era=19 through
|
||||
// expected_last_reward_era=98 (80 total eras), but not 18 or 99.
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 14),
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_start_reward_era - 1),
|
||||
Error::<Test>::InvalidEraToReward.with_weight(err_weight)
|
||||
);
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 99),
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_last_reward_era + 1),
|
||||
Error::<Test>::InvalidEraToReward.with_weight(err_weight)
|
||||
);
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 15));
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 98));
|
||||
assert_ok!(Staking::payout_stakers(
|
||||
RuntimeOrigin::signed(1337),
|
||||
11,
|
||||
expected_start_reward_era
|
||||
));
|
||||
assert_ok!(Staking::payout_stakers(
|
||||
RuntimeOrigin::signed(1337),
|
||||
11,
|
||||
expected_last_reward_era
|
||||
));
|
||||
|
||||
// Can't claim again
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 15),
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_start_reward_era),
|
||||
Error::<Test>::AlreadyClaimed.with_weight(err_weight)
|
||||
);
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, 98),
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(1337), 11, expected_last_reward_era),
|
||||
Error::<Test>::AlreadyClaimed.with_weight(err_weight)
|
||||
);
|
||||
});
|
||||
@@ -3944,7 +3958,7 @@ fn bond_during_era_correctly_populates_claimed_rewards() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
})
|
||||
);
|
||||
mock::start_active_era(5);
|
||||
@@ -3956,10 +3970,14 @@ fn bond_during_era_correctly_populates_claimed_rewards() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: (0..5).collect(),
|
||||
claimed_rewards: (0..5).collect::<Vec<_>>().try_into().unwrap(),
|
||||
})
|
||||
);
|
||||
mock::start_active_era(99);
|
||||
|
||||
// make sure only era upto history depth is stored
|
||||
let current_era = 99;
|
||||
let last_reward_era = 99 - HistoryDepth::get();
|
||||
mock::start_active_era(current_era);
|
||||
bond_validator(13, 12, 1000);
|
||||
assert_eq!(
|
||||
Staking::ledger(&12),
|
||||
@@ -3968,7 +3986,10 @@ fn bond_during_era_correctly_populates_claimed_rewards() {
|
||||
total: 1000,
|
||||
active: 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: (15..99).collect(),
|
||||
claimed_rewards: (last_reward_era..current_era)
|
||||
.collect::<Vec<_>>()
|
||||
.try_into()
|
||||
.unwrap(),
|
||||
})
|
||||
);
|
||||
});
|
||||
@@ -4213,7 +4234,7 @@ fn cannot_rebond_to_lower_than_ed() {
|
||||
total: 10 * 1000,
|
||||
active: 10 * 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4227,7 +4248,7 @@ fn cannot_rebond_to_lower_than_ed() {
|
||||
total: 10 * 1000,
|
||||
active: 0,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 10 * 1000, era: 3 }],
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4253,7 +4274,7 @@ fn cannot_bond_extra_to_lower_than_ed() {
|
||||
total: 10 * 1000,
|
||||
active: 10 * 1000,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4267,7 +4288,7 @@ fn cannot_bond_extra_to_lower_than_ed() {
|
||||
total: 10 * 1000,
|
||||
active: 0,
|
||||
unlocking: bounded_vec![UnlockChunk { value: 10 * 1000, era: 3 }],
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4294,7 +4315,7 @@ fn do_not_die_when_active_is_ed() {
|
||||
total: 1000 * ed,
|
||||
active: 1000 * ed,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
|
||||
@@ -4311,7 +4332,7 @@ fn do_not_die_when_active_is_ed() {
|
||||
total: ed,
|
||||
active: ed,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards: vec![]
|
||||
claimed_rewards: bounded_vec![],
|
||||
}
|
||||
);
|
||||
})
|
||||
@@ -5162,7 +5183,7 @@ fn proportional_slash_stop_slashing_if_remaining_zero() {
|
||||
active: 20,
|
||||
// we have some chunks, but they are not affected.
|
||||
unlocking: bounded_vec![c(1, 10), c(2, 10)],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
};
|
||||
|
||||
assert_eq!(BondingDuration::get(), 3);
|
||||
@@ -5180,7 +5201,7 @@ fn proportional_ledger_slash_works() {
|
||||
total: 10,
|
||||
active: 10,
|
||||
unlocking: bounded_vec![],
|
||||
claimed_rewards: vec![],
|
||||
claimed_rewards: bounded_vec![],
|
||||
};
|
||||
assert_eq!(BondingDuration::get(), 3);
|
||||
|
||||
@@ -5396,3 +5417,146 @@ fn proportional_ledger_slash_works() {
|
||||
BTreeMap::from([(4, 0), (5, value_slashed), (6, 0), (7, 0)])
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_bonding_era_cannot_be_claimed() {
|
||||
// Verifies initial conditions of mock
|
||||
ExtBuilder::default().nominate(false).build_and_execute(|| {
|
||||
let history_depth = HistoryDepth::get();
|
||||
// jump to some era above history_depth
|
||||
let mut current_era = history_depth + 10;
|
||||
let last_reward_era = current_era - 1;
|
||||
let start_reward_era = current_era - history_depth;
|
||||
|
||||
// put some money in stash=3 and controller=4.
|
||||
for i in 3..5 {
|
||||
let _ = Balances::make_free_balance_be(&i, 2000);
|
||||
}
|
||||
|
||||
mock::start_active_era(current_era);
|
||||
|
||||
// add a new candidate for being a validator. account 3 controlled by 4.
|
||||
assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 4, 1500, RewardDestination::Controller));
|
||||
|
||||
let claimed_rewards: BoundedVec<_, _> =
|
||||
(start_reward_era..=last_reward_era).collect::<Vec<_>>().try_into().unwrap();
|
||||
assert_eq!(
|
||||
Staking::ledger(&4).unwrap(),
|
||||
StakingLedger {
|
||||
stash: 3,
|
||||
total: 1500,
|
||||
active: 1500,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards,
|
||||
}
|
||||
);
|
||||
|
||||
// start next era
|
||||
current_era = current_era + 1;
|
||||
mock::start_active_era(current_era);
|
||||
|
||||
// claiming reward for last era in which validator was active works
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 1));
|
||||
|
||||
// consumed weight for all payout_stakers dispatches that fail
|
||||
let err_weight = <Test as Config>::WeightInfo::payout_stakers_alive_staked(0);
|
||||
// cannot claim rewards for an era before bonding occured as it is
|
||||
// already marked as claimed.
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 2),
|
||||
Error::<Test>::AlreadyClaimed.with_weight(err_weight)
|
||||
);
|
||||
|
||||
// decoding will fail now since Staking Ledger is in corrupt state
|
||||
HistoryDepth::set(history_depth - 1);
|
||||
assert_eq!(Staking::ledger(&4), None);
|
||||
|
||||
// make sure stakers still cannot claim rewards that they are not meant to
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 2),
|
||||
Error::<Test>::NotController
|
||||
);
|
||||
|
||||
// fix the corrupted state for post conditions check
|
||||
HistoryDepth::set(history_depth);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reducing_history_depth_without_migration() {
|
||||
// Verifies initial conditions of mock
|
||||
ExtBuilder::default().nominate(false).build_and_execute(|| {
|
||||
let original_history_depth = HistoryDepth::get();
|
||||
let mut current_era = original_history_depth + 10;
|
||||
let last_reward_era = current_era - 1;
|
||||
let start_reward_era = current_era - original_history_depth;
|
||||
|
||||
// put some money in (stash, controller)=(3,4),(5,6).
|
||||
for i in 3..7 {
|
||||
let _ = Balances::make_free_balance_be(&i, 2000);
|
||||
}
|
||||
|
||||
// start current era
|
||||
mock::start_active_era(current_era);
|
||||
|
||||
// add a new candidate for being a staker. account 3 controlled by 4.
|
||||
assert_ok!(Staking::bond(RuntimeOrigin::signed(3), 4, 1500, RewardDestination::Controller));
|
||||
|
||||
// all previous era before the bonding action should be marked as
|
||||
// claimed.
|
||||
let claimed_rewards: BoundedVec<_, _> =
|
||||
(start_reward_era..=last_reward_era).collect::<Vec<_>>().try_into().unwrap();
|
||||
assert_eq!(
|
||||
Staking::ledger(&4).unwrap(),
|
||||
StakingLedger {
|
||||
stash: 3,
|
||||
total: 1500,
|
||||
active: 1500,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards,
|
||||
}
|
||||
);
|
||||
|
||||
// next era
|
||||
current_era = current_era + 1;
|
||||
mock::start_active_era(current_era);
|
||||
|
||||
// claiming reward for last era in which validator was active works
|
||||
assert_ok!(Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 1));
|
||||
|
||||
// next era
|
||||
current_era = current_era + 1;
|
||||
mock::start_active_era(current_era);
|
||||
|
||||
// history_depth reduced without migration
|
||||
let history_depth = original_history_depth - 1;
|
||||
HistoryDepth::set(history_depth);
|
||||
// claiming reward does not work anymore
|
||||
assert_noop!(
|
||||
Staking::payout_stakers(RuntimeOrigin::signed(4), 3, current_era - 1),
|
||||
Error::<Test>::NotController
|
||||
);
|
||||
|
||||
// new stakers can still bond
|
||||
assert_ok!(Staking::bond(RuntimeOrigin::signed(5), 6, 1200, RewardDestination::Controller));
|
||||
|
||||
// new staking ledgers created will be bounded by the current history depth
|
||||
let last_reward_era = current_era - 1;
|
||||
let start_reward_era = current_era - history_depth;
|
||||
let claimed_rewards: BoundedVec<_, _> =
|
||||
(start_reward_era..=last_reward_era).collect::<Vec<_>>().try_into().unwrap();
|
||||
assert_eq!(
|
||||
Staking::ledger(&6).unwrap(),
|
||||
StakingLedger {
|
||||
stash: 5,
|
||||
total: 1200,
|
||||
active: 1200,
|
||||
unlocking: Default::default(),
|
||||
claimed_rewards,
|
||||
}
|
||||
);
|
||||
|
||||
// fix the corrupted state for post conditions check
|
||||
HistoryDepth::set(original_history_depth);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -18,22 +18,24 @@
|
||||
//! Autogenerated weights for pallet_staking
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
|
||||
//! DATE: 2022-05-24, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! DATE: 2022-09-19, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz`
|
||||
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
|
||||
|
||||
// Executed Command:
|
||||
// ./target/production/substrate
|
||||
// /home/benchbot/cargo_target_dir/production/substrate
|
||||
// benchmark
|
||||
// pallet
|
||||
// --chain=dev
|
||||
// --steps=50
|
||||
// --repeat=20
|
||||
// --pallet=pallet_staking
|
||||
// --extrinsic=*
|
||||
// --execution=wasm
|
||||
// --wasm-execution=compiled
|
||||
// --template=./.maintain/frame-weight-template.hbs
|
||||
// --heap-pages=4096
|
||||
// --pallet=pallet_staking
|
||||
// --chain=dev
|
||||
// --output=./frame/staking/src/weights.rs
|
||||
// --template=./.maintain/frame-weight-template.hbs
|
||||
|
||||
#![cfg_attr(rustfmt, rustfmt_skip)]
|
||||
#![allow(unused_parens)]
|
||||
@@ -65,7 +67,6 @@ pub trait WeightInfo {
|
||||
fn payout_stakers_dead_controller(n: u32, ) -> Weight;
|
||||
fn payout_stakers_alive_staked(n: u32, ) -> Weight;
|
||||
fn rebond(l: u32, ) -> Weight;
|
||||
fn set_history_depth(e: u32, ) -> Weight;
|
||||
fn reap_stash(s: u32, ) -> Weight;
|
||||
fn new_era(v: u32, n: u32, ) -> Weight;
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight;
|
||||
@@ -82,21 +83,20 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn bond() -> Weight {
|
||||
Weight::from_ref_time(43_992_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(5 as u64))
|
||||
Weight::from_ref_time(52_281_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(4 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(4 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
fn bond_extra() -> Weight {
|
||||
Weight::from_ref_time(75_827_000 as u64)
|
||||
Weight::from_ref_time(89_748_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(8 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(7 as u64))
|
||||
}
|
||||
@@ -106,11 +106,11 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
fn unbond() -> Weight {
|
||||
Weight::from_ref_time(81_075_000 as u64)
|
||||
Weight::from_ref_time(94_782_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(12 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(8 as u64))
|
||||
}
|
||||
@@ -118,10 +118,11 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn withdraw_unbonded_update(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(35_763_000 as u64)
|
||||
// Standard Error: 0
|
||||
.saturating_add(Weight::from_ref_time(57_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(44_499_000 as u64)
|
||||
// Standard Error: 387
|
||||
.saturating_add(Weight::from_ref_time(72_726 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(4 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as u64))
|
||||
}
|
||||
@@ -132,14 +133,17 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn withdraw_unbonded_kill(_s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(66_938_000 as u64)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn withdraw_unbonded_kill(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(83_230_000 as u64)
|
||||
// Standard Error: 612
|
||||
.saturating_add(Weight::from_ref_time(10_289 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(13 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(11 as u64))
|
||||
}
|
||||
@@ -150,23 +154,25 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking MaxValidatorsCount (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:1 w:1)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Staking CounterForValidators (r:1 w:1)
|
||||
fn validate() -> Weight {
|
||||
Weight::from_ref_time(52_943_000 as u64)
|
||||
Weight::from_ref_time(64_430_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(11 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(5 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
/// The range of component `k` is `[1, 128]`.
|
||||
fn kick(k: u32, ) -> Weight {
|
||||
Weight::from_ref_time(23_264_000 as u64)
|
||||
// Standard Error: 11_000
|
||||
.saturating_add(Weight::from_ref_time(8_006_000 as u64).saturating_mul(k as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(1 as u64))
|
||||
Weight::from_ref_time(42_030_000 as u64)
|
||||
// Standard Error: 5_873
|
||||
.saturating_add(Weight::from_ref_time(6_747_156 as u64).saturating_mul(k as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(2 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(k as u64)))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(k as u64)))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
@@ -176,15 +182,16 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Validators (r:2 w:0)
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
/// The range of component `n` is `[1, 16]`.
|
||||
fn nominate(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(56_596_000 as u64)
|
||||
// Standard Error: 14_000
|
||||
.saturating_add(Weight::from_ref_time(3_644_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(12 as u64))
|
||||
Weight::from_ref_time(70_834_000 as u64)
|
||||
// Standard Error: 4_405
|
||||
.saturating_add(Weight::from_ref_time(2_583_120 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(13 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
}
|
||||
@@ -192,53 +199,54 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
fn chill() -> Weight {
|
||||
Weight::from_ref_time(51_117_000 as u64)
|
||||
Weight::from_ref_time(63_328_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(8 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn set_payee() -> Weight {
|
||||
Weight::from_ref_time(11_223_000 as u64)
|
||||
Weight::from_ref_time(17_763_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(1 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:2 w:2)
|
||||
fn set_controller() -> Weight {
|
||||
Weight::from_ref_time(19_826_000 as u64)
|
||||
Weight::from_ref_time(26_163_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(3 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as u64))
|
||||
}
|
||||
// Storage: Staking ValidatorCount (r:0 w:1)
|
||||
fn set_validator_count() -> Weight {
|
||||
Weight::from_ref_time(3_789_000 as u64)
|
||||
Weight::from_ref_time(4_842_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_no_eras() -> Weight {
|
||||
Weight::from_ref_time(3_793_000 as u64)
|
||||
Weight::from_ref_time(4_974_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_new_era() -> Weight {
|
||||
Weight::from_ref_time(3_802_000 as u64)
|
||||
Weight::from_ref_time(5_039_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_new_era_always() -> Weight {
|
||||
Weight::from_ref_time(3_762_000 as u64)
|
||||
Weight::from_ref_time(4_950_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Invulnerables (r:0 w:1)
|
||||
/// The range of component `v` is `[0, 1000]`.
|
||||
fn set_invulnerables(v: u32, ) -> Weight {
|
||||
Weight::from_ref_time(4_318_000 as u64)
|
||||
// Standard Error: 0
|
||||
.saturating_add(Weight::from_ref_time(10_000 as u64).saturating_mul(v as u64))
|
||||
Weight::from_ref_time(5_150_000 as u64)
|
||||
// Standard Error: 30
|
||||
.saturating_add(Weight::from_ref_time(10_540 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
@@ -246,32 +254,33 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:0 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
// Storage: Staking SpanSlash (r:0 w:2)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn force_unstake(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(65_265_000 as u64)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add(Weight::from_ref_time(1_029_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(76_282_000 as u64)
|
||||
// Standard Error: 2_397
|
||||
.saturating_add(Weight::from_ref_time(1_137_934 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(11 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(12 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(11 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(s as u64)))
|
||||
}
|
||||
// Storage: Staking UnappliedSlashes (r:1 w:1)
|
||||
/// The range of component `s` is `[1, 1000]`.
|
||||
fn cancel_deferred_slash(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(903_312_000 as u64)
|
||||
// Standard Error: 56_000
|
||||
.saturating_add(Weight::from_ref_time(4_968_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(93_690_000 as u64)
|
||||
// Standard Error: 43_203
|
||||
.saturating_add(Weight::from_ref_time(6_149_862 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(1 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasValidatorReward (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:2 w:0)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
@@ -280,17 +289,17 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking ErasValidatorPrefs (r:1 w:0)
|
||||
// Storage: Staking Payee (r:2 w:0)
|
||||
// Storage: System Account (r:2 w:2)
|
||||
/// The range of component `n` is `[1, 256]`.
|
||||
fn payout_stakers_dead_controller(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(87_569_000 as u64)
|
||||
// Standard Error: 14_000
|
||||
.saturating_add(Weight::from_ref_time(24_232_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(10 as u64))
|
||||
Weight::from_ref_time(151_647_000 as u64)
|
||||
// Standard Error: 8_237
|
||||
.saturating_add(Weight::from_ref_time(21_296_415 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(12 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((3 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasValidatorReward (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:2 w:0)
|
||||
// Storage: Staking Ledger (r:2 w:2)
|
||||
@@ -300,45 +309,30 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Payee (r:2 w:0)
|
||||
// Storage: System Account (r:2 w:2)
|
||||
// Storage: Balances Locks (r:2 w:2)
|
||||
/// The range of component `n` is `[1, 256]`.
|
||||
fn payout_stakers_alive_staked(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(98_839_000 as u64)
|
||||
// Standard Error: 21_000
|
||||
.saturating_add(Weight::from_ref_time(34_480_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(11 as u64))
|
||||
Weight::from_ref_time(197_310_000 as u64)
|
||||
// Standard Error: 13_818
|
||||
.saturating_add(Weight::from_ref_time(30_053_043 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(15 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((5 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
/// The range of component `l` is `[1, 32]`.
|
||||
fn rebond(l: u32, ) -> Weight {
|
||||
Weight::from_ref_time(74_865_000 as u64)
|
||||
// Standard Error: 3_000
|
||||
.saturating_add(Weight::from_ref_time(64_000 as u64).saturating_mul(l as u64))
|
||||
Weight::from_ref_time(89_469_000 as u64)
|
||||
// Standard Error: 1_197
|
||||
.saturating_add(Weight::from_ref_time(74_212 as u64).saturating_mul(l as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(9 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(8 as u64))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:1)
|
||||
// Storage: Staking ErasStakersClipped (r:0 w:2)
|
||||
// Storage: Staking ErasValidatorPrefs (r:0 w:2)
|
||||
// Storage: Staking ErasValidatorReward (r:0 w:1)
|
||||
// Storage: Staking ErasRewardPoints (r:0 w:1)
|
||||
// Storage: Staking ErasStakers (r:0 w:2)
|
||||
// Storage: Staking ErasTotalStake (r:0 w:1)
|
||||
// Storage: Staking ErasStartSessionIndex (r:0 w:1)
|
||||
fn set_history_depth(e: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 62_000
|
||||
.saturating_add(Weight::from_ref_time(22_829_000 as u64).saturating_mul(e as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(2 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(4 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((7 as u64).saturating_mul(e as u64)))
|
||||
}
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
@@ -346,24 +340,25 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
// Storage: Staking SpanSlash (r:0 w:1)
|
||||
/// The range of component `s` is `[1, 100]`.
|
||||
fn reap_stash(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(70_933_000 as u64)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add(Weight::from_ref_time(1_021_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(88_333_000 as u64)
|
||||
// Standard Error: 1_567
|
||||
.saturating_add(Weight::from_ref_time(1_101_099 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(12 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(12 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(13 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as u64).saturating_mul(s as u64)))
|
||||
}
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: Staking SlashingSpans (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:200 w:0)
|
||||
// Storage: BagsList ListNodes (r:101 w:0)
|
||||
// Storage: VoterBagsList ListBags (r:200 w:0)
|
||||
// Storage: VoterBagsList ListNodes (r:101 w:0)
|
||||
// Storage: Staking Nominators (r:101 w:0)
|
||||
// Storage: Staking Validators (r:2 w:0)
|
||||
// Storage: Staking Bonded (r:101 w:0)
|
||||
@@ -372,52 +367,54 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking ValidatorCount (r:1 w:0)
|
||||
// Storage: Staking MinimumValidatorCount (r:1 w:0)
|
||||
// Storage: Staking CurrentEra (r:1 w:1)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasStakersClipped (r:0 w:1)
|
||||
// Storage: Staking ErasValidatorPrefs (r:0 w:1)
|
||||
// Storage: Staking ErasStakers (r:0 w:1)
|
||||
// Storage: Staking ErasTotalStake (r:0 w:1)
|
||||
// Storage: Staking ErasStartSessionIndex (r:0 w:1)
|
||||
/// The range of component `v` is `[1, 10]`.
|
||||
/// The range of component `n` is `[1, 100]`.
|
||||
fn new_era(v: u32, n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 897_000
|
||||
.saturating_add(Weight::from_ref_time(213_100_000 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 45_000
|
||||
.saturating_add(Weight::from_ref_time(31_123_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(208 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((5 as u64).saturating_mul(v as u64)))
|
||||
Weight::from_ref_time(572_530_000 as u64)
|
||||
// Standard Error: 3_166_542
|
||||
.saturating_add(Weight::from_ref_time(101_354_358 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 315_238
|
||||
.saturating_add(Weight::from_ref_time(15_565_319 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(261 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(v as u64)))
|
||||
}
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: Staking SlashingSpans (r:21 w:0)
|
||||
// Storage: BagsList ListBags (r:200 w:0)
|
||||
// Storage: BagsList ListNodes (r:1500 w:0)
|
||||
// Storage: VoterBagsList ListBags (r:200 w:0)
|
||||
// Storage: VoterBagsList ListNodes (r:1500 w:0)
|
||||
// Storage: Staking Nominators (r:1500 w:0)
|
||||
// Storage: Staking Validators (r:500 w:0)
|
||||
// Storage: Staking Bonded (r:1500 w:0)
|
||||
// Storage: Staking Ledger (r:1500 w:0)
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 116_000
|
||||
.saturating_add(Weight::from_ref_time(23_745_000 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 116_000
|
||||
.saturating_add(Weight::from_ref_time(22_497_000 as u64).saturating_mul(n as u64))
|
||||
// Standard Error: 3_968_000
|
||||
.saturating_add(Weight::from_ref_time(20_676_000 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(202 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((5 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(s as u64)))
|
||||
/// The range of component `v` is `[500, 1000]`.
|
||||
/// The range of component `n` is `[500, 1000]`.
|
||||
/// The range of component `s` is `[1, 20]`.
|
||||
fn get_npos_voters(v: u32, n: u32, _s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(24_930_788_000 as u64)
|
||||
// Standard Error: 266_386
|
||||
.saturating_add(Weight::from_ref_time(6_687_552 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 266_386
|
||||
.saturating_add(Weight::from_ref_time(6_839_134 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(6722 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking CounterForValidators (r:1 w:0)
|
||||
// Storage: Staking Validators (r:501 w:0)
|
||||
/// The range of component `v` is `[500, 1000]`.
|
||||
fn get_npos_targets(v: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 36_000
|
||||
.saturating_add(Weight::from_ref_time(8_097_000 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(1 as u64))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(v as u64)))
|
||||
Weight::from_ref_time(4_864_727_000 as u64)
|
||||
// Standard Error: 54_240
|
||||
.saturating_add(Weight::from_ref_time(3_319_738 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(T::DbWeight::get().reads(502 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:0 w:1)
|
||||
// Storage: Staking MinValidatorBond (r:0 w:1)
|
||||
@@ -426,7 +423,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking MaxNominatorsCount (r:0 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:0 w:1)
|
||||
fn set_staking_configs_all_set() -> Weight {
|
||||
Weight::from_ref_time(7_041_000 as u64)
|
||||
Weight::from_ref_time(10_141_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:0 w:1)
|
||||
@@ -436,7 +433,7 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking MaxNominatorsCount (r:0 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:0 w:1)
|
||||
fn set_staking_configs_all_remove() -> Weight {
|
||||
Weight::from_ref_time(6_495_000 as u64)
|
||||
Weight::from_ref_time(8_993_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
@@ -446,18 +443,18 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:1 w:0)
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
fn chill_other() -> Weight {
|
||||
Weight::from_ref_time(62_014_000 as u64)
|
||||
Weight::from_ref_time(79_082_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(11 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:1 w:0)
|
||||
// Storage: Staking Validators (r:1 w:1)
|
||||
fn force_apply_min_commission() -> Weight {
|
||||
Weight::from_ref_time(12_814_000 as u64)
|
||||
Weight::from_ref_time(19_265_000 as u64)
|
||||
.saturating_add(T::DbWeight::get().reads(2 as u64))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as u64))
|
||||
}
|
||||
@@ -468,21 +465,20 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn bond() -> Weight {
|
||||
Weight::from_ref_time(43_992_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(5 as u64))
|
||||
Weight::from_ref_time(52_281_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(4 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
fn bond_extra() -> Weight {
|
||||
Weight::from_ref_time(75_827_000 as u64)
|
||||
Weight::from_ref_time(89_748_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(8 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(7 as u64))
|
||||
}
|
||||
@@ -492,11 +488,11 @@ impl WeightInfo for () {
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
fn unbond() -> Weight {
|
||||
Weight::from_ref_time(81_075_000 as u64)
|
||||
Weight::from_ref_time(94_782_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(12 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(8 as u64))
|
||||
}
|
||||
@@ -504,10 +500,11 @@ impl WeightInfo for () {
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn withdraw_unbonded_update(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(35_763_000 as u64)
|
||||
// Standard Error: 0
|
||||
.saturating_add(Weight::from_ref_time(57_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(44_499_000 as u64)
|
||||
// Standard Error: 387
|
||||
.saturating_add(Weight::from_ref_time(72_726 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as u64))
|
||||
}
|
||||
@@ -518,14 +515,17 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn withdraw_unbonded_kill(_s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(66_938_000 as u64)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn withdraw_unbonded_kill(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(83_230_000 as u64)
|
||||
// Standard Error: 612
|
||||
.saturating_add(Weight::from_ref_time(10_289 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(13 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(11 as u64))
|
||||
}
|
||||
@@ -536,23 +536,25 @@ impl WeightInfo for () {
|
||||
// Storage: Staking MaxValidatorsCount (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:1 w:1)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Staking CounterForValidators (r:1 w:1)
|
||||
fn validate() -> Weight {
|
||||
Weight::from_ref_time(52_943_000 as u64)
|
||||
Weight::from_ref_time(64_430_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(11 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(5 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
/// The range of component `k` is `[1, 128]`.
|
||||
fn kick(k: u32, ) -> Weight {
|
||||
Weight::from_ref_time(23_264_000 as u64)
|
||||
// Standard Error: 11_000
|
||||
.saturating_add(Weight::from_ref_time(8_006_000 as u64).saturating_mul(k as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as u64))
|
||||
Weight::from_ref_time(42_030_000 as u64)
|
||||
// Standard Error: 5_873
|
||||
.saturating_add(Weight::from_ref_time(6_747_156 as u64).saturating_mul(k as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(k as u64)))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(k as u64)))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
@@ -562,15 +564,16 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Validators (r:2 w:0)
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
/// The range of component `n` is `[1, 16]`.
|
||||
fn nominate(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(56_596_000 as u64)
|
||||
// Standard Error: 14_000
|
||||
.saturating_add(Weight::from_ref_time(3_644_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(12 as u64))
|
||||
Weight::from_ref_time(70_834_000 as u64)
|
||||
// Standard Error: 4_405
|
||||
.saturating_add(Weight::from_ref_time(2_583_120 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(13 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
}
|
||||
@@ -578,53 +581,54 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
fn chill() -> Weight {
|
||||
Weight::from_ref_time(51_117_000 as u64)
|
||||
Weight::from_ref_time(63_328_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(8 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
fn set_payee() -> Weight {
|
||||
Weight::from_ref_time(11_223_000 as u64)
|
||||
Weight::from_ref_time(17_763_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:2 w:2)
|
||||
fn set_controller() -> Weight {
|
||||
Weight::from_ref_time(19_826_000 as u64)
|
||||
Weight::from_ref_time(26_163_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(3 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as u64))
|
||||
}
|
||||
// Storage: Staking ValidatorCount (r:0 w:1)
|
||||
fn set_validator_count() -> Weight {
|
||||
Weight::from_ref_time(3_789_000 as u64)
|
||||
Weight::from_ref_time(4_842_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_no_eras() -> Weight {
|
||||
Weight::from_ref_time(3_793_000 as u64)
|
||||
Weight::from_ref_time(4_974_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_new_era() -> Weight {
|
||||
Weight::from_ref_time(3_802_000 as u64)
|
||||
Weight::from_ref_time(5_039_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking ForceEra (r:0 w:1)
|
||||
fn force_new_era_always() -> Weight {
|
||||
Weight::from_ref_time(3_762_000 as u64)
|
||||
Weight::from_ref_time(4_950_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Invulnerables (r:0 w:1)
|
||||
/// The range of component `v` is `[0, 1000]`.
|
||||
fn set_invulnerables(v: u32, ) -> Weight {
|
||||
Weight::from_ref_time(4_318_000 as u64)
|
||||
// Standard Error: 0
|
||||
.saturating_add(Weight::from_ref_time(10_000 as u64).saturating_mul(v as u64))
|
||||
Weight::from_ref_time(5_150_000 as u64)
|
||||
// Standard Error: 30
|
||||
.saturating_add(Weight::from_ref_time(10_540 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
@@ -632,32 +636,33 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:0 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
// Storage: Staking SpanSlash (r:0 w:2)
|
||||
/// The range of component `s` is `[0, 100]`.
|
||||
fn force_unstake(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(65_265_000 as u64)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add(Weight::from_ref_time(1_029_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(76_282_000 as u64)
|
||||
// Standard Error: 2_397
|
||||
.saturating_add(Weight::from_ref_time(1_137_934 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(11 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(12 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(11 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(s as u64)))
|
||||
}
|
||||
// Storage: Staking UnappliedSlashes (r:1 w:1)
|
||||
/// The range of component `s` is `[1, 1000]`.
|
||||
fn cancel_deferred_slash(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(903_312_000 as u64)
|
||||
// Standard Error: 56_000
|
||||
.saturating_add(Weight::from_ref_time(4_968_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(93_690_000 as u64)
|
||||
// Standard Error: 43_203
|
||||
.saturating_add(Weight::from_ref_time(6_149_862 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasValidatorReward (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:2 w:0)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
@@ -666,17 +671,17 @@ impl WeightInfo for () {
|
||||
// Storage: Staking ErasValidatorPrefs (r:1 w:0)
|
||||
// Storage: Staking Payee (r:2 w:0)
|
||||
// Storage: System Account (r:2 w:2)
|
||||
/// The range of component `n` is `[1, 256]`.
|
||||
fn payout_stakers_dead_controller(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(87_569_000 as u64)
|
||||
// Standard Error: 14_000
|
||||
.saturating_add(Weight::from_ref_time(24_232_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(10 as u64))
|
||||
Weight::from_ref_time(151_647_000 as u64)
|
||||
// Standard Error: 8_237
|
||||
.saturating_add(Weight::from_ref_time(21_296_415 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(12 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((3 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasValidatorReward (r:1 w:0)
|
||||
// Storage: Staking Bonded (r:2 w:0)
|
||||
// Storage: Staking Ledger (r:2 w:2)
|
||||
@@ -686,45 +691,30 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Payee (r:2 w:0)
|
||||
// Storage: System Account (r:2 w:2)
|
||||
// Storage: Balances Locks (r:2 w:2)
|
||||
/// The range of component `n` is `[1, 256]`.
|
||||
fn payout_stakers_alive_staked(n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(98_839_000 as u64)
|
||||
// Standard Error: 21_000
|
||||
.saturating_add(Weight::from_ref_time(34_480_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(11 as u64))
|
||||
Weight::from_ref_time(197_310_000 as u64)
|
||||
// Standard Error: 13_818
|
||||
.saturating_add(Weight::from_ref_time(30_053_043 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(15 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((5 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:3 w:3)
|
||||
// Storage: VoterBagsList ListNodes (r:3 w:3)
|
||||
// Storage: Staking Bonded (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:2 w:2)
|
||||
/// The range of component `l` is `[1, 32]`.
|
||||
fn rebond(l: u32, ) -> Weight {
|
||||
Weight::from_ref_time(74_865_000 as u64)
|
||||
// Standard Error: 3_000
|
||||
.saturating_add(Weight::from_ref_time(64_000 as u64).saturating_mul(l as u64))
|
||||
Weight::from_ref_time(89_469_000 as u64)
|
||||
// Standard Error: 1_197
|
||||
.saturating_add(Weight::from_ref_time(74_212 as u64).saturating_mul(l as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(9 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(8 as u64))
|
||||
}
|
||||
// Storage: Staking CurrentEra (r:1 w:0)
|
||||
// Storage: Staking HistoryDepth (r:1 w:1)
|
||||
// Storage: Staking ErasStakersClipped (r:0 w:2)
|
||||
// Storage: Staking ErasValidatorPrefs (r:0 w:2)
|
||||
// Storage: Staking ErasValidatorReward (r:0 w:1)
|
||||
// Storage: Staking ErasRewardPoints (r:0 w:1)
|
||||
// Storage: Staking ErasStakers (r:0 w:2)
|
||||
// Storage: Staking ErasTotalStake (r:0 w:1)
|
||||
// Storage: Staking ErasStartSessionIndex (r:0 w:1)
|
||||
fn set_history_depth(e: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 62_000
|
||||
.saturating_add(Weight::from_ref_time(22_829_000 as u64).saturating_mul(e as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(4 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((7 as u64).saturating_mul(e as u64)))
|
||||
}
|
||||
// Storage: System Account (r:1 w:1)
|
||||
// Storage: Staking Bonded (r:1 w:1)
|
||||
// Storage: Staking Ledger (r:1 w:1)
|
||||
@@ -732,24 +722,25 @@ impl WeightInfo for () {
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: Staking Nominators (r:1 w:1)
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: Balances Locks (r:1 w:1)
|
||||
// Storage: Staking Payee (r:0 w:1)
|
||||
// Storage: Staking SpanSlash (r:0 w:1)
|
||||
/// The range of component `s` is `[1, 100]`.
|
||||
fn reap_stash(s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(70_933_000 as u64)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add(Weight::from_ref_time(1_021_000 as u64).saturating_mul(s as u64))
|
||||
Weight::from_ref_time(88_333_000 as u64)
|
||||
// Standard Error: 1_567
|
||||
.saturating_add(Weight::from_ref_time(1_101_099 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(12 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(12 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(13 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(s as u64)))
|
||||
}
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: Staking SlashingSpans (r:1 w:0)
|
||||
// Storage: BagsList ListBags (r:200 w:0)
|
||||
// Storage: BagsList ListNodes (r:101 w:0)
|
||||
// Storage: VoterBagsList ListBags (r:200 w:0)
|
||||
// Storage: VoterBagsList ListNodes (r:101 w:0)
|
||||
// Storage: Staking Nominators (r:101 w:0)
|
||||
// Storage: Staking Validators (r:2 w:0)
|
||||
// Storage: Staking Bonded (r:101 w:0)
|
||||
@@ -758,52 +749,54 @@ impl WeightInfo for () {
|
||||
// Storage: Staking ValidatorCount (r:1 w:0)
|
||||
// Storage: Staking MinimumValidatorCount (r:1 w:0)
|
||||
// Storage: Staking CurrentEra (r:1 w:1)
|
||||
// Storage: Staking HistoryDepth (r:1 w:0)
|
||||
// Storage: Staking ErasStakersClipped (r:0 w:1)
|
||||
// Storage: Staking ErasValidatorPrefs (r:0 w:1)
|
||||
// Storage: Staking ErasStakers (r:0 w:1)
|
||||
// Storage: Staking ErasTotalStake (r:0 w:1)
|
||||
// Storage: Staking ErasStartSessionIndex (r:0 w:1)
|
||||
/// The range of component `v` is `[1, 10]`.
|
||||
/// The range of component `n` is `[1, 100]`.
|
||||
fn new_era(v: u32, n: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 897_000
|
||||
.saturating_add(Weight::from_ref_time(213_100_000 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 45_000
|
||||
.saturating_add(Weight::from_ref_time(31_123_000 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(208 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((5 as u64).saturating_mul(v as u64)))
|
||||
Weight::from_ref_time(572_530_000 as u64)
|
||||
// Standard Error: 3_166_542
|
||||
.saturating_add(Weight::from_ref_time(101_354_358 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 315_238
|
||||
.saturating_add(Weight::from_ref_time(15_565_319 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(261 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(v as u64)))
|
||||
}
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:0)
|
||||
// Storage: Staking SlashingSpans (r:21 w:0)
|
||||
// Storage: BagsList ListBags (r:200 w:0)
|
||||
// Storage: BagsList ListNodes (r:1500 w:0)
|
||||
// Storage: VoterBagsList ListBags (r:200 w:0)
|
||||
// Storage: VoterBagsList ListNodes (r:1500 w:0)
|
||||
// Storage: Staking Nominators (r:1500 w:0)
|
||||
// Storage: Staking Validators (r:500 w:0)
|
||||
// Storage: Staking Bonded (r:1500 w:0)
|
||||
// Storage: Staking Ledger (r:1500 w:0)
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 116_000
|
||||
.saturating_add(Weight::from_ref_time(23_745_000 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 116_000
|
||||
.saturating_add(Weight::from_ref_time(22_497_000 as u64).saturating_mul(n as u64))
|
||||
// Standard Error: 3_968_000
|
||||
.saturating_add(Weight::from_ref_time(20_676_000 as u64).saturating_mul(s as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(202 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((5 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(n as u64)))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(s as u64)))
|
||||
/// The range of component `v` is `[500, 1000]`.
|
||||
/// The range of component `n` is `[500, 1000]`.
|
||||
/// The range of component `s` is `[1, 20]`.
|
||||
fn get_npos_voters(v: u32, n: u32, _s: u32, ) -> Weight {
|
||||
Weight::from_ref_time(24_930_788_000 as u64)
|
||||
// Standard Error: 266_386
|
||||
.saturating_add(Weight::from_ref_time(6_687_552 as u64).saturating_mul(v as u64))
|
||||
// Standard Error: 266_386
|
||||
.saturating_add(Weight::from_ref_time(6_839_134 as u64).saturating_mul(n as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(6722 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(v as u64)))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(n as u64)))
|
||||
}
|
||||
// Storage: Staking CounterForValidators (r:1 w:0)
|
||||
// Storage: Staking Validators (r:501 w:0)
|
||||
/// The range of component `v` is `[500, 1000]`.
|
||||
fn get_npos_targets(v: u32, ) -> Weight {
|
||||
Weight::from_ref_time(0 as u64)
|
||||
// Standard Error: 36_000
|
||||
.saturating_add(Weight::from_ref_time(8_097_000 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(v as u64)))
|
||||
Weight::from_ref_time(4_864_727_000 as u64)
|
||||
// Standard Error: 54_240
|
||||
.saturating_add(Weight::from_ref_time(3_319_738 as u64).saturating_mul(v as u64))
|
||||
.saturating_add(RocksDbWeight::get().reads(502 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:0 w:1)
|
||||
// Storage: Staking MinValidatorBond (r:0 w:1)
|
||||
@@ -812,7 +805,7 @@ impl WeightInfo for () {
|
||||
// Storage: Staking MaxNominatorsCount (r:0 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:0 w:1)
|
||||
fn set_staking_configs_all_set() -> Weight {
|
||||
Weight::from_ref_time(7_041_000 as u64)
|
||||
Weight::from_ref_time(10_141_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:0 w:1)
|
||||
@@ -822,7 +815,7 @@ impl WeightInfo for () {
|
||||
// Storage: Staking MaxNominatorsCount (r:0 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:0 w:1)
|
||||
fn set_staking_configs_all_remove() -> Weight {
|
||||
Weight::from_ref_time(6_495_000 as u64)
|
||||
Weight::from_ref_time(8_993_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking Ledger (r:1 w:0)
|
||||
@@ -832,18 +825,18 @@ impl WeightInfo for () {
|
||||
// Storage: Staking CounterForNominators (r:1 w:1)
|
||||
// Storage: Staking MinNominatorBond (r:1 w:0)
|
||||
// Storage: Staking Validators (r:1 w:0)
|
||||
// Storage: BagsList ListNodes (r:2 w:2)
|
||||
// Storage: BagsList ListBags (r:1 w:1)
|
||||
// Storage: BagsList CounterForListNodes (r:1 w:1)
|
||||
// Storage: VoterBagsList ListNodes (r:2 w:2)
|
||||
// Storage: VoterBagsList ListBags (r:1 w:1)
|
||||
// Storage: VoterBagsList CounterForListNodes (r:1 w:1)
|
||||
fn chill_other() -> Weight {
|
||||
Weight::from_ref_time(62_014_000 as u64)
|
||||
Weight::from_ref_time(79_082_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(11 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(6 as u64))
|
||||
}
|
||||
// Storage: Staking MinCommission (r:1 w:0)
|
||||
// Storage: Staking Validators (r:1 w:1)
|
||||
fn force_apply_min_commission() -> Weight {
|
||||
Weight::from_ref_time(12_814_000 as u64)
|
||||
Weight::from_ref_time(19_265_000 as u64)
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as u64))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as u64))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user