mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-28 21:27:57 +00:00
Audit fixes for election/staking decoupling part 2 (#8167)
* Base features and traits. * pallet and unsigned phase * Undo bad formattings. * some formatting cleanup. * Small self-cleanup. * Make it all build * self-review * Some doc tests. * Some changes from other PR * Fix session test * Update Cargo.lock * Update frame/election-provider-multi-phase/src/lib.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Some review comments * Rename + make encode/decode * Do an assert as well, just in case. * Fix build * Update frame/election-provider-multi-phase/src/unsigned.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Las comment * fix staking fuzzer. * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/election-provider-multi-phase/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Add one last layer of feasibility check as well. * Last fixes to benchmarks * Some more docs. * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/election-provider-multi-phase/src/weights.rs --template=./.maintain/frame-weight-template.hbs * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/election-provider-multi-phase/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Some nits * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_staking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/staking/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Fix doc * Mkae ci green * Audit fixes for election-provider: part 2 signed phase. * Fix weight * Some grumbles. * Try and weigh to get_npos_voters * Fix build * Fix line width * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_staking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/staking/src/weights.rs --template=./.maintain/frame-weight-template.hbs * Fix tests. * Fix build * Reorg some stuff * More reorg. * Reorg done. * Fix build * Another rename * Fix build * Update frame/election-provider-multi-phase/src/mock.rs Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com> * nit * better doc * Line width * Fix build * Self-review * Self-review * Fix wan * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/election-provider-multi-phase/src/weights.rs --template=./.maintain/frame-weight-template.hbs * cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_staking --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/staking/src/weights.rs --template=./.maintain/frame-weight-template.hbs * fix build and review comments. * Update frame/election-provider-multi-phase/src/lib.rs Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> * add comment Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com> Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Parity Benchmarking Bot <admin@parity.io> Co-authored-by: Peter Goodspeed-Niklaus <coriolinus@users.noreply.github.com>
This commit is contained in:
@@ -25,12 +25,9 @@ use sp_npos_elections::CompactSolution;
|
||||
use sp_runtime::traits::One;
|
||||
use frame_system::RawOrigin;
|
||||
pub use frame_benchmarking::{
|
||||
benchmarks,
|
||||
account,
|
||||
whitelisted_caller,
|
||||
whitelist_account,
|
||||
impl_benchmark_test_suite,
|
||||
benchmarks, account, whitelisted_caller, whitelist_account, impl_benchmark_test_suite,
|
||||
};
|
||||
|
||||
const SEED: u32 = 0;
|
||||
const MAX_SPANS: u32 = 100;
|
||||
const MAX_VALIDATORS: u32 = 1000;
|
||||
@@ -768,6 +765,39 @@ benchmarks! {
|
||||
).is_err()
|
||||
);
|
||||
}
|
||||
|
||||
get_npos_voters {
|
||||
// number of validator intention.
|
||||
let v in 200 .. 400;
|
||||
// number of nominator intention.
|
||||
let n in 200 .. 400;
|
||||
// total number of slashing spans. Assigned to validators randomly.
|
||||
let s in 1 .. 20;
|
||||
|
||||
let validators = create_validators_with_nominators_for_era::<T>(v, n, MAX_NOMINATIONS, false, None)?
|
||||
.into_iter()
|
||||
.map(|v| T::Lookup::lookup(v).unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
(0..s).for_each(|index| {
|
||||
add_slashing_spans::<T>(&validators[index as usize], 10);
|
||||
});
|
||||
}: {
|
||||
let voters = <Staking<T>>::get_npos_voters();
|
||||
assert_eq!(voters.len() as u32, v + n);
|
||||
}
|
||||
|
||||
get_npos_targets {
|
||||
// number of validator intention.
|
||||
let v in 200 .. 400;
|
||||
// number of nominator intention.
|
||||
let n = 500;
|
||||
|
||||
let _ = create_validators_with_nominators_for_era::<T>(v, n, MAX_NOMINATIONS, false, None)?;
|
||||
}: {
|
||||
let targets = <Staking<T>>::get_npos_targets();
|
||||
assert_eq!(targets.len() as u32, v);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -875,7 +905,6 @@ mod tests {
|
||||
assert_ok!(test_benchmark_submit_solution_weaker::<Test>());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
impl_benchmark_test_suite!(
|
||||
|
||||
@@ -331,7 +331,7 @@ use sp_npos_elections::{
|
||||
to_supports, EvaluateSupport, seq_phragmen, generate_solution_type, is_score_better, Supports,
|
||||
VoteWeight, CompactSolution, PerThing128,
|
||||
};
|
||||
use sp_election_providers::ElectionProvider;
|
||||
use frame_election_provider_support::{ElectionProvider, data_provider};
|
||||
pub use weights::WeightInfo;
|
||||
|
||||
const STAKING_ID: LockIdentifier = *b"staking ";
|
||||
@@ -800,7 +800,7 @@ pub trait Config: frame_system::Config + SendTransactionTypes<Call<Self>> {
|
||||
type CurrencyToVote: CurrencyToVote<BalanceOf<Self>>;
|
||||
|
||||
/// Something that provides the election functionality.
|
||||
type ElectionProvider: sp_election_providers::ElectionProvider<
|
||||
type ElectionProvider: frame_election_provider_support::ElectionProvider<
|
||||
Self::AccountId,
|
||||
Self::BlockNumber,
|
||||
// we only accept an election provider that has staking as data provider.
|
||||
@@ -3345,19 +3345,45 @@ impl<T: Config> Module<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config> sp_election_providers::ElectionDataProvider<T::AccountId, T::BlockNumber>
|
||||
impl<T: Config> frame_election_provider_support::ElectionDataProvider<T::AccountId, T::BlockNumber>
|
||||
for Module<T>
|
||||
{
|
||||
fn desired_targets() -> u32 {
|
||||
Self::validator_count()
|
||||
fn desired_targets() -> data_provider::Result<(u32, Weight)> {
|
||||
Ok((Self::validator_count(), <T as frame_system::Config>::DbWeight::get().reads(1)))
|
||||
}
|
||||
|
||||
fn voters() -> Vec<(T::AccountId, VoteWeight, Vec<T::AccountId>)> {
|
||||
Self::get_npos_voters()
|
||||
fn voters(
|
||||
maybe_max_len: Option<usize>,
|
||||
) -> data_provider::Result<(Vec<(T::AccountId, VoteWeight, Vec<T::AccountId>)>, Weight)> {
|
||||
// NOTE: reading these counts already needs to iterate a lot of storage keys, but they get
|
||||
// cached. This is okay for the case of `Ok(_)`, but bad for `Err(_)`, as the trait does not
|
||||
// report weight in failures.
|
||||
let nominator_count = <Nominators<T>>::iter().count();
|
||||
let validator_count = <Validators<T>>::iter().count();
|
||||
let voter_count = nominator_count.saturating_add(validator_count);
|
||||
|
||||
if maybe_max_len.map_or(false, |max_len| voter_count > max_len) {
|
||||
return Err("Voter snapshot too big");
|
||||
}
|
||||
|
||||
let slashing_span_count = <SlashingSpans<T>>::iter().count();
|
||||
let weight = T::WeightInfo::get_npos_voters(
|
||||
nominator_count as u32,
|
||||
validator_count as u32,
|
||||
slashing_span_count as u32,
|
||||
);
|
||||
Ok((Self::get_npos_voters(), weight))
|
||||
}
|
||||
|
||||
fn targets() -> Vec<T::AccountId> {
|
||||
Self::get_npos_targets()
|
||||
fn targets(maybe_max_len: Option<usize>) -> data_provider::Result<(Vec<T::AccountId>, Weight)> {
|
||||
let target_count = <Validators<T>>::iter().count();
|
||||
|
||||
if maybe_max_len.map_or(false, |max_len| target_count > max_len) {
|
||||
return Err("Target snapshot too big");
|
||||
}
|
||||
|
||||
let weight = <T as frame_system::Config>::DbWeight::get().reads(target_count as u64);
|
||||
Ok((Self::get_npos_targets(), weight))
|
||||
}
|
||||
|
||||
fn next_election_prediction(now: T::BlockNumber) -> T::BlockNumber {
|
||||
@@ -3391,15 +3417,45 @@ impl<T: Config> sp_election_providers::ElectionDataProvider<T::AccountId, T::Blo
|
||||
fn put_snapshot(
|
||||
voters: Vec<(T::AccountId, VoteWeight, Vec<T::AccountId>)>,
|
||||
targets: Vec<T::AccountId>,
|
||||
target_stake: Option<VoteWeight>,
|
||||
) {
|
||||
use sp_std::convert::TryFrom;
|
||||
targets.into_iter().for_each(|v| {
|
||||
let stake: BalanceOf<T> = target_stake
|
||||
.and_then(|w| <BalanceOf<T>>::try_from(w).ok())
|
||||
.unwrap_or(T::Currency::minimum_balance() * 100u32.into());
|
||||
<Bonded<T>>::insert(v.clone(), v.clone());
|
||||
<Ledger<T>>::insert(
|
||||
v.clone(),
|
||||
StakingLedger {
|
||||
stash: v.clone(),
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: vec![],
|
||||
claimed_rewards: vec![],
|
||||
},
|
||||
);
|
||||
<Validators<T>>::insert(
|
||||
v,
|
||||
ValidatorPrefs { commission: Perbill::zero(), blocked: false },
|
||||
);
|
||||
});
|
||||
|
||||
voters.into_iter().for_each(|(v, _s, t)| {
|
||||
voters.into_iter().for_each(|(v, s, t)| {
|
||||
let stake = <BalanceOf<T>>::try_from(s).unwrap_or_else(|_| {
|
||||
panic!("cannot convert a VoteWeight into BalanceOf, benchmark needs reconfiguring.")
|
||||
});
|
||||
<Bonded<T>>::insert(v.clone(), v.clone());
|
||||
<Ledger<T>>::insert(
|
||||
v.clone(),
|
||||
StakingLedger {
|
||||
stash: v.clone(),
|
||||
active: stake,
|
||||
total: stake,
|
||||
unlocking: vec![],
|
||||
claimed_rewards: vec![],
|
||||
},
|
||||
);
|
||||
<Nominators<T>>::insert(
|
||||
v,
|
||||
Nominations { targets: t, submitted_in: 0, suppressed: false },
|
||||
|
||||
@@ -37,7 +37,7 @@ use sp_runtime::{
|
||||
};
|
||||
use sp_staking::offence::{OffenceDetails, OnOffenceHandler};
|
||||
use std::{cell::RefCell, collections::HashSet};
|
||||
use sp_election_providers::onchain;
|
||||
use frame_election_provider_support::onchain;
|
||||
|
||||
pub const INIT_TIMESTAMP: u64 = 30_000;
|
||||
pub const BLOCK_TIME: u64 = 1000;
|
||||
@@ -243,6 +243,7 @@ impl OnUnbalanced<NegativeImbalanceOf<Test>> for RewardRemainderMock {
|
||||
impl onchain::Config for Test {
|
||||
type AccountId = AccountId;
|
||||
type BlockNumber = BlockNumber;
|
||||
type BlockWeights = BlockWeights;
|
||||
type Accuracy = Perbill;
|
||||
type DataProvider = Staking;
|
||||
}
|
||||
|
||||
@@ -521,6 +521,12 @@ mod test {
|
||||
fn kick(w: u32) -> Weight {
|
||||
unimplemented!()
|
||||
}
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32) -> Weight {
|
||||
unimplemented!()
|
||||
}
|
||||
fn get_npos_targets(v: u32) -> Weight {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -112,10 +112,10 @@ pub fn create_validators<T: Config>(
|
||||
/// - `nominators`: number of bonded nominators.
|
||||
/// - `edge_per_nominator`: number of edge (vote) per nominator.
|
||||
/// - `randomize_stake`: whether to randomize the stakes.
|
||||
/// - `to_nominate`: if `Some(n)`, only the first `n` bonded validator are voted upon.
|
||||
/// Else, all of them are considered and `edge_per_nominator` random validators are voted for.
|
||||
/// - `to_nominate`: if `Some(n)`, only the first `n` bonded validator are voted upon. Else, all of
|
||||
/// them are considered and `edge_per_nominator` random validators are voted for.
|
||||
///
|
||||
/// Return the validators choosen to be nominated.
|
||||
/// Return the validators chosen to be nominated.
|
||||
pub fn create_validators_with_nominators_for_era<T: Config>(
|
||||
validators: u32,
|
||||
nominators: u32,
|
||||
|
||||
@@ -5019,12 +5019,14 @@ fn do_not_die_when_active_is_ed() {
|
||||
|
||||
mod election_data_provider {
|
||||
use super::*;
|
||||
use sp_election_providers::ElectionDataProvider;
|
||||
use frame_election_provider_support::ElectionDataProvider;
|
||||
|
||||
#[test]
|
||||
fn voters_include_self_vote() {
|
||||
ExtBuilder::default().nominate(false).build().execute_with(|| {
|
||||
assert!(<Validators<Test>>::iter().map(|(x, _)| x).all(|v| Staking::voters()
|
||||
assert!(<Validators<Test>>::iter().map(|(x, _)| x).all(|v| Staking::voters(None)
|
||||
.unwrap()
|
||||
.0
|
||||
.into_iter()
|
||||
.find(|(w, _, t)| { v == *w && t[0] == *w })
|
||||
.is_some()))
|
||||
@@ -5036,7 +5038,9 @@ mod election_data_provider {
|
||||
ExtBuilder::default().build().execute_with(|| {
|
||||
assert_eq!(Staking::nominators(101).unwrap().targets, vec![11, 21]);
|
||||
assert_eq!(
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters()
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters(None)
|
||||
.unwrap()
|
||||
.0
|
||||
.iter()
|
||||
.find(|x| x.0 == 101)
|
||||
.unwrap()
|
||||
@@ -5050,7 +5054,9 @@ mod election_data_provider {
|
||||
// 11 is gone.
|
||||
start_active_era(2);
|
||||
assert_eq!(
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters()
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters(None)
|
||||
.unwrap()
|
||||
.0
|
||||
.iter()
|
||||
.find(|x| x.0 == 101)
|
||||
.unwrap()
|
||||
@@ -5061,7 +5067,9 @@ mod election_data_provider {
|
||||
// resubmit and it is back
|
||||
assert_ok!(Staking::nominate(Origin::signed(100), vec![11, 21]));
|
||||
assert_eq!(
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters()
|
||||
<Staking as ElectionDataProvider<AccountId, BlockNumber>>::voters(None)
|
||||
.unwrap()
|
||||
.0
|
||||
.iter()
|
||||
.find(|x| x.0 == 101)
|
||||
.unwrap()
|
||||
@@ -5071,6 +5079,14 @@ mod election_data_provider {
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn respects_len_limits() {
|
||||
ExtBuilder::default().build().execute_with(|| {
|
||||
assert_eq!(Staking::voters(Some(1)).unwrap_err(), "Voter snapshot too big");
|
||||
assert_eq!(Staking::targets(Some(1)).unwrap_err(), "Target snapshot too big");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn estimate_next_election_works() {
|
||||
ExtBuilder::default().session_per_era(5).period(5).build().execute_with(|| {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
//! Autogenerated weights for pallet_staking
|
||||
//!
|
||||
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
|
||||
//! DATE: 2021-02-13, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: [], HIGH RANGE: []
|
||||
//! DATE: 2021-03-14, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
|
||||
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
|
||||
|
||||
// Executed Command:
|
||||
@@ -69,161 +69,163 @@ pub trait WeightInfo {
|
||||
fn reap_stash(s: u32, ) -> Weight;
|
||||
fn new_era(v: u32, n: u32, ) -> Weight;
|
||||
fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight;
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight;
|
||||
fn get_npos_targets(v: u32, ) -> Weight;
|
||||
}
|
||||
|
||||
/// Weights for pallet_staking using the Substrate node and recommended hardware.
|
||||
pub struct SubstrateWeight<T>(PhantomData<T>);
|
||||
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
fn bond() -> Weight {
|
||||
(81_642_000 as Weight)
|
||||
(80_317_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(4 as Weight))
|
||||
}
|
||||
fn bond_extra() -> Weight {
|
||||
(66_025_000 as Weight)
|
||||
(64_495_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn unbond() -> Weight {
|
||||
(60_810_000 as Weight)
|
||||
(59_679_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn withdraw_unbonded_update(s: u32, ) -> Weight {
|
||||
(61_537_000 as Weight)
|
||||
(61_078_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((60_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add((40_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn withdraw_unbonded_kill(s: u32, ) -> Weight {
|
||||
(95_741_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((2_754_000 as Weight).saturating_mul(s as Weight))
|
||||
(95_129_000 as Weight)
|
||||
// Standard Error: 2_000
|
||||
.saturating_add((2_755_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(7 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn validate() -> Weight {
|
||||
(21_009_000 as Weight)
|
||||
(20_608_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn kick(k: u32, ) -> Weight {
|
||||
(31_832_000 as Weight)
|
||||
// Standard Error: 15_000
|
||||
.saturating_add((19_418_000 as Weight).saturating_mul(k as Weight))
|
||||
(33_365_000 as Weight)
|
||||
// Standard Error: 11_000
|
||||
.saturating_add((18_830_000 as Weight).saturating_mul(k as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(k as Weight)))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(k as Weight)))
|
||||
}
|
||||
fn nominate(n: u32, ) -> Weight {
|
||||
(34_304_000 as Weight)
|
||||
// Standard Error: 20_000
|
||||
.saturating_add((5_643_000 as Weight).saturating_mul(n as Weight))
|
||||
(33_885_000 as Weight)
|
||||
// Standard Error: 22_000
|
||||
.saturating_add((5_562_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn chill() -> Weight {
|
||||
(20_103_000 as Weight)
|
||||
(19_741_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn set_payee() -> Weight {
|
||||
(13_858_000 as Weight)
|
||||
(13_674_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn set_controller() -> Weight {
|
||||
(30_269_000 as Weight)
|
||||
(29_691_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().reads(3 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn set_validator_count() -> Weight {
|
||||
(2_444_000 as Weight)
|
||||
(2_375_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_no_eras() -> Weight {
|
||||
(2_766_000 as Weight)
|
||||
(2_601_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_new_era() -> Weight {
|
||||
(2_724_000 as Weight)
|
||||
(2_605_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_new_era_always() -> Weight {
|
||||
(2_702_000 as Weight)
|
||||
(2_584_000 as Weight)
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn set_invulnerables(v: u32, ) -> Weight {
|
||||
(2_914_000 as Weight)
|
||||
(2_725_000 as Weight)
|
||||
// Standard Error: 0
|
||||
.saturating_add((35_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_unstake(s: u32, ) -> Weight {
|
||||
(64_032_000 as Weight)
|
||||
// Standard Error: 2_000
|
||||
.saturating_add((2_787_000 as Weight).saturating_mul(s as Weight))
|
||||
(63_551_000 as Weight)
|
||||
// Standard Error: 7_000
|
||||
.saturating_add((2_844_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn cancel_deferred_slash(s: u32, ) -> Weight {
|
||||
(5_903_394_000 as Weight)
|
||||
(5_905_400_000 as Weight)
|
||||
// Standard Error: 391_000
|
||||
.saturating_add((34_834_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add((34_785_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn payout_stakers_dead_controller(n: u32, ) -> Weight {
|
||||
(141_724_000 as Weight)
|
||||
// Standard Error: 24_000
|
||||
.saturating_add((53_018_000 as Weight).saturating_mul(n as Weight))
|
||||
(142_264_000 as Weight)
|
||||
// Standard Error: 22_000
|
||||
.saturating_add((52_542_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(11 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn payout_stakers_alive_staked(n: u32, ) -> Weight {
|
||||
(159_994_000 as Weight)
|
||||
// Standard Error: 28_000
|
||||
.saturating_add((67_746_000 as Weight).saturating_mul(n as Weight))
|
||||
(180_166_000 as Weight)
|
||||
// Standard Error: 23_000
|
||||
.saturating_add((66_767_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(12 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn rebond(l: u32, ) -> Weight {
|
||||
(42_177_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((82_000 as Weight).saturating_mul(l as Weight))
|
||||
(42_577_000 as Weight)
|
||||
// Standard Error: 12_000
|
||||
.saturating_add((60_000 as Weight).saturating_mul(l as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn set_history_depth(e: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 65_000
|
||||
.saturating_add((34_151_000 as Weight).saturating_mul(e as Weight))
|
||||
// Standard Error: 68_000
|
||||
.saturating_add((33_362_000 as Weight).saturating_mul(e as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((7 as Weight).saturating_mul(e as Weight)))
|
||||
}
|
||||
fn reap_stash(s: u32, ) -> Weight {
|
||||
(68_377_000 as Weight)
|
||||
// Standard Error: 0
|
||||
.saturating_add((2_757_000 as Weight).saturating_mul(s as Weight))
|
||||
(68_474_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((2_770_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn new_era(v: u32, n: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 908_000
|
||||
.saturating_add((588_562_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 903_000
|
||||
.saturating_add((594_145_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 45_000
|
||||
.saturating_add((83_485_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add((83_373_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(9 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(v as Weight)))
|
||||
.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
@@ -233,172 +235,191 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 52_000
|
||||
.saturating_add((750_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add((1_460_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 20_000
|
||||
.saturating_add((556_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add((754_000 as Weight).saturating_mul(n as Weight))
|
||||
// Standard Error: 52_000
|
||||
.saturating_add((76_201_000 as Weight).saturating_mul(a as Weight))
|
||||
.saturating_add((74_798_000 as Weight).saturating_mul(a as Weight))
|
||||
// Standard Error: 108_000
|
||||
.saturating_add((7_271_000 as Weight).saturating_mul(w as Weight))
|
||||
.saturating_add((8_108_000 as Weight).saturating_mul(w as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(6 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(a as Weight)))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(w as Weight)))
|
||||
.saturating_add(T::DbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 94_000
|
||||
.saturating_add((29_321_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 94_000
|
||||
.saturating_add((66_885_000 as Weight).saturating_mul(n as Weight))
|
||||
// Standard Error: 1_283_000
|
||||
.saturating_add((22_991_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(v as Weight)))
|
||||
.saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn get_npos_targets(v: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 26_000
|
||||
.saturating_add((10_972_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(v as Weight)))
|
||||
}
|
||||
}
|
||||
|
||||
// For backwards compatibility and tests
|
||||
impl WeightInfo for () {
|
||||
fn bond() -> Weight {
|
||||
(81_642_000 as Weight)
|
||||
(80_317_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
|
||||
}
|
||||
fn bond_extra() -> Weight {
|
||||
(66_025_000 as Weight)
|
||||
(64_495_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn unbond() -> Weight {
|
||||
(60_810_000 as Weight)
|
||||
(59_679_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn withdraw_unbonded_update(s: u32, ) -> Weight {
|
||||
(61_537_000 as Weight)
|
||||
(61_078_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((60_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add((40_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn withdraw_unbonded_kill(s: u32, ) -> Weight {
|
||||
(95_741_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((2_754_000 as Weight).saturating_mul(s as Weight))
|
||||
(95_129_000 as Weight)
|
||||
// Standard Error: 2_000
|
||||
.saturating_add((2_755_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(7 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn validate() -> Weight {
|
||||
(21_009_000 as Weight)
|
||||
(20_608_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn kick(k: u32, ) -> Weight {
|
||||
(31_832_000 as Weight)
|
||||
// Standard Error: 15_000
|
||||
.saturating_add((19_418_000 as Weight).saturating_mul(k as Weight))
|
||||
(33_365_000 as Weight)
|
||||
// Standard Error: 11_000
|
||||
.saturating_add((18_830_000 as Weight).saturating_mul(k as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(k as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(k as Weight)))
|
||||
}
|
||||
fn nominate(n: u32, ) -> Weight {
|
||||
(34_304_000 as Weight)
|
||||
// Standard Error: 20_000
|
||||
.saturating_add((5_643_000 as Weight).saturating_mul(n as Weight))
|
||||
(33_885_000 as Weight)
|
||||
// Standard Error: 22_000
|
||||
.saturating_add((5_562_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn chill() -> Weight {
|
||||
(20_103_000 as Weight)
|
||||
(19_741_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn set_payee() -> Weight {
|
||||
(13_858_000 as Weight)
|
||||
(13_674_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn set_controller() -> Weight {
|
||||
(30_269_000 as Weight)
|
||||
(29_691_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn set_validator_count() -> Weight {
|
||||
(2_444_000 as Weight)
|
||||
(2_375_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_no_eras() -> Weight {
|
||||
(2_766_000 as Weight)
|
||||
(2_601_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_new_era() -> Weight {
|
||||
(2_724_000 as Weight)
|
||||
(2_605_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_new_era_always() -> Weight {
|
||||
(2_702_000 as Weight)
|
||||
(2_584_000 as Weight)
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn set_invulnerables(v: u32, ) -> Weight {
|
||||
(2_914_000 as Weight)
|
||||
(2_725_000 as Weight)
|
||||
// Standard Error: 0
|
||||
.saturating_add((35_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn force_unstake(s: u32, ) -> Weight {
|
||||
(64_032_000 as Weight)
|
||||
// Standard Error: 2_000
|
||||
.saturating_add((2_787_000 as Weight).saturating_mul(s as Weight))
|
||||
(63_551_000 as Weight)
|
||||
// Standard Error: 7_000
|
||||
.saturating_add((2_844_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn cancel_deferred_slash(s: u32, ) -> Weight {
|
||||
(5_903_394_000 as Weight)
|
||||
(5_905_400_000 as Weight)
|
||||
// Standard Error: 391_000
|
||||
.saturating_add((34_834_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add((34_785_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
|
||||
}
|
||||
fn payout_stakers_dead_controller(n: u32, ) -> Weight {
|
||||
(141_724_000 as Weight)
|
||||
// Standard Error: 24_000
|
||||
.saturating_add((53_018_000 as Weight).saturating_mul(n as Weight))
|
||||
(142_264_000 as Weight)
|
||||
// Standard Error: 22_000
|
||||
.saturating_add((52_542_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(11 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn payout_stakers_alive_staked(n: u32, ) -> Weight {
|
||||
(159_994_000 as Weight)
|
||||
// Standard Error: 28_000
|
||||
.saturating_add((67_746_000 as Weight).saturating_mul(n as Weight))
|
||||
(180_166_000 as Weight)
|
||||
// Standard Error: 23_000
|
||||
.saturating_add((66_767_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(12 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((5 as Weight).saturating_mul(n as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn rebond(l: u32, ) -> Weight {
|
||||
(42_177_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((82_000 as Weight).saturating_mul(l as Weight))
|
||||
(42_577_000 as Weight)
|
||||
// Standard Error: 12_000
|
||||
.saturating_add((60_000 as Weight).saturating_mul(l as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
|
||||
}
|
||||
fn set_history_depth(e: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 65_000
|
||||
.saturating_add((34_151_000 as Weight).saturating_mul(e as Weight))
|
||||
// Standard Error: 68_000
|
||||
.saturating_add((33_362_000 as Weight).saturating_mul(e as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((7 as Weight).saturating_mul(e as Weight)))
|
||||
}
|
||||
fn reap_stash(s: u32, ) -> Weight {
|
||||
(68_377_000 as Weight)
|
||||
// Standard Error: 0
|
||||
.saturating_add((2_757_000 as Weight).saturating_mul(s as Weight))
|
||||
(68_474_000 as Weight)
|
||||
// Standard Error: 1_000
|
||||
.saturating_add((2_770_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes(8 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(s as Weight)))
|
||||
}
|
||||
fn new_era(v: u32, n: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 908_000
|
||||
.saturating_add((588_562_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 903_000
|
||||
.saturating_add((594_145_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 45_000
|
||||
.saturating_add((83_485_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add((83_373_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(9 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(v as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
@@ -408,16 +429,35 @@ impl WeightInfo for () {
|
||||
fn submit_solution_better(v: u32, n: u32, a: u32, w: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 52_000
|
||||
.saturating_add((750_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add((1_460_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 20_000
|
||||
.saturating_add((556_000 as Weight).saturating_mul(n as Weight))
|
||||
.saturating_add((754_000 as Weight).saturating_mul(n as Weight))
|
||||
// Standard Error: 52_000
|
||||
.saturating_add((76_201_000 as Weight).saturating_mul(a as Weight))
|
||||
.saturating_add((74_798_000 as Weight).saturating_mul(a as Weight))
|
||||
// Standard Error: 108_000
|
||||
.saturating_add((7_271_000 as Weight).saturating_mul(w as Weight))
|
||||
.saturating_add((8_108_000 as Weight).saturating_mul(w as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(6 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(a as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(w as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
|
||||
}
|
||||
fn get_npos_voters(v: u32, n: u32, s: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 94_000
|
||||
.saturating_add((29_321_000 as Weight).saturating_mul(v as Weight))
|
||||
// Standard Error: 94_000
|
||||
.saturating_add((66_885_000 as Weight).saturating_mul(n as Weight))
|
||||
// Standard Error: 1_283_000
|
||||
.saturating_add((22_991_000 as Weight).saturating_mul(s as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(v as Weight)))
|
||||
.saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(n as Weight)))
|
||||
}
|
||||
fn get_npos_targets(v: u32, ) -> Weight {
|
||||
(0 as Weight)
|
||||
// Standard Error: 26_000
|
||||
.saturating_add((10_972_000 as Weight).saturating_mul(v as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
|
||||
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(v as Weight)))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user