diff --git a/substrate/frame/elections-phragmen/src/benchmarking.rs b/substrate/frame/elections-phragmen/src/benchmarking.rs index ae98de4be7e4eabd68ec023d3b3160f90ac371ad..05e9df60c7fbeea0cc7e0d5db0ec67b58c1ea63e 100644 --- a/substrate/frame/elections-phragmen/src/benchmarking.rs +++ b/substrate/frame/elections-phragmen/src/benchmarking.rs @@ -39,7 +39,9 @@ type Lookup<T> = <<T as frame_system::Config>::Lookup as StaticLookup>::Source; /// grab new account with infinite balance. fn endowed_account<T: Config>(name: &'static str, index: u32) -> T::AccountId { let account: T::AccountId = account(name, index, 0); - let amount = default_stake::<T>(BALANCE_FACTOR); + // Fund each account with at-least his stake but still a sane amount as to not mess up + // the vote calculation. + let amount = default_stake::<T>(MAX_VOTERS) * BalanceOf::<T>::from(BALANCE_FACTOR); let _ = T::Currency::make_free_balance_be(&account, amount); // important to increase the total issuance since T::CurrencyToVote will need it to be sane for // phragmen to work. @@ -54,9 +56,9 @@ fn as_lookup<T: Config>(account: T::AccountId) -> Lookup<T> { } /// Get a reasonable amount of stake based on the execution trait's configuration -fn default_stake<T: Config>(factor: u32) -> BalanceOf<T> { - let factor = BalanceOf::<T>::from(factor); - T::Currency::minimum_balance() * factor +fn default_stake<T: Config>(num_votes: u32) -> BalanceOf<T> { + let min = T::Currency::minimum_balance(); + Elections::<T>::deposit_of(num_votes as usize).max(min) } /// Get the current number of candidates. @@ -88,7 +90,7 @@ fn submit_candidates_with_self_vote<T: Config>( prefix: &'static str, ) -> Result<Vec<T::AccountId>, &'static str> { let candidates = submit_candidates::<T>(c, prefix)?; - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(c); let _ = candidates .iter() .map(|c| submit_voter::<T>(c.clone(), vec![c.clone()], stake).map(|_| ())) @@ -112,7 +114,7 @@ fn distribute_voters<T: Config>( num_voters: u32, votes: usize, ) -> Result<(), &'static str> { - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(num_voters); for i in 0..num_voters { // to ensure that votes are different all_candidates.rotate_left(1); @@ -160,7 +162,7 @@ benchmarks! { let all_candidates = submit_candidates::<T>(v, "candidates")?; let caller = endowed_account::<T>("caller", 0); - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(v); // original votes. let mut votes = all_candidates; @@ -173,14 +175,15 @@ benchmarks! { }: vote(RawOrigin::Signed(caller), votes, stake) vote_more { - let v in 2 .. (MAXIMUM_VOTE as u32); + let v in 2 .. (MAXIMUM_VOTE as u32); clean::<T>(); // create a bunch of candidates. let all_candidates = submit_candidates::<T>(v, "candidates")?; let caller = endowed_account::<T>("caller", 0); - let stake = default_stake::<T>(BALANCE_FACTOR); + // Multiply the stake with 10 since we want to be able to divide it by 10 again. + let stake = default_stake::<T>(v) * BalanceOf::<T>::from(10u32); // original votes. let mut votes = all_candidates.iter().skip(1).cloned().collect::<Vec<_>>(); @@ -194,14 +197,14 @@ benchmarks! { }: vote(RawOrigin::Signed(caller), votes, stake / <BalanceOf<T>>::from(10u32)) vote_less { - let v in 2 .. (MAXIMUM_VOTE as u32); + let v in 2 .. (MAXIMUM_VOTE as u32); clean::<T>(); // create a bunch of candidates. let all_candidates = submit_candidates::<T>(v, "candidates")?; let caller = endowed_account::<T>("caller", 0); - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(v); // original votes. let mut votes = all_candidates; @@ -224,7 +227,7 @@ benchmarks! { let caller = endowed_account::<T>("caller", 0); - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(v); submit_voter::<T>(caller.clone(), all_candidates, stake)?; whitelist!(caller); @@ -238,7 +241,7 @@ benchmarks! { let m = T::DesiredMembers::get() + T::DesiredRunnersUp::get(); clean::<T>(); - let stake = default_stake::<T>(BALANCE_FACTOR); + let stake = default_stake::<T>(c); // create m members and runners combined. let _ = fill_seats_up_to::<T>(m)?; diff --git a/substrate/frame/elections-phragmen/src/weights.rs b/substrate/frame/elections-phragmen/src/weights.rs index 22c1c1cbeb4061f1df8f02ca45a1184ebf4d7bc2..e973334b833cc77fec984a338b2d0dad9f5e97d8 100644 --- a/substrate/frame/elections-phragmen/src/weights.rs +++ b/substrate/frame/elections-phragmen/src/weights.rs @@ -18,11 +18,11 @@ //! Autogenerated weights for pallet_elections_phragmen //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-01-30, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-03-29, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: -// ./target/production/substrate +// target/production/substrate // benchmark // --chain=dev // --steps=50 @@ -33,9 +33,7 @@ // --wasm-execution=compiled // --heap-pages=4096 // --output=./frame/elections-phragmen/src/weights.rs -// --template=.maintain/frame-weight-template.hbs -// --header=HEADER-APACHE2 -// --raw +// --template=./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] @@ -70,9 +68,9 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_equal(v: u32, ) -> Weight { - (23_406_000 as Weight) + (22_981_000 as Weight) // Standard Error: 6_000 - .saturating_add((270_000 as Weight).saturating_mul(v as Weight)) + .saturating_add((232_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -82,9 +80,9 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_more(v: u32, ) -> Weight { - (35_660_000 as Weight) - // Standard Error: 6_000 - .saturating_add((316_000 as Weight).saturating_mul(v as Weight)) + (36_170_000 as Weight) + // Standard Error: 8_000 + .saturating_add((219_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -94,16 +92,16 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_less(v: u32, ) -> Weight { - (35_999_000 as Weight) - // Standard Error: 6_000 - .saturating_add((299_000 as Weight).saturating_mul(v as Weight)) + (35_798_000 as Weight) + // Standard Error: 8_000 + .saturating_add((241_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn remove_voter() -> Weight { - (33_692_000 as Weight) + (33_060_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -111,17 +109,17 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Elections Members (r:1 w:0) // Storage: Elections RunnersUp (r:1 w:0) fn submit_candidacy(c: u32, ) -> Weight { - (35_506_000 as Weight) - // Standard Error: 1_000 - .saturating_add((192_000 as Weight).saturating_mul(c as Weight)) + (35_384_000 as Weight) + // Standard Error: 0 + .saturating_add((124_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: Elections Candidates (r:1 w:1) fn renounce_candidacy_candidate(c: u32, ) -> Weight { - (31_402_000 as Weight) + (31_555_000 as Weight) // Standard Error: 1_000 - .saturating_add((113_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((78_000 as Weight).saturating_mul(c as Weight)) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -131,13 +129,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Council Proposals (r:1 w:0) // Storage: Council Members (r:0 w:1) fn renounce_candidacy_members() -> Weight { - (42_727_000 as Weight) + (41_531_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } // Storage: Elections RunnersUp (r:1 w:1) fn renounce_candidacy_runners_up() -> Weight { - (30_638_000 as Weight) + (30_762_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -152,13 +150,13 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: Council Proposals (r:1 w:0) // Storage: Council Members (r:0 w:1) fn remove_member_with_replacement() -> Weight { - (49_317_000 as Weight) + (48_287_000 as Weight) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } // Storage: Elections RunnersUp (r:1 w:0) fn remove_member_wrong_refund() -> Weight { - (4_688_000 as Weight) + (4_747_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) } // Storage: Elections Voting (r:251 w:250) @@ -169,8 +167,8 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: System Account (r:250 w:250) fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight { (0 as Weight) - // Standard Error: 36_000 - .saturating_add((51_016_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 37_000 + .saturating_add((49_564_000 as Weight).saturating_mul(v as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(v as Weight))) .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(v as Weight))) @@ -186,12 +184,12 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> { // Storage: System Account (r:2 w:2) fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight { (0 as Weight) - // Standard Error: 1_760_000 - .saturating_add((29_569_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 732_000 - .saturating_add((51_842_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 49_000 - .saturating_add((3_546_000 as Weight).saturating_mul(e as Weight)) + // Standard Error: 1_656_000 + .saturating_add((29_011_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 689_000 + .saturating_add((49_204_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 47_000 + .saturating_add((3_352_000 as Weight).saturating_mul(e as Weight)) .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(v as Weight))) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) @@ -206,9 +204,9 @@ impl WeightInfo for () { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_equal(v: u32, ) -> Weight { - (23_406_000 as Weight) + (22_981_000 as Weight) // Standard Error: 6_000 - .saturating_add((270_000 as Weight).saturating_mul(v as Weight)) + .saturating_add((232_000 as Weight).saturating_mul(v as Weight)) .saturating_add(RocksDbWeight::get().reads(5 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -218,9 +216,9 @@ impl WeightInfo for () { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_more(v: u32, ) -> Weight { - (35_660_000 as Weight) - // Standard Error: 6_000 - .saturating_add((316_000 as Weight).saturating_mul(v as Weight)) + (36_170_000 as Weight) + // Standard Error: 8_000 + .saturating_add((219_000 as Weight).saturating_mul(v as Weight)) .saturating_add(RocksDbWeight::get().reads(5 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -230,16 +228,16 @@ impl WeightInfo for () { // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn vote_less(v: u32, ) -> Weight { - (35_999_000 as Weight) - // Standard Error: 6_000 - .saturating_add((299_000 as Weight).saturating_mul(v as Weight)) + (35_798_000 as Weight) + // Standard Error: 8_000 + .saturating_add((241_000 as Weight).saturating_mul(v as Weight)) .saturating_add(RocksDbWeight::get().reads(5 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } // Storage: Elections Voting (r:1 w:1) // Storage: Balances Locks (r:1 w:1) fn remove_voter() -> Weight { - (33_692_000 as Weight) + (33_060_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -247,17 +245,17 @@ impl WeightInfo for () { // Storage: Elections Members (r:1 w:0) // Storage: Elections RunnersUp (r:1 w:0) fn submit_candidacy(c: u32, ) -> Weight { - (35_506_000 as Weight) - // Standard Error: 1_000 - .saturating_add((192_000 as Weight).saturating_mul(c as Weight)) + (35_384_000 as Weight) + // Standard Error: 0 + .saturating_add((124_000 as Weight).saturating_mul(c as Weight)) .saturating_add(RocksDbWeight::get().reads(3 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: Elections Candidates (r:1 w:1) fn renounce_candidacy_candidate(c: u32, ) -> Weight { - (31_402_000 as Weight) + (31_555_000 as Weight) // Standard Error: 1_000 - .saturating_add((113_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((78_000 as Weight).saturating_mul(c as Weight)) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -267,13 +265,13 @@ impl WeightInfo for () { // Storage: Council Proposals (r:1 w:0) // Storage: Council Members (r:0 w:1) fn renounce_candidacy_members() -> Weight { - (42_727_000 as Weight) + (41_531_000 as Weight) .saturating_add(RocksDbWeight::get().reads(4 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } // Storage: Elections RunnersUp (r:1 w:1) fn renounce_candidacy_runners_up() -> Weight { - (30_638_000 as Weight) + (30_762_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -288,13 +286,13 @@ impl WeightInfo for () { // Storage: Council Proposals (r:1 w:0) // Storage: Council Members (r:0 w:1) fn remove_member_with_replacement() -> Weight { - (49_317_000 as Weight) + (48_287_000 as Weight) .saturating_add(RocksDbWeight::get().reads(5 as Weight)) .saturating_add(RocksDbWeight::get().writes(5 as Weight)) } // Storage: Elections RunnersUp (r:1 w:0) fn remove_member_wrong_refund() -> Weight { - (4_688_000 as Weight) + (4_747_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) } // Storage: Elections Voting (r:251 w:250) @@ -305,8 +303,8 @@ impl WeightInfo for () { // Storage: System Account (r:250 w:250) fn clean_defunct_voters(v: u32, _d: u32, ) -> Weight { (0 as Weight) - // Standard Error: 36_000 - .saturating_add((51_016_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 37_000 + .saturating_add((49_564_000 as Weight).saturating_mul(v as Weight)) .saturating_add(RocksDbWeight::get().reads(4 as Weight)) .saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(v as Weight))) .saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(v as Weight))) @@ -322,12 +320,12 @@ impl WeightInfo for () { // Storage: System Account (r:2 w:2) fn election_phragmen(c: u32, v: u32, e: u32, ) -> Weight { (0 as Weight) - // Standard Error: 1_760_000 - .saturating_add((29_569_000 as Weight).saturating_mul(c as Weight)) - // Standard Error: 732_000 - .saturating_add((51_842_000 as Weight).saturating_mul(v as Weight)) - // Standard Error: 49_000 - .saturating_add((3_546_000 as Weight).saturating_mul(e as Weight)) + // Standard Error: 1_656_000 + .saturating_add((29_011_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 689_000 + .saturating_add((49_204_000 as Weight).saturating_mul(v as Weight)) + // Standard Error: 47_000 + .saturating_add((3_352_000 as Weight).saturating_mul(e as Weight)) .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(c as Weight))) .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(v as Weight))) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(c as Weight)))