Sanity check for Babe's configuration (#11385)

* Prevent div by zero in native babe code
* Additional sanity check for babe config
* Further sanity checks and postpone threshold computation
* Apply suggestions from code review
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
This commit is contained in:
Davide Galassi
2022-05-10 15:37:51 +02:00
committed by GitHub
parent 29c0c6a4a8
commit 07098c7d50
2 changed files with 23 additions and 8 deletions
+13 -2
View File
@@ -24,6 +24,7 @@
use codec::{Decode, Encode};
use frame_support::{
dispatch::DispatchResultWithPostInfo,
ensure,
traits::{
ConstU32, DisabledValidators, FindAuthor, Get, KeyOwnerProofSystem, OnTimestampSet,
OneSessionHandler,
@@ -42,8 +43,8 @@ use sp_std::prelude::*;
use sp_consensus_babe::{
digests::{NextConfigDescriptor, NextEpochDescriptor, PreDigest},
BabeAuthorityWeight, BabeEpochConfiguration, ConsensusLog, Epoch, EquivocationProof, Slot,
BABE_ENGINE_ID,
AllowedSlots, BabeAuthorityWeight, BabeEpochConfiguration, ConsensusLog, Epoch,
EquivocationProof, Slot, BABE_ENGINE_ID,
};
use sp_consensus_vrf::schnorrkel;
@@ -185,6 +186,8 @@ pub mod pallet {
InvalidKeyOwnershipProof,
/// A given equivocation report is valid but already previously reported.
DuplicateOffenceReport,
/// Submitted configuration is invalid.
InvalidConfiguration,
}
/// Current epoch index.
@@ -447,6 +450,14 @@ pub mod pallet {
config: NextConfigDescriptor,
) -> DispatchResult {
ensure_root(origin)?;
match config {
NextConfigDescriptor::V1 { c, allowed_slots } => {
ensure!(
(c.0 != 0 || allowed_slots != AllowedSlots::PrimarySlots) && c.1 != 0,
Error::<T>::InvalidConfiguration
);
},
}
PendingEpochConfigChange::<T>::put(config);
Ok(())
}