diff --git a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs index 68a8449a887e..a42a73a2e734 100644 --- a/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs +++ b/substrate/frame/election-provider-multi-phase/test-staking-e2e/src/mock.rs @@ -815,7 +815,7 @@ pub(crate) fn add_slash(who: &AccountId) { // Slashes enough validators to cross the `Staking::OffendingValidatorsThreshold`. pub(crate) fn slash_through_offending_threshold() { let validators = Session::validators(); - let mut remaining_slashes = pallet_staking::disabling_threshold(validators.len()); + let mut remaining_slashes = pallet_staking::disabling_limit(validators.len()); for v in validators.into_iter() { if remaining_slashes != 0 { diff --git a/substrate/frame/staking/src/lib.rs b/substrate/frame/staking/src/lib.rs index aa25fe1af0de..8394fb6173f1 100644 --- a/substrate/frame/staking/src/lib.rs +++ b/substrate/frame/staking/src/lib.rs @@ -329,7 +329,7 @@ pub use sp_staking::{Exposure, IndividualExposure, StakerStatus}; use sp_std::{collections::btree_map::BTreeMap, prelude::*}; pub use weights::WeightInfo; -pub use pallet::{disabling_threshold, pallet::*, UseNominatorsAndValidatorsMap, UseValidatorsMap}; +pub use pallet::{disabling_limit, pallet::*, UseNominatorsAndValidatorsMap, UseValidatorsMap}; pub(crate) const STAKING_ID: LockIdentifier = *b"staking "; pub(crate) const LOG_TARGET: &str = "runtime::staking"; diff --git a/substrate/frame/staking/src/pallet/mod.rs b/substrate/frame/staking/src/pallet/mod.rs index 8cae69f416cf..c6611d21a22f 100644 --- a/substrate/frame/staking/src/pallet/mod.rs +++ b/substrate/frame/staking/src/pallet/mod.rs @@ -1873,8 +1873,8 @@ fn is_sorted_and_unique(list: &[u32]) -> bool { list.windows(2).all(|w| w[0] < w[1]) } -/// Disabling threshold calculated from the total number of validators in the active set. When -/// reached no more validators will be disabled. -pub fn disabling_threshold(validators_len: usize) -> usize { +/// Disabling limit calculated from the total number of validators in the active set. When reached +/// no more validators will be disabled. +pub fn disabling_limit(validators_len: usize) -> usize { validators_len.saturating_sub(1) / 3 } diff --git a/substrate/frame/staking/src/slashing.rs b/substrate/frame/staking/src/slashing.rs index 0f9759fd4144..08bce185b0c6 100644 --- a/substrate/frame/staking/src/slashing.rs +++ b/substrate/frame/staking/src/slashing.rs @@ -50,7 +50,7 @@ //! Based on research at use crate::{ - pallet::disabling_threshold, BalanceOf, Config, DisabledValidators, Error, Exposure, + pallet::disabling_limit, BalanceOf, Config, DisabledValidators, Error, Exposure, NegativeImbalanceOf, NominatorSlashInEra, Pallet, Perbill, SessionInterface, SpanSlash, UnappliedSlash, ValidatorSlashInEra, }; @@ -336,7 +336,7 @@ fn add_offending_validator(stash: &T::AccountId) { // this is a new offending validator // we don't want to disable too many validators otherwise we will break consensus - if offending.len() >= disabling_threshold(validators.len()) as usize { + if offending.len() >= disabling_limit(validators.len()) as usize { return } diff --git a/substrate/frame/staking/src/tests.rs b/substrate/frame/staking/src/tests.rs index 81ce61faac2a..27c163a88227 100644 --- a/substrate/frame/staking/src/tests.rs +++ b/substrate/frame/staking/src/tests.rs @@ -3424,7 +3424,7 @@ fn offence_threshold_doesnt_trigger_new_era() { mock::start_active_era(1); assert_eq_uvec!(Session::validators(), vec![11, 21, 31, 41]); - assert_eq!(crate::disabling_threshold(Session::validators().len()), 1); + assert_eq!(crate::disabling_limit(Session::validators().len()), 1); // we have 4 validators and an offending validator threshold of 1/3, // even if the third validator commits an offence a new era should not be forced