mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-18 13:01:01 +00:00
Move Staking Weights to T::WeightInfo (#7007)
* Fix the benchmarks * Migrate staking to weightInfo * Fix global benchmarks * re-calculate the submit solution weight. * Fix some refund. * Get rid of all the extra parameters. * Fix staking tests. * new values from the bench machine. * Fix some grumbles * better macro * Some better doc * Move to interpreted wasm * Make it work temporarily * Final fix of default ones. * Fix payout benchmarks * Fix payout stuff * One last fix * use benchmarking machine for numbers * update weight docs Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
This commit is contained in:
@@ -29,6 +29,14 @@ const MAX_SPANS: u32 = 100;
|
||||
const MAX_VALIDATORS: u32 = 1000;
|
||||
const MAX_SLASHES: u32 = 1000;
|
||||
|
||||
macro_rules! do_whitelist {
|
||||
($acc:ident) => {
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(
|
||||
frame_system::Account::<T>::hashed_key_for(&$acc).into()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Add slashing spans to a user account. Not relevant for actual use, only to benchmark
|
||||
// read and write operations.
|
||||
fn add_slashing_spans<T: Trait>(who: &T::AccountId, spans: u32) {
|
||||
@@ -51,11 +59,12 @@ pub fn create_validator_with_nominators<T: Trait>(
|
||||
n: u32,
|
||||
upper_bound: u32,
|
||||
dead: bool,
|
||||
destination: RewardDestination<T::AccountId>
|
||||
) -> Result<T::AccountId, &'static str> {
|
||||
let mut points_total = 0;
|
||||
let mut points_individual = Vec::new();
|
||||
|
||||
let (v_stash, v_controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let (v_stash, v_controller) = create_stash_controller::<T>(0, 100, destination.clone())?;
|
||||
let validator_prefs = ValidatorPrefs {
|
||||
commission: Perbill::from_percent(50),
|
||||
};
|
||||
@@ -68,9 +77,9 @@ pub fn create_validator_with_nominators<T: Trait>(
|
||||
// Give the validator n nominators, but keep total users in the system the same.
|
||||
for i in 0 .. upper_bound {
|
||||
let (_n_stash, n_controller) = if !dead {
|
||||
create_stash_controller::<T>(u32::max_value() - i, 100)?
|
||||
create_stash_controller::<T>(u32::max_value() - i, 100, destination.clone())?
|
||||
} else {
|
||||
create_stash_and_dead_controller::<T>(u32::max_value() - i, 100)?
|
||||
create_stash_and_dead_controller::<T>(u32::max_value() - i, 100, destination.clone())?
|
||||
};
|
||||
if i < n {
|
||||
Staking::<T>::nominate(RawOrigin::Signed(n_controller.clone()).into(), vec![stash_lookup.clone()])?;
|
||||
@@ -100,19 +109,18 @@ pub fn create_validator_with_nominators<T: Trait>(
|
||||
Ok(v_stash)
|
||||
}
|
||||
|
||||
const USER_SEED: u32 = 999666;
|
||||
|
||||
benchmarks! {
|
||||
_{
|
||||
// User account seed
|
||||
let u in 0 .. 1000 => ();
|
||||
}
|
||||
_{}
|
||||
|
||||
bond {
|
||||
let u in ...;
|
||||
let stash = create_funded_user::<T>("stash", u, 100);
|
||||
let controller = create_funded_user::<T>("controller", u, 100);
|
||||
let stash = create_funded_user::<T>("stash", USER_SEED, 100);
|
||||
let controller = create_funded_user::<T>("controller", USER_SEED, 100);
|
||||
let controller_lookup: <T::Lookup as StaticLookup>::Source = T::Lookup::unlookup(controller.clone());
|
||||
let reward_destination = RewardDestination::Staked;
|
||||
let amount = T::Currency::minimum_balance() * 10.into();
|
||||
do_whitelist!(stash);
|
||||
}: _(RawOrigin::Signed(stash.clone()), controller_lookup, amount, reward_destination)
|
||||
verify {
|
||||
assert!(Bonded::<T>::contains_key(stash));
|
||||
@@ -120,11 +128,11 @@ benchmarks! {
|
||||
}
|
||||
|
||||
bond_extra {
|
||||
let u in ...;
|
||||
let (stash, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
let max_additional = T::Currency::minimum_balance() * 10.into();
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created before")?;
|
||||
let original_bonded: BalanceOf<T> = ledger.active;
|
||||
do_whitelist!(stash);
|
||||
}: _(RawOrigin::Signed(stash), max_additional)
|
||||
verify {
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created after")?;
|
||||
@@ -133,11 +141,11 @@ benchmarks! {
|
||||
}
|
||||
|
||||
unbond {
|
||||
let u in ...;
|
||||
let (_, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (_, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
let amount = T::Currency::minimum_balance() * 10.into();
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created before")?;
|
||||
let original_bonded: BalanceOf<T> = ledger.active;
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller.clone()), amount)
|
||||
verify {
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created after")?;
|
||||
@@ -149,13 +157,14 @@ benchmarks! {
|
||||
withdraw_unbonded_update {
|
||||
// Slashing Spans
|
||||
let s in 0 .. MAX_SPANS;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
add_slashing_spans::<T>(&stash, s);
|
||||
let amount = T::Currency::minimum_balance() * 5.into(); // Half of total
|
||||
Staking::<T>::unbond(RawOrigin::Signed(controller.clone()).into(), amount)?;
|
||||
CurrentEra::put(EraIndex::max_value());
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created before")?;
|
||||
let original_total: BalanceOf<T> = ledger.total;
|
||||
do_whitelist!(controller);
|
||||
}: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s)
|
||||
verify {
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created after")?;
|
||||
@@ -167,22 +176,23 @@ benchmarks! {
|
||||
withdraw_unbonded_kill {
|
||||
// Slashing Spans
|
||||
let s in 0 .. MAX_SPANS;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
add_slashing_spans::<T>(&stash, s);
|
||||
let amount = T::Currency::minimum_balance() * 10.into();
|
||||
Staking::<T>::unbond(RawOrigin::Signed(controller.clone()).into(), amount)?;
|
||||
CurrentEra::put(EraIndex::max_value());
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created before")?;
|
||||
let original_total: BalanceOf<T> = ledger.total;
|
||||
do_whitelist!(controller);
|
||||
}: withdraw_unbonded(RawOrigin::Signed(controller.clone()), s)
|
||||
verify {
|
||||
assert!(!Ledger::<T>::contains_key(controller));
|
||||
}
|
||||
|
||||
validate {
|
||||
let u in ...;
|
||||
let (stash, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
let prefs = ValidatorPrefs::default();
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller), prefs)
|
||||
verify {
|
||||
assert!(Validators::<T>::contains_key(stash));
|
||||
@@ -191,51 +201,52 @@ benchmarks! {
|
||||
// Worst case scenario, MAX_NOMINATIONS
|
||||
nominate {
|
||||
let n in 1 .. MAX_NOMINATIONS as u32;
|
||||
let (stash, controller) = create_stash_controller::<T>(n + 1, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(n + 1, 100, Default::default())?;
|
||||
let validators = create_validators::<T>(n, 100)?;
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller), validators)
|
||||
verify {
|
||||
assert!(Nominators::<T>::contains_key(stash));
|
||||
}
|
||||
|
||||
chill {
|
||||
let u in ...;
|
||||
let (_, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (_, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller))
|
||||
|
||||
set_payee {
|
||||
let u in ...;
|
||||
let (stash, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
assert_eq!(Payee::<T>::get(&stash), RewardDestination::Staked);
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller), RewardDestination::Controller)
|
||||
verify {
|
||||
assert_eq!(Payee::<T>::get(&stash), RewardDestination::Controller);
|
||||
}
|
||||
|
||||
set_controller {
|
||||
let u in ...;
|
||||
let (stash, _) = create_stash_controller::<T>(u, 100)?;
|
||||
let new_controller = create_funded_user::<T>("new_controller", u, 100);
|
||||
let (stash, _) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
let new_controller = create_funded_user::<T>("new_controller", USER_SEED, 100);
|
||||
let new_controller_lookup = T::Lookup::unlookup(new_controller.clone());
|
||||
do_whitelist!(stash);
|
||||
}: _(RawOrigin::Signed(stash), new_controller_lookup)
|
||||
verify {
|
||||
assert!(Ledger::<T>::contains_key(&new_controller));
|
||||
}
|
||||
|
||||
set_validator_count {
|
||||
let c in 0 .. MAX_VALIDATORS;
|
||||
}: _(RawOrigin::Root, c)
|
||||
let validator_count = MAX_VALIDATORS;
|
||||
}: _(RawOrigin::Root, validator_count)
|
||||
verify {
|
||||
assert_eq!(ValidatorCount::get(), c);
|
||||
assert_eq!(ValidatorCount::get(), validator_count);
|
||||
}
|
||||
|
||||
force_no_eras { let i in 0 .. 1; }: _(RawOrigin::Root)
|
||||
force_no_eras {}: _(RawOrigin::Root)
|
||||
verify { assert_eq!(ForceEra::get(), Forcing::ForceNone); }
|
||||
|
||||
force_new_era {let i in 0 .. 1; }: _(RawOrigin::Root)
|
||||
force_new_era {}: _(RawOrigin::Root)
|
||||
verify { assert_eq!(ForceEra::get(), Forcing::ForceNew); }
|
||||
|
||||
force_new_era_always { let i in 0 .. 1; }: _(RawOrigin::Root)
|
||||
force_new_era_always {}: _(RawOrigin::Root)
|
||||
verify { assert_eq!(ForceEra::get(), Forcing::ForceAlways); }
|
||||
|
||||
// Worst case scenario, the list of invulnerables is very long.
|
||||
@@ -253,7 +264,7 @@ benchmarks! {
|
||||
force_unstake {
|
||||
// Slashing Spans
|
||||
let s in 0 .. MAX_SPANS;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
add_slashing_spans::<T>(&stash, s);
|
||||
}: _(RawOrigin::Root, stash, s)
|
||||
verify {
|
||||
@@ -275,37 +286,60 @@ benchmarks! {
|
||||
assert_eq!(UnappliedSlashes::<T>::get(&era).len(), (MAX_SLASHES - s) as usize);
|
||||
}
|
||||
|
||||
payout_stakers {
|
||||
payout_stakers_dead_controller {
|
||||
let n in 1 .. T::MaxNominatorRewardedPerValidator::get() as u32;
|
||||
let validator = create_validator_with_nominators::<T>(n, T::MaxNominatorRewardedPerValidator::get() as u32, true)?;
|
||||
let validator = create_validator_with_nominators::<T>(
|
||||
n,
|
||||
T::MaxNominatorRewardedPerValidator::get() as u32,
|
||||
true,
|
||||
RewardDestination::Controller,
|
||||
)?;
|
||||
|
||||
let current_era = CurrentEra::get().unwrap();
|
||||
// set the commission for this particular era as well.
|
||||
<ErasValidatorPrefs<T>>::insert(current_era, validator.clone(), <Staking<T>>::validators(&validator));
|
||||
|
||||
let caller = whitelisted_caller();
|
||||
let balance_before = T::Currency::free_balance(&validator);
|
||||
}: _(RawOrigin::Signed(caller), validator.clone(), current_era)
|
||||
let validator_controller = <Bonded<T>>::get(&validator).unwrap();
|
||||
let balance_before = T::Currency::free_balance(&validator_controller);
|
||||
}: payout_stakers(RawOrigin::Signed(caller), validator.clone(), current_era)
|
||||
verify {
|
||||
// Validator has been paid!
|
||||
let balance_after = T::Currency::free_balance(&validator);
|
||||
assert!(balance_before < balance_after);
|
||||
let balance_after = T::Currency::free_balance(&validator_controller);
|
||||
assert!(
|
||||
balance_before < balance_after,
|
||||
"Balance of controller {:?} should have increased after payout.",
|
||||
validator,
|
||||
);
|
||||
}
|
||||
|
||||
payout_stakers_alive_controller {
|
||||
payout_stakers_alive_staked {
|
||||
let n in 1 .. T::MaxNominatorRewardedPerValidator::get() as u32;
|
||||
let validator = create_validator_with_nominators::<T>(n, T::MaxNominatorRewardedPerValidator::get() as u32, false)?;
|
||||
let validator = create_validator_with_nominators::<T>(
|
||||
n,
|
||||
T::MaxNominatorRewardedPerValidator::get() as u32,
|
||||
false,
|
||||
RewardDestination::Staked,
|
||||
)?;
|
||||
|
||||
let current_era = CurrentEra::get().unwrap();
|
||||
// set the commission for this particular era as well.
|
||||
<ErasValidatorPrefs<T>>::insert(current_era, validator.clone(), <Staking<T>>::validators(&validator));
|
||||
|
||||
let caller = whitelisted_caller();
|
||||
let balance_before = T::Currency::free_balance(&validator);
|
||||
}: payout_stakers(RawOrigin::Signed(caller), validator.clone(), current_era)
|
||||
verify {
|
||||
// Validator has been paid!
|
||||
let balance_after = T::Currency::free_balance(&validator);
|
||||
assert!(balance_before < balance_after);
|
||||
assert!(
|
||||
balance_before < balance_after,
|
||||
"Balance of stash {:?} should have increased after payout.",
|
||||
validator,
|
||||
);
|
||||
}
|
||||
|
||||
rebond {
|
||||
let l in 1 .. MAX_UNLOCKING_CHUNKS as u32;
|
||||
let (_, controller) = create_stash_controller::<T>(u, 100)?;
|
||||
let (_, controller) = create_stash_controller::<T>(USER_SEED, 100, Default::default())?;
|
||||
let mut staking_ledger = Ledger::<T>::get(controller.clone()).unwrap();
|
||||
let unlock_chunk = UnlockChunk::<BalanceOf<T>> {
|
||||
value: 1.into(),
|
||||
@@ -316,6 +350,7 @@ benchmarks! {
|
||||
}
|
||||
Ledger::<T>::insert(controller.clone(), staking_ledger.clone());
|
||||
let original_bonded: BalanceOf<T> = staking_ledger.active;
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller.clone()), (l + 100).into())
|
||||
verify {
|
||||
let ledger = Ledger::<T>::get(&controller).ok_or("ledger not created after")?;
|
||||
@@ -343,9 +378,10 @@ benchmarks! {
|
||||
|
||||
reap_stash {
|
||||
let s in 1 .. MAX_SPANS;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
add_slashing_spans::<T>(&stash, s);
|
||||
T::Currency::make_free_balance_be(&stash, 0.into());
|
||||
do_whitelist!(controller);
|
||||
}: _(RawOrigin::Signed(controller), stash.clone(), s)
|
||||
verify {
|
||||
assert!(!Bonded::<T>::contains_key(&stash));
|
||||
@@ -362,32 +398,7 @@ benchmarks! {
|
||||
assert!(validators.len() == v as usize);
|
||||
}
|
||||
|
||||
do_slash {
|
||||
let l in 1 .. MAX_UNLOCKING_CHUNKS as u32;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100)?;
|
||||
let mut staking_ledger = Ledger::<T>::get(controller.clone()).unwrap();
|
||||
let unlock_chunk = UnlockChunk::<BalanceOf<T>> {
|
||||
value: 1.into(),
|
||||
era: EraIndex::zero(),
|
||||
};
|
||||
for _ in 0 .. l {
|
||||
staking_ledger.unlocking.push(unlock_chunk.clone())
|
||||
}
|
||||
Ledger::<T>::insert(controller, staking_ledger);
|
||||
let slash_amount = T::Currency::minimum_balance() * 10.into();
|
||||
let balance_before = T::Currency::free_balance(&stash);
|
||||
}: {
|
||||
crate::slashing::do_slash::<T>(
|
||||
&stash,
|
||||
slash_amount,
|
||||
&mut BalanceOf::<T>::zero(),
|
||||
&mut NegativeImbalanceOf::<T>::zero()
|
||||
);
|
||||
} verify {
|
||||
let balance_after = T::Currency::free_balance(&stash);
|
||||
assert!(balance_before > balance_after);
|
||||
}
|
||||
|
||||
#[extra]
|
||||
payout_all {
|
||||
let v in 1 .. 10;
|
||||
let n in 1 .. 100;
|
||||
@@ -426,18 +437,45 @@ benchmarks! {
|
||||
}
|
||||
}
|
||||
|
||||
// This benchmark create `v` validators intent, `n` nominators intent, each nominator nominate
|
||||
// MAX_NOMINATIONS in the set of the first `w` validators.
|
||||
// It builds a solution with `w` winners composed of nominated validators randomly nominated,
|
||||
// `a` assignment with MAX_NOMINATIONS.
|
||||
#[extra]
|
||||
do_slash {
|
||||
let l in 1 .. MAX_UNLOCKING_CHUNKS as u32;
|
||||
let (stash, controller) = create_stash_controller::<T>(0, 100, Default::default())?;
|
||||
let mut staking_ledger = Ledger::<T>::get(controller.clone()).unwrap();
|
||||
let unlock_chunk = UnlockChunk::<BalanceOf<T>> {
|
||||
value: 1.into(),
|
||||
era: EraIndex::zero(),
|
||||
};
|
||||
for _ in 0 .. l {
|
||||
staking_ledger.unlocking.push(unlock_chunk.clone())
|
||||
}
|
||||
Ledger::<T>::insert(controller, staking_ledger);
|
||||
let slash_amount = T::Currency::minimum_balance() * 10.into();
|
||||
let balance_before = T::Currency::free_balance(&stash);
|
||||
}: {
|
||||
crate::slashing::do_slash::<T>(
|
||||
&stash,
|
||||
slash_amount,
|
||||
&mut BalanceOf::<T>::zero(),
|
||||
&mut NegativeImbalanceOf::<T>::zero()
|
||||
);
|
||||
} verify {
|
||||
let balance_after = T::Currency::free_balance(&stash);
|
||||
assert!(balance_before > balance_after);
|
||||
}
|
||||
|
||||
// This benchmark create `v` validators intent, `n` nominators intent, in total creating `e`
|
||||
// edges.
|
||||
#[extra]
|
||||
submit_solution_initial {
|
||||
// number of validator intent
|
||||
let v in 1000 .. 2000;
|
||||
// number of nominator intent
|
||||
let n in 1000 .. 2000;
|
||||
// number of assignments. Basically, number of active nominators.
|
||||
let a in 200 .. 500;
|
||||
// number of winners, also ValidatorCount
|
||||
// number of validator intention. This will be equal to `ElectionSize::validators`.
|
||||
let v in 200 .. 400;
|
||||
// number of nominator intention. This will be equal to `ElectionSize::nominators`.
|
||||
let n in 500 .. 1000;
|
||||
// number of assignments. Basically, number of active nominators. This will be equal to
|
||||
// `compact.len()`.
|
||||
let a in 200 .. 400;
|
||||
// number of winners, also ValidatorCount. This will be equal to `winner.len()`.
|
||||
let w in 16 .. 100;
|
||||
|
||||
ensure!(w as usize >= MAX_NOMINATIONS, "doesn't support lower value");
|
||||
@@ -466,15 +504,19 @@ benchmarks! {
|
||||
size
|
||||
) = offchain_election::prepare_submission::<T>(assignments, winners, false).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
winners.len(), compact.unique_targets().len(),
|
||||
"unique targets ({}) and winners ({}) count not same. This solution is not valid.",
|
||||
compact.unique_targets().len(),
|
||||
winners.len(),
|
||||
);
|
||||
|
||||
// needed for the solution to be accepted
|
||||
<EraElectionStatus<T>>::put(ElectionStatus::Open(T::BlockNumber::from(1u32)));
|
||||
|
||||
let era = <Staking<T>>::current_era().unwrap_or(0);
|
||||
let caller: T::AccountId = account("caller", n, SEED);
|
||||
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
do_whitelist!(caller);
|
||||
}: {
|
||||
let result = <Staking<T>>::submit_election_solution(
|
||||
RawOrigin::Signed(caller.clone()).into(),
|
||||
@@ -493,13 +535,13 @@ benchmarks! {
|
||||
|
||||
// same as submit_solution_initial but we place a very weak solution on chian first.
|
||||
submit_solution_better {
|
||||
// number of validator intent
|
||||
let v in 1000 .. 2000;
|
||||
// number of nominator intent
|
||||
let n in 1000 .. 2000;
|
||||
// number of validator intention.
|
||||
let v in 200 .. 400;
|
||||
// number of nominator intention.
|
||||
let n in 500 .. 1000;
|
||||
// number of assignments. Basically, number of active nominators.
|
||||
let a in 200 .. 500;
|
||||
// number of winners, also ValidatorCount
|
||||
let a in 200 .. 400;
|
||||
// number of winners, also ValidatorCount.
|
||||
let w in 16 .. 100;
|
||||
|
||||
ensure!(w as usize >= MAX_NOMINATIONS, "doesn't support lower value");
|
||||
@@ -530,15 +572,19 @@ benchmarks! {
|
||||
size
|
||||
) = offchain_election::prepare_submission::<T>(assignments, winners, false).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
winners.len(), compact.unique_targets().len(),
|
||||
"unique targets ({}) and winners ({}) count not same. This solution is not valid.",
|
||||
compact.unique_targets().len(),
|
||||
winners.len(),
|
||||
);
|
||||
|
||||
// needed for the solution to be accepted
|
||||
<EraElectionStatus<T>>::put(ElectionStatus::Open(T::BlockNumber::from(1u32)));
|
||||
|
||||
let era = <Staking<T>>::current_era().unwrap_or(0);
|
||||
let caller: T::AccountId = account("caller", n, SEED);
|
||||
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
do_whitelist!(caller);
|
||||
|
||||
// submit a very bad solution on-chain
|
||||
{
|
||||
@@ -576,11 +622,12 @@ benchmarks! {
|
||||
}
|
||||
|
||||
// This will be early rejected based on the score.
|
||||
#[extra]
|
||||
submit_solution_weaker {
|
||||
// number of validator intent
|
||||
let v in 1000 .. 2000;
|
||||
// number of nominator intent
|
||||
let n in 1000 .. 2000;
|
||||
// number of validator intention.
|
||||
let v in 200 .. 400;
|
||||
// number of nominator intention.
|
||||
let n in 500 .. 1000;
|
||||
|
||||
create_validators_with_nominators_for_era::<T>(v, n, MAX_NOMINATIONS, false, None)?;
|
||||
|
||||
@@ -589,16 +636,19 @@ benchmarks! {
|
||||
|
||||
// needed for the solution to be accepted
|
||||
<EraElectionStatus<T>>::put(ElectionStatus::Open(T::BlockNumber::from(1u32)));
|
||||
let caller: T::AccountId = account("caller", n, SEED);
|
||||
let era = <Staking<T>>::current_era().unwrap_or(0);
|
||||
|
||||
// Whitelist caller account from further DB operations.
|
||||
let caller_key = frame_system::Account::<T>::hashed_key_for(&caller);
|
||||
frame_benchmarking::benchmarking::add_to_whitelist(caller_key.into());
|
||||
let caller: T::AccountId = account("caller", n, SEED);
|
||||
do_whitelist!(caller);
|
||||
|
||||
// submit a seq-phragmen with all the good stuff on chain.
|
||||
{
|
||||
let (winners, compact, score, size) = get_seq_phragmen_solution::<T>(true);
|
||||
assert_eq!(
|
||||
winners.len(), compact.unique_targets().len(),
|
||||
"unique targets ({}) and winners ({}) count not same. This solution is not valid.",
|
||||
compact.unique_targets().len(),
|
||||
winners.len(),
|
||||
);
|
||||
assert!(
|
||||
<Staking<T>>::submit_election_solution(
|
||||
RawOrigin::Signed(caller.clone()).into(),
|
||||
@@ -662,6 +712,7 @@ mod tests {
|
||||
n,
|
||||
<Test as Trait>::MaxNominatorRewardedPerValidator::get() as u32,
|
||||
false,
|
||||
RewardDestination::Staked,
|
||||
).unwrap();
|
||||
|
||||
let current_era = CurrentEra::get().unwrap();
|
||||
@@ -683,6 +734,7 @@ mod tests {
|
||||
n,
|
||||
<Test as Trait>::MaxNominatorRewardedPerValidator::get() as u32,
|
||||
false,
|
||||
RewardDestination::Staked,
|
||||
).unwrap();
|
||||
|
||||
// Add 20 slashing spans
|
||||
@@ -743,8 +795,8 @@ mod tests {
|
||||
assert_ok!(test_benchmark_set_invulnerables::<Test>());
|
||||
assert_ok!(test_benchmark_force_unstake::<Test>());
|
||||
assert_ok!(test_benchmark_cancel_deferred_slash::<Test>());
|
||||
assert_ok!(test_benchmark_payout_stakers::<Test>());
|
||||
assert_ok!(test_benchmark_payout_stakers_alive_controller::<Test>());
|
||||
assert_ok!(test_benchmark_payout_stakers_dead_controller::<Test>());
|
||||
assert_ok!(test_benchmark_payout_stakers_alive_staked::<Test>());
|
||||
assert_ok!(test_benchmark_rebond::<Test>());
|
||||
assert_ok!(test_benchmark_set_history_depth::<Test>());
|
||||
assert_ok!(test_benchmark_reap_stash::<Test>());
|
||||
|
||||
Reference in New Issue
Block a user