Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Bring back the on_finalize weight of staking. #8463

Merged
13 commits merged into from
Mar 29, 2021
16 changes: 8 additions & 8 deletions frame/election-provider-multi-phase/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -381,11 +381,11 @@ impl Default for ElectionCompute {
#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)]
pub struct RawSolution<C> {
/// Compact election edges.
compact: C,
pub compact: C,
/// The _claimed_ score of the solution.
score: ElectionScore,
pub score: ElectionScore,
/// The round at which this solution should be submitted.
round: u32,
pub round: u32,
}

impl<C: Default> Default for RawSolution<C> {
Expand All @@ -402,13 +402,13 @@ pub struct ReadySolution<A> {
///
/// This is target-major vector, storing each winners, total backing, and each individual
/// backer.
supports: Supports<A>,
pub supports: Supports<A>,
/// The score of the solution.
///
/// This is needed to potentially challenge the solution.
score: ElectionScore,
pub score: ElectionScore,
/// How this election was computed.
compute: ElectionCompute,
pub compute: ElectionCompute,
}

/// A snapshot of all the data that is needed for en entire round. They are provided by
Expand All @@ -432,10 +432,10 @@ pub struct RoundSnapshot<A> {
pub struct SolutionOrSnapshotSize {
/// The length of voters.
#[codec(compact)]
voters: u32,
pub voters: u32,
/// The length of targets.
#[codec(compact)]
targets: u32,
pub targets: u32,
}

/// Internal errors of the pallet.
Expand Down
22 changes: 18 additions & 4 deletions frame/election-provider-multi-phase/src/unsigned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,16 @@ impl<T: Config> Pallet<T> {
size,
T::MinerMaxWeight::get(),
);

log!(
debug,
"miner: current compact solution voters = {}, maximum_allowed = {}",
"initial solution voters = {}, snapshot = {:?}, maximum_allowed(capped) = {}",
compact.voter_count(),
size,
maximum_allowed_voters,
);

// trim weight.
let compact = Self::trim_compact(maximum_allowed_voters, compact, &voter_index)?;

// re-calc score.
Expand Down Expand Up @@ -252,10 +256,12 @@ impl<T: Config> Pallet<T> {
}
}

log!(debug, "removed {} voter to meet the max weight limit.", to_remove);
Ok(compact)
}
_ => {
// nada, return as-is
log!(debug, "didn't remove any voter for weight limits.");
Ok(compact)
}
}
Expand Down Expand Up @@ -298,6 +304,7 @@ impl<T: Config> Pallet<T> {
// First binary-search the right amount of voters
let mut step = voters / 2;
let mut current_weight = weight_with(voters);

while step > 0 {
match next_voters(current_weight, voters, step) {
// proceed with the binary search
Expand All @@ -324,13 +331,20 @@ impl<T: Config> Pallet<T> {
voters -= 1;
}

let final_decision = voters.min(size.voters);
debug_assert!(
weight_with(voters.min(size.voters)) <= max_weight,
weight_with(final_decision) <= max_weight,
"weight_with({}) <= {}",
voters.min(size.voters),
final_decision,
max_weight,
);
debug_assert!(
weight_with(final_decision + 1) > max_weight,
"weight_with({} + 1) > {}",
final_decision,
max_weight,
);
voters.min(size.voters)
final_decision
}

/// Checks if an execution of the offchain worker is permitted at the given block number, or
Expand Down
1 change: 0 additions & 1 deletion frame/elections-phragmen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1308,7 +1308,6 @@ mod tests {
}

fn has_lock(who: &u64) -> u64 {
dbg!(Balances::locks(who));
Balances::locks(who)
.get(0)
.cloned()
Expand Down
5 changes: 5 additions & 0 deletions frame/staking/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1205,6 +1205,11 @@ decl_module! {
}
}

fn on_initialize(_now: T::BlockNumber) -> Weight {
// just return the weight of the on_finalize
T::DbWeight::get().reads_writes(1, 1)
}

fn on_finalize() {
// Set the start of the first era.
if let Some(mut active_era) = Self::active_era() {
Expand Down
8 changes: 8 additions & 0 deletions frame/staking/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3693,6 +3693,14 @@ fn do_not_die_when_active_is_ed() {
})
}

#[test]
fn on_finalize_weight_is_nonzero() {
ExtBuilder::default().build_and_execute(|| {
let on_finalize_weight = <Test as frame_system::Config>::DbWeight::get().reads_writes(1, 1);
assert!(Staking::on_initialize(1) >= on_finalize_weight);
})
}

mod election_data_provider {
use super::*;
use frame_election_provider_support::ElectionDataProvider;
Expand Down