Skip to main content

ConsensusConstants

Struct ConsensusConstants 

Source
pub struct ConsensusConstants {
Show 13 fields pub block_confirmation_depth: BlockNumber, pub shard_confirmation_depth: BlockNumber, pub block_authoring_delay: SlotNumber, pub pot: PotConsensusConstants, pub retarget_interval: BlockNumber, pub slot_probability: (u64, u64), pub slot_duration: SlotDuration, pub recent_segments: HistorySize, pub recent_history_fraction: (HistorySize, HistorySize), pub min_sector_lifetime: HistorySize, pub max_block_timestamp_drift: BlockTimestamp, pub shard_rotation_interval: BlockNumber, pub shard_rotation_delay: BlockNumber,
}
Expand description

Consensus constants

Fields§

§block_confirmation_depth: BlockNumber

Depth at which a block is confirmed and enters the recorded history.

When block n is built, the block at n - block_confirmation_depth is confirmed, so the largest possible reorg is block_confirmation_depth - 1 blocks. Importing the next best block (block number best_number + 1) confirms the block at best_number + 1 - block_confirmation_depth, so fork blocks must be above it, and blocks up to it are the same on every chain that can still be extended. This is why they can be referenced by block number alone.

With block_confirmation_depth = 5 and shard_confirmation_depth = 2:

block number
best_number + 1  next best block
best_number      best block
best_number - 3  deepest fork blocks
best_number - 4  confirmed once the next best block is imported  -+ read by the super
best_number - 5  confirmed                                        | segment derivation of
best_number - 6  confirmed                                       -+ the next best block

The block lifecycle in the database is shown on ClientDatabaseOptions in ab-client-database.

This is from the perspective of the individual shard, with additional confirmation on the beacon chain required for intermediate and leaf shards (see shard_confirmation_depth).

§shard_confirmation_depth: BlockNumber

Depth on the beacon chain in addition to block_confirmation_depth after intermediate or leaf shard information on the beacon chain is confirmed and corresponding segment roots become a part of the super segment.

Segment roots included in the beacon chain block at n - block_confirmation_depth - shard_confirmation_depth become a part of the super segment of block n unless later beacon chain blocks up to n - block_confirmation_depth show that their shard reorged them (see the diagram on block_confirmation_depth).

This is separate from the block confirmation on the corresponding shard itself, which happens much sooner (see block_confirmation_depth), but can’t be immediately trusted by the beacon chain.

§block_authoring_delay: SlotNumber

Number of slots between slot arrival and when the corresponding block can be produced

§pot: PotConsensusConstants

Proof-of-time consensus constants

§retarget_interval: BlockNumber

Period of time in blocks after which the solution range is adjusted

§slot_probability: (u64, u64)

Slot probability

§slot_duration: SlotDuration

The slot duration in milliseconds

§recent_segments: HistorySize

Number of latest archived segments that are considered “recent history”

§recent_history_fraction: (HistorySize, HistorySize)

Fraction of pieces from the “recent history” (recent_segments) in each sector

§min_sector_lifetime: HistorySize

Minimum lifetime of a plotted sector, measured in archived segments

§max_block_timestamp_drift: BlockTimestamp

Max block timestamp drift allowed

§shard_rotation_interval: BlockNumber

Number of beacon chain blocks between shard rotations.

Every this number of beacon chain blocks PoT entropy is taken to calculate the next shard assignment.

§shard_rotation_delay: BlockNumber

Delay in beacon chain blocks for the next shard rotation.

Delay after shard assignment is revealed before it actually takes effect (essentially the amount of time for a node to sync the corresponding shard).

Trait Implementations§

Source§

impl Clone for ConsensusConstants

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ConsensusConstants

Source§

impl Debug for ConsensusConstants

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ConsensusConstants

Source§

impl PartialEq for ConsensusConstants

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ConsensusConstants

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.