staking: only disable slashed validators and keep them disabled for whole era (#9448)

* session: remove disabled validators threshold logic

* staking: add logic to track offending validators

* staking: disable validators for the whole era

* frame: fix tests

* staking: add tests for disabling validators handling

* staking: fix adding offending validator when already slashed in era

* address review comments

* session, staking: add comments about sorted vecs

Co-authored-by: Andronik Ordian <write@reusable.software>
This commit is contained in:
André Silva
2021-10-06 17:22:34 +01:00
committed by GitHub
parent 12e9e7ceb3
commit 7e5c022aea
25 changed files with 282 additions and 134 deletions
+1 -7
View File
@@ -29,7 +29,6 @@ use sp_runtime::{
impl_opaque_keys,
testing::{Header, UintAuthorityId},
traits::{BlakeTwo256, ConvertInto, IdentityLookup},
Perbill,
};
use sp_staking::SessionIndex;
@@ -144,7 +143,7 @@ impl SessionHandler<u64> for TestSessionHandler {
.collect()
});
}
fn on_disabled(_validator_index: usize) {
fn on_disabled(_validator_index: u32) {
DISABLED.with(|l| *l.borrow_mut() = true)
}
fn on_before_session_ending() {
@@ -269,10 +268,6 @@ impl pallet_timestamp::Config for Test {
type WeightInfo = ();
}
parameter_types! {
pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(33);
}
impl Config for Test {
type ShouldEndSession = TestShouldEndSession;
#[cfg(feature = "historical")]
@@ -284,7 +279,6 @@ impl Config for Test {
type ValidatorIdOf = ConvertInto;
type Keys = MockSessionKeys;
type Event = Event;
type DisabledValidatorsThreshold = DisabledValidatorsThreshold;
type NextSessionRotation = ();
type WeightInfo = ();
}