diff --git a/substrate/substrate/runtime/session/src/lib.rs b/substrate/substrate/runtime/session/src/lib.rs index 06368d651e2b1e1f46f635192a5a761ae80f661f..9870b81f9a3a0a3e0796d27a2ef0744ba565710e 100644 --- a/substrate/substrate/runtime/session/src/lib.rs +++ b/substrate/substrate/runtime/session/src/lib.rs @@ -232,17 +232,6 @@ impl<T: Trait> Module<T> { let block_number = <system::Module<T>>::block_number(); length_minus_1 - (block_number - Self::last_length_change() + length_minus_1) % length } - - /// Returns `true` if the current validator set is taking took long to validate blocks. - pub fn broken_validation() -> bool { - let now = <timestamp::Module<T>>::get(); - let block_period = <timestamp::Module<T>>::block_period(); - let blocks_remaining = Self::blocks_remaining(); - let blocks_remaining = <T::Moment as As<T::BlockNumber>>::sa(blocks_remaining); - now + blocks_remaining * block_period > - Self::current_start() + Self::ideal_session_duration() * - (T::Moment::sa(100) + Self::broken_percent_late()) / T::Moment::sa(100) - } } impl<T: Trait> Executable for Module<T> { @@ -358,7 +347,7 @@ mod tests { } #[test] - fn should_identify_broken_validation() { + fn should_rotate_on_bad_validators() { with_externalities(&mut new_test_ext(), || { System::set_block_number(2); assert_eq!(Session::blocks_remaining(), 0); @@ -370,18 +359,16 @@ mod tests { assert_eq!(Session::current_start(), 0); assert_eq!(Session::ideal_session_duration(), 15); // ideal end = 0 + 15 * 3 = 15 - // broken_limit = 15 * 130 / 100 = 19 System::set_block_number(3); assert_eq!(Session::blocks_remaining(), 2); - Timestamp::set_timestamp(9); // earliest end = 9 + 2 * 5 = 19; OK. - assert!(!Session::broken_validation()); + Timestamp::set_timestamp(9); // no bad validators. session not rotated. Session::check_rotate_session(); System::set_block_number(4); + ::system::ExtrinsicIndex::<Test>::put(1); assert_eq!(Session::blocks_remaining(), 1); - Timestamp::set_timestamp(15); // another 1 second late. earliest end = 15 + 1 * 5 = 20; broken. - assert!(Session::broken_validation()); + Session::note_offline(&0, vec![1]).unwrap(); // bad validator -> session rotate Session::check_rotate_session(); assert_eq!(Session::current_index(), 2); }); diff --git a/substrate/substrate/runtime/staking/src/tests.rs b/substrate/substrate/runtime/staking/src/tests.rs index ef9fa4faa517309889db502f6fd08a3782275f6c..36549d534f74c80fdf07a69d4a1c208698134eb3 100644 --- a/substrate/substrate/runtime/staking/src/tests.rs +++ b/substrate/substrate/runtime/staking/src/tests.rs @@ -87,7 +87,8 @@ fn slashing_should_work() { assert_eq!(Staking::voting_balance(&10), 21); System::set_block_number(7); - Timestamp::set_timestamp(100); // way too late - early exit. + ::system::ExtrinsicIndex::<Test>::put(1); + Session::note_offline(&0, vec![0]).unwrap(); // val 10 reported bad. Session::check_rotate_session(); assert_eq!(Staking::current_era(), 1); assert_eq!(Session::current_index(), 3); @@ -310,9 +311,9 @@ fn nominating_slashes_should_work() { assert_eq!(Staking::voting_balance(&4), 40); System::set_block_number(5); - Timestamp::set_timestamp(100); // late + ::system::ExtrinsicIndex::<Test>::put(1); + Session::note_offline(&0, vec![0, 1]).unwrap(); // both get reported offline. assert_eq!(Session::blocks_remaining(), 1); - assert!(Session::broken_validation()); Session::check_rotate_session(); assert_eq!(Staking::current_era(), 2); @@ -388,7 +389,6 @@ fn staking_eras_work() { // Block 6: No change. System::set_block_number(6); - assert!(!Session::broken_validation()); Session::check_rotate_session(); assert_eq!(Session::current_index(), 6); assert_eq!(Staking::sessions_per_era(), 3);