From 7784bdeffed5090637f90dc91c8f86023508f945 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Tue, 28 Apr 2020 12:50:40 +0200 Subject: [PATCH] Versioned NextConfigDescriptor for BABE (#5789) --- substrate/client/consensus/babe/src/lib.rs | 2 +- .../primitives/consensus/babe/src/digests.rs | 23 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/substrate/client/consensus/babe/src/lib.rs b/substrate/client/consensus/babe/src/lib.rs index e314e7a43c..028fe8e5e3 100644 --- a/substrate/client/consensus/babe/src/lib.rs +++ b/substrate/client/consensus/babe/src/lib.rs @@ -1065,7 +1065,7 @@ impl BlockImport for BabeBlockImport::FetchEpoch(parent_hash).into()) })?; - let epoch_config = next_config_digest.unwrap_or_else( + let epoch_config = next_config_digest.map(Into::into).unwrap_or_else( || viable_epoch.as_ref().config.clone() ); diff --git a/substrate/primitives/consensus/babe/src/digests.rs b/substrate/primitives/consensus/babe/src/digests.rs index f113912d83..141d6cf4bd 100644 --- a/substrate/primitives/consensus/babe/src/digests.rs +++ b/substrate/primitives/consensus/babe/src/digests.rs @@ -18,7 +18,7 @@ #[cfg(feature = "std")] use super::{BABE_ENGINE_ID, AuthoritySignature}; -use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEpochConfiguration}; +use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEpochConfiguration, AllowedSlots}; #[cfg(feature = "std")] use sp_runtime::{DigestItem, generic::OpaqueDigestItemId}; #[cfg(feature = "std")] @@ -183,7 +183,26 @@ pub struct NextEpochDescriptor { /// Information about the next epoch config, if changed. This is broadcast in the first /// block of the epoch, and applies using the same rules as `NextEpochDescriptor`. -pub type NextConfigDescriptor = BabeEpochConfiguration; +#[derive(Decode, Encode, PartialEq, Eq, Clone, RuntimeDebug)] +pub enum NextConfigDescriptor { + /// Version 1. + #[codec(index = "1")] + V1 { + /// Value of `c` in `BabeEpochConfiguration`. + c: (u64, u64), + /// Value of `allowed_slots` in `BabeEpochConfiguration`. + allowed_slots: AllowedSlots, + } +} + +impl From for BabeEpochConfiguration { + fn from(desc: NextConfigDescriptor) -> Self { + match desc { + NextConfigDescriptor::V1 { c, allowed_slots } => + Self { c, allowed_slots }, + } + } +} /// A digest item which is usable with BABE consensus. #[cfg(feature = "std")]