[Staking] Adds a round check at signed solution submission (#2690)

This PR adds a round check to the `Call::submit` extrinsic to make sure
that the solution submission has been prepared for the current election
round and avoid penalties for delayed submissions.

Related to
https://github.com/paritytech-secops/srlabs_findings/issues/329

---------

Co-authored-by: command-bot <>
This commit is contained in:
Gonçalo Pestana
2023-12-13 17:49:43 +01:00
committed by GitHub
parent 6ff50526a7
commit cc846cc296
3 changed files with 46 additions and 0 deletions
@@ -1024,6 +1024,7 @@ pub mod pallet {
// ensure solution is timely.
ensure!(Self::current_phase().is_signed(), Error::<T>::PreDispatchEarlySubmission);
ensure!(raw_solution.round == Self::round(), Error::<T>::PreDispatchDifferentRound);
// NOTE: this is the only case where having separate snapshot would have been better
// because could do just decode_len. But we can create abstractions to do this.
@@ -1197,6 +1198,8 @@ pub mod pallet {
BoundNotMet,
/// Submitted solution has too many winners
TooManyWinners,
/// Sumission was prepared for a different round.
PreDispatchDifferentRound,
}
#[pallet::validate_unsigned]