node: Update BABE protocol parameters (#3211)

* node: update babe parameters to target 6 second block time

* node: add comment on MILLISECS_PER_BLOCK constant
This commit is contained in:
André Silva
2019-07-26 13:19:04 +01:00
committed by DemiMarie-parity
parent 5220ccbf20
commit 2b021ba4f1
3 changed files with 27 additions and 4 deletions
+20 -1
View File
@@ -29,9 +29,28 @@ pub mod currency {
pub mod time {
use node_primitives::Moment;
/// Since BABE is probabilistic this is the average expected block time that
/// we are targetting. Blocks will be produced at a minimum duration defined
/// by `SLOT_DURATION`, but some slots will not be allocated to any
/// authority and hence no block will be produced. We expect to have this
/// block time on average following the defined slot duration and the value
/// of `c` configured for BABE.
/// This value is only used indirectly to define the unit constants below
/// that are expressed in blocks. The rest of the code should use
/// `SLOT_DURATION` instead (like the timestamp module for calculating the
/// minimum period).
/// <https://research.web3.foundation/en/latest/polkadot/BABE/Babe/#6-practical-results>
pub const MILLISECS_PER_BLOCK: Moment = 6000;
pub const SECS_PER_BLOCK: Moment = MILLISECS_PER_BLOCK / 1000;
pub const SLOT_DURATION: Moment = 6000;
pub const SLOT_DURATION: Moment = 1650;
pub const EPOCH_DURATION_IN_BLOCKS: Moment = 10 * MINUTES;
pub const EPOCH_DURATION_IN_SLOTS: Moment = {
const SLOT_FILL_RATE: f64 = MILLISECS_PER_BLOCK as f64 / SLOT_DURATION as f64;
(EPOCH_DURATION_IN_BLOCKS as f64 * SLOT_FILL_RATE) as Moment
};
// These time units are defined in number of blocks.
pub const MINUTES: Moment = 60 / SECS_PER_BLOCK;
+6 -2
View File
@@ -127,7 +127,7 @@ impl system::Trait for Runtime {
}
parameter_types! {
pub const EpochDuration: u64 = 10 * MINUTES;
pub const EpochDuration: u64 = EPOCH_DURATION_IN_SLOTS;
}
impl babe::Trait for Runtime {
@@ -517,10 +517,14 @@ impl_runtime_apis! {
impl babe_primitives::BabeApi<Block> for Runtime {
fn startup_data() -> babe_primitives::BabeConfiguration {
// The choice of `c` parameter is done in accordance to
// the slot duration and expected target block time, for
// safely resisting network delays of maximum two seconds.
// <https://research.web3.foundation/en/latest/polkadot/BABE/Babe/#6-practical-results>
babe_primitives::BabeConfiguration {
median_required_blocks: 1000,
slot_duration: Babe::slot_duration(),
c: (3, 10),
c: (278, 1000),
}
}