Struct sc_consensus_epochs::EpochChanges
source · [−]pub struct EpochChanges<Hash, Number, E: Epoch> { /* private fields */ }
Expand description
Tree of all epoch changes across all seen forks. Data stored in tree is the hash and block number of the block signaling the epoch change, and the epoch that was signalled at that block.
The first epoch, epoch_0, is special cased by saying that it starts at slot number of the first block in the chain. When bootstrapping a chain, there can be multiple competing block #1s, so we have to ensure that the overlayed DAG doesn’t get confused.
The first block of every epoch should be producing a descriptor for the next epoch - this is checked in higher-level code. So the first block of epoch_0 contains a descriptor for epoch_1. We special-case these and bundle them together in the same DAG entry, pinned to a specific block #1.
Further epochs (epoch_2, …, epoch_n) each get their own entry.
Implementations
sourceimpl<Hash, Number, E: Epoch> EpochChanges<Hash, Number, E> where
Hash: PartialEq + Ord + AsRef<[u8]> + AsMut<[u8]> + Copy,
Number: Ord + One + Zero + Add<Output = Number> + Copy,
impl<Hash, Number, E: Epoch> EpochChanges<Hash, Number, E> where
Hash: PartialEq + Ord + AsRef<[u8]> + AsMut<[u8]> + Copy,
Number: Ord + One + Zero + Add<Output = Number> + Copy,
sourcepub fn rebalance(&mut self)
pub fn rebalance(&mut self)
Rebalances the tree of epoch changes so that it is sorted by length of fork (longest fork first).
sourcepub fn map<B, F>(self, f: F) -> EpochChanges<Hash, Number, B> where
B: Epoch<Slot = E::Slot>,
F: FnMut(&Hash, &Number, E) -> B,
pub fn map<B, F>(self, f: F) -> EpochChanges<Hash, Number, B> where
B: Epoch<Slot = E::Slot>,
F: FnMut(&Hash, &Number, E) -> B,
Map the epoch changes from one storing data to a different one.
sourcepub fn prune_finalized<D: IsDescendentOfBuilder<Hash>>(
&mut self,
descendent_of_builder: D,
hash: &Hash,
number: Number,
slot: E::Slot
) -> Result<(), Error<D::Error>>
pub fn prune_finalized<D: IsDescendentOfBuilder<Hash>>(
&mut self,
descendent_of_builder: D,
hash: &Hash,
number: Number,
slot: E::Slot
) -> Result<(), Error<D::Error>>
Prune out finalized epochs, except for the ancestor of the finalized block. The given slot should be the slot number at which the finalized block was authored.
sourcepub fn epoch(&self, id: &EpochIdentifier<Hash, Number>) -> Option<&E>
pub fn epoch(&self, id: &EpochIdentifier<Hash, Number>) -> Option<&E>
Get a reference to an epoch with given identifier.
sourcepub fn viable_epoch<G>(
&self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<ViableEpoch<E, &E>> where
G: FnOnce(E::Slot) -> E,
pub fn viable_epoch<G>(
&self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<ViableEpoch<E, &E>> where
G: FnOnce(E::Slot) -> E,
Get a reference to a viable epoch with given descriptor.
sourcepub fn epoch_mut(
&mut self,
id: &EpochIdentifier<Hash, Number>
) -> Option<&mut E>
pub fn epoch_mut(
&mut self,
id: &EpochIdentifier<Hash, Number>
) -> Option<&mut E>
Get a mutable reference to an epoch with given identifier.
sourcepub fn viable_epoch_mut<G>(
&mut self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<ViableEpoch<E, &mut E>> where
G: FnOnce(E::Slot) -> E,
pub fn viable_epoch_mut<G>(
&mut self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<ViableEpoch<E, &mut E>> where
G: FnOnce(E::Slot) -> E,
Get a mutable reference to a viable epoch with given descriptor.
sourcepub fn epoch_data<G>(
&self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<E> where
G: FnOnce(E::Slot) -> E,
E: Clone,
pub fn epoch_data<G>(
&self,
descriptor: &ViableEpochDescriptor<Hash, Number, E>,
make_genesis: G
) -> Option<E> where
G: FnOnce(E::Slot) -> E,
E: Clone,
Get the epoch data from an epoch descriptor.
Note that this function ignores the fact that an genesis epoch might need to be imported. Mostly useful for testing.
sourcepub fn epoch_data_for_child_of<D: IsDescendentOfBuilder<Hash>, G>(
&self,
descendent_of_builder: D,
parent_hash: &Hash,
parent_number: Number,
slot: E::Slot,
make_genesis: G
) -> Result<Option<E>, Error<D::Error>> where
G: FnOnce(E::Slot) -> E,
E: Clone,
pub fn epoch_data_for_child_of<D: IsDescendentOfBuilder<Hash>, G>(
&self,
descendent_of_builder: D,
parent_hash: &Hash,
parent_number: Number,
slot: E::Slot,
make_genesis: G
) -> Result<Option<E>, Error<D::Error>> where
G: FnOnce(E::Slot) -> E,
E: Clone,
Finds the epoch data for a child of the given block. Similar to
epoch_descriptor_for_child_of
but returns the full data.
Note that this function ignores the fact that an genesis epoch might need to be imported. Mostly useful for testing.
sourcepub fn epoch_descriptor_for_child_of<D: IsDescendentOfBuilder<Hash>>(
&self,
descendent_of_builder: D,
parent_hash: &Hash,
parent_number: Number,
slot: E::Slot
) -> Result<Option<ViableEpochDescriptor<Hash, Number, E>>, Error<D::Error>>
pub fn epoch_descriptor_for_child_of<D: IsDescendentOfBuilder<Hash>>(
&self,
descendent_of_builder: D,
parent_hash: &Hash,
parent_number: Number,
slot: E::Slot
) -> Result<Option<ViableEpochDescriptor<Hash, Number, E>>, Error<D::Error>>
Finds the epoch for a child of the given block, assuming the given slot number.
If the returned epoch is an UnimportedGenesis
epoch, it should be imported into the
tree.
sourcepub fn import<D: IsDescendentOfBuilder<Hash>>(
&mut self,
descendent_of_builder: D,
hash: Hash,
number: Number,
parent_hash: Hash,
epoch: IncrementedEpoch<E>
) -> Result<(), Error<D::Error>>
pub fn import<D: IsDescendentOfBuilder<Hash>>(
&mut self,
descendent_of_builder: D,
hash: Hash,
number: Number,
parent_hash: Hash,
epoch: IncrementedEpoch<E>
) -> Result<(), Error<D::Error>>
Import a new epoch-change, signalled at the given block.
This assumes that the given block is prospective (i.e. has not been imported yet), but its parent has. This is why the parent hash needs to be provided.
sourcepub fn tree(&self) -> &ForkTree<Hash, Number, PersistedEpochHeader<E>>
pub fn tree(&self) -> &ForkTree<Hash, Number, PersistedEpochHeader<E>>
Return the inner fork tree.
Trait Implementations
sourceimpl<Hash: Clone, Number: Clone, E: Clone + Epoch> Clone for EpochChanges<Hash, Number, E>
impl<Hash: Clone, Number: Clone, E: Clone + Epoch> Clone for EpochChanges<Hash, Number, E>
sourcefn clone(&self) -> EpochChanges<Hash, Number, E>
fn clone(&self) -> EpochChanges<Hash, Number, E>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<Hash, Number, E: Epoch> Decode for EpochChanges<Hash, Number, E> where
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Decode,
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Decode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Decode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Decode,
impl<Hash, Number, E: Epoch> Decode for EpochChanges<Hash, Number, E> where
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Decode,
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Decode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Decode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Decode,
sourcefn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
Attempt to deserialise the value from input.
sourcefn skip<I>(input: &mut I) -> Result<(), Error> where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error> where
I: Input,
Attempt to skip the encoded value from input. Read more
sourcefn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
Returns the fixed encoded size of the type. Read more
sourceimpl<Hash, Number, E: Epoch> Default for EpochChanges<Hash, Number, E> where
Hash: PartialEq + Ord,
Number: Ord,
impl<Hash, Number, E: Epoch> Default for EpochChanges<Hash, Number, E> where
Hash: PartialEq + Ord,
Number: Ord,
sourceimpl<Hash, Number, E: Epoch> Encode for EpochChanges<Hash, Number, E> where
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
impl<Hash, Number, E: Epoch> Encode for EpochChanges<Hash, Number, E> where
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
sourcefn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
Convert self to a slice and append it to the destination.
sourcefn size_hint(&self) -> usize
fn size_hint(&self) -> usize
If possible give a hint of expected size of the encoding. Read more
sourcefn encode(&self) -> Vec<u8, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
fn encode(&self) -> Vec<u8, Global>ⓘNotable traits for Vec<u8, A>impl<A> Write for Vec<u8, A> where
A: Allocator,
A: Allocator,
Convert self to an owned vector.
sourcefn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
Convert self to a slice and then invoke the given closure with it.
sourcefn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Calculates the encoded size. Read more
impl<Hash, Number, E: Epoch> EncodeLike<EpochChanges<Hash, Number, E>> for EpochChanges<Hash, Number, E> where
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
ForkTree<Hash, Number, PersistedEpochHeader<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
BTreeMap<(Hash, Number), PersistedEpoch<E>>: Encode,
Auto Trait Implementations
impl<Hash, Number, E> RefUnwindSafe for EpochChanges<Hash, Number, E> where
E: RefUnwindSafe,
Hash: RefUnwindSafe,
Number: RefUnwindSafe,
<E as Epoch>::Slot: RefUnwindSafe,
impl<Hash, Number, E> Send for EpochChanges<Hash, Number, E> where
E: Send,
Hash: Send,
Number: Send,
<E as Epoch>::Slot: Send,
impl<Hash, Number, E> Sync for EpochChanges<Hash, Number, E> where
E: Sync,
Hash: Sync,
Number: Sync,
<E as Epoch>::Slot: Sync,
impl<Hash, Number, E> Unpin for EpochChanges<Hash, Number, E> where
Hash: Unpin,
Number: Unpin,
<E as Epoch>::Slot: Unpin,
impl<Hash, Number, E> UnwindSafe for EpochChanges<Hash, Number, E> where
E: RefUnwindSafe,
Hash: UnwindSafe + RefUnwindSafe,
Number: UnwindSafe + RefUnwindSafe,
<E as Epoch>::Slot: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> CheckedConversion for T
impl<T> CheckedConversion for T
sourcefn checked_from<T>(t: T) -> Option<Self> where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self> where
Self: TryFrom<T>,
Convert from a value of T
into an equivalent instance of Option<Self>
. Read more
sourcefn checked_into<T>(self) -> Option<T> where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T> where
Self: TryInto<T>,
Consume self to return Some
equivalent value of Option<T>
. Read more
sourceimpl<T> DecodeLimit for T where
T: Decode,
impl<T> DecodeLimit for T where
T: Decode,
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T, Outer> IsWrappedBy<Outer> for T where
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for T where
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
sourceimpl<T> Pointable for T
impl<T> Pointable for T
sourceimpl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
sourcefn saturated_from<T>(t: T) -> Self where
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Self where
Self: UniqueSaturatedFrom<T>,
Convert from a value of T
into an equivalent instance of Self
. Read more
sourcefn saturated_into<T>(self) -> T where
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> T where
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of T
. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<S, T> UncheckedInto<T> for S where
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for S where
T: UncheckedFrom<S>,
sourcepub fn unchecked_into(self) -> T
pub fn unchecked_into(self) -> T
The counterpart to unchecked_from
.
sourceimpl<T, S> UniqueSaturatedInto<T> for S where
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for S where
T: Bounded,
S: TryInto<T>,
sourcepub fn unique_saturated_into(self) -> T
pub fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of T
.
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more