Phragmen solution should submit for current era and be checked… (#5583)

* submit solution for current era

* add test

* address comment

* fix tests
This commit is contained in:
thiolliere
2020-04-14 16:04:25 +02:00
committed by GitHub
parent 1e1b0e2767
commit 57659b8cf4
4 changed files with 47 additions and 39 deletions
+1 -1
View File
@@ -2327,7 +2327,7 @@ impl<T: Trait> Module<T> {
);
// check current era.
if let Some(current_era) = Self::active_era().map(|e| e.index) {
if let Some(current_era) = Self::current_era() {
ensure!(
current_era == era,
Error::<T>::PhragmenEarlySubmission,
+8
View File
@@ -506,6 +506,10 @@ pub type Session = pallet_session::Module<Test>;
pub type Timestamp = pallet_timestamp::Module<Test>;
pub type Staking = Module<Test>;
pub(crate) fn current_era() -> EraIndex {
Staking::current_era().unwrap()
}
fn post_conditions() {
check_nominators();
check_exposures();
@@ -649,9 +653,13 @@ pub(crate) fn start_session(session_index: SessionIndex) {
assert_eq!(Session::current_index(), session_index);
}
// This start and activate the era given.
// Because the mock use pallet-session which delays session by one, this will be one session after
// the election happened, not the first session after the election has happened.
pub(crate) fn start_era(era_index: EraIndex) {
start_session((era_index * <SessionsPerEra as Get<u32>>::get()).into());
assert_eq!(Staking::current_era().unwrap(), era_index);
assert_eq!(Staking::active_era().unwrap().index, era_index);
}
pub(crate) fn current_total_payout_for_duration(duration: u64) -> Balance {
@@ -113,15 +113,15 @@ pub(crate) fn compute_offchain_election<T: Trait>() -> Result<(), OffchainElecti
// process and prepare it for submission.
let (winners, compact, score) = prepare_submission::<T>(assignments, winners, true)?;
// defensive-only: active era can never be none except genesis.
let era = <Module<T>>::active_era().map(|e| e.index).unwrap_or_default();
// defensive-only: current era can never be none except genesis.
let current_era = <Module<T>>::current_era().unwrap_or_default();
// send it.
let call: <T as Trait>::Call = Call::submit_election_solution_unsigned(
winners,
compact,
score,
era,
current_era,
).into();
T::SubmitTransaction::submit_unsigned(call)
+35 -35
View File
@@ -1847,20 +1847,20 @@ fn era_is_always_same_length() {
let session_per_era = <SessionsPerEra as Get<SessionIndex>>::get();
mock::start_era(1);
assert_eq!(Staking::eras_start_session_index(active_era()).unwrap(), session_per_era);
assert_eq!(Staking::eras_start_session_index(current_era()).unwrap(), session_per_era);
mock::start_era(2);
assert_eq!(Staking::eras_start_session_index(active_era()).unwrap(), session_per_era * 2u32);
assert_eq!(Staking::eras_start_session_index(current_era()).unwrap(), session_per_era * 2u32);
let session = Session::current_index();
ForceEra::put(Forcing::ForceNew);
advance_session();
advance_session();
assert_eq!(Staking::active_era().unwrap().index, 3);
assert_eq!(Staking::eras_start_session_index(active_era()).unwrap(), session + 2);
assert_eq!(current_era(), 3);
assert_eq!(Staking::eras_start_session_index(current_era()).unwrap(), session + 2);
mock::start_era(4);
assert_eq!(Staking::eras_start_session_index(active_era()).unwrap(), session + 2u32 + session_per_era);
assert_eq!(Staking::eras_start_session_index(current_era()).unwrap(), session + 2u32 + session_per_era);
});
}
@@ -2912,7 +2912,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
let queued_result = Staking::queued_elected().unwrap();
@@ -2955,7 +2955,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
let queued_result = Staking::queued_elected().unwrap();
@@ -3005,7 +3005,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenEarlySubmission,
);
@@ -3031,7 +3031,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
// a bad solution
@@ -3042,7 +3042,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenWeakSubmission,
);
@@ -3068,7 +3068,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
// a better solution
@@ -3078,7 +3078,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
})
}
@@ -3116,7 +3116,7 @@ mod offchain_phragmen {
TransactionValidity::Ok(ValidTransaction {
priority: (1 << 20) + 1125, // the proposed slot stake.
requires: vec![],
provides: vec![("StakingOffchain", active_era()).encode()],
provides: vec![("StakingOffchain", current_era()).encode()],
longevity: 3,
propagate: false,
})
@@ -3140,7 +3140,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),);
// now run the offchain worker in the same chain state.
@@ -3191,7 +3191,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusWinnerCount,
);
@@ -3222,7 +3222,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusWinnerCount,
);
@@ -3251,7 +3251,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),);
})
}
@@ -3282,7 +3282,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusCompact,
);
@@ -3315,7 +3315,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusCompact,
);
@@ -3347,7 +3347,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusWinner,
);
@@ -3383,7 +3383,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusEdge,
);
@@ -3419,7 +3419,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusSelfVote,
);
@@ -3455,7 +3455,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusSelfVote,
);
@@ -3490,7 +3490,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusCompact,
);
@@ -3532,7 +3532,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusNomination,
);
@@ -3560,7 +3560,7 @@ mod offchain_phragmen {
run_to_block(20);
// slash 10. This must happen outside of the election window.
let offender_expo = Staking::eras_stakers(active_era(), 11);
let offender_expo = Staking::eras_stakers(Staking::active_era().unwrap().index, 11);
on_offence_now(
&[OffenceDetails {
offender: (11, offender_expo.clone()),
@@ -3595,7 +3595,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
));
// a wrong solution.
@@ -3614,7 +3614,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenSlashedNomination,
);
@@ -3642,7 +3642,7 @@ mod offchain_phragmen {
winners,
compact,
score,
active_era(),
current_era(),
),
Error::<Test>::PhragmenBogusScore,
);
@@ -3729,7 +3729,7 @@ mod offchain_phragmen {
run_to_block(12);
assert_eq!(Staking::era_election_status(), ElectionStatus::Open(12));
let offender_expo = Staking::eras_stakers(active_era(), 10);
let offender_expo = Staking::eras_stakers(Staking::active_era().unwrap().index, 10);
// panic from the impl in mock
on_offence_now(
@@ -3754,8 +3754,8 @@ fn slash_kicks_validators_not_nominators_and_disables_nominator_for_kicked_valid
assert_eq!(Balances::free_balance(101), 2000);
// 11 and 21 both have the support of 100
let exposure_11 = Staking::eras_stakers(active_era(), &11);
let exposure_21 = Staking::eras_stakers(active_era(), &21);
let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11);
let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21);
assert_eq!(exposure_11.total, 1000 + 125);
assert_eq!(exposure_21.total, 1000 + 375);
@@ -3795,8 +3795,8 @@ fn slash_kicks_validators_not_nominators_and_disables_nominator_for_kicked_valid
assert_ok!(Staking::validate(Origin::signed(10), Default::default()));
mock::start_era(2);
let exposure_11 = Staking::eras_stakers(active_era(), &11);
let exposure_21 = Staking::eras_stakers(active_era(), &21);
let exposure_11 = Staking::eras_stakers(Staking::active_era().unwrap().index, &11);
let exposure_21 = Staking::eras_stakers(Staking::active_era().unwrap().index, &21);
// 10 is re-elected, but without the support of 100
assert_eq!(exposure_11.total, 900);
@@ -3897,7 +3897,7 @@ fn zero_slash_keeps_nominators() {
assert_eq!(Balances::free_balance(11), 1000);
let exposure = Staking::eras_stakers(active_era(), 11);
let exposure = Staking::eras_stakers(Staking::active_era().unwrap().index, 11);
assert_eq!(Balances::free_balance(101), 2000);
on_offence_now(