diff --git a/frame/election-provider-multi-phase/src/lib.rs b/frame/election-provider-multi-phase/src/lib.rs index 1609ffa3beef0..5545b3961124a 100644 --- a/frame/election-provider-multi-phase/src/lib.rs +++ b/frame/election-provider-multi-phase/src/lib.rs @@ -381,11 +381,11 @@ impl Default for ElectionCompute { #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)] pub struct RawSolution { /// 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 Default for RawSolution { @@ -402,13 +402,13 @@ pub struct ReadySolution { /// /// This is target-major vector, storing each winners, total backing, and each individual /// backer. - supports: Supports, + pub supports: Supports, /// 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 @@ -432,10 +432,10 @@ pub struct RoundSnapshot { 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. diff --git a/frame/election-provider-multi-phase/src/unsigned.rs b/frame/election-provider-multi-phase/src/unsigned.rs index b570c4482814b..280907ac5439a 100644 --- a/frame/election-provider-multi-phase/src/unsigned.rs +++ b/frame/election-provider-multi-phase/src/unsigned.rs @@ -168,12 +168,16 @@ impl Pallet { 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. @@ -252,10 +256,12 @@ impl Pallet { } } + 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) } } @@ -298,6 +304,7 @@ impl Pallet { // 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 @@ -324,13 +331,14 @@ impl Pallet { 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, ); - voters.min(size.voters) + final_decision } /// Checks if an execution of the offchain worker is permitted at the given block number, or diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 5031cb57e6428..84b7a068c5f2d 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -1308,7 +1308,6 @@ mod tests { } fn has_lock(who: &u64) -> u64 { - dbg!(Balances::locks(who)); Balances::locks(who) .get(0) .cloned() diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 31735f75ebc14..c2733c20db7eb 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -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(1) + } + fn on_finalize() { // Set the start of the first era. if let Some(mut active_era) = Self::active_era() { diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index df3456bf29926..8237e224ff08d 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -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 = ::DbWeight::get().reads(1); + assert!(Staking::on_initialize(1) >= on_finalize_weight); + }) +} + mod election_data_provider { use super::*; use frame_election_provider_support::ElectionDataProvider;