Struct pallet_babe::RandomnessFromTwoEpochsAgo 
source · pub struct RandomnessFromTwoEpochsAgo<T>(_);Expand description
Randomness usable by consensus protocols that depend upon finality and take action based upon on-chain commitments made during the epoch before the previous epoch.
An off-chain consensus protocol requires randomness be finalized before usage, but one
extra epoch delay beyond RandomnessFromOneEpochAgo suffices, under the assumption
that finality never stalls for longer than one epoch.
All randomness is relative to commitments to any other inputs to the computation: If Alice samples randomness near perfectly using radioactive decay, but then afterwards Eve selects an arbitrary value with which to xor Alice’s randomness, then Eve always wins whatever game they play.
All input commitments used with RandomnessFromTwoEpochsAgo should come from at least
three epochs ago. We require BABE session keys be registered at least three epochs
before being used to derive ParentBlockRandomness for example.
All users learn RandomnessFromTwoEpochsAgo when epoch current_epoch - 1 starts,
although some learn it a few block earlier inside epoch current_epoch - 2.
Adversaries with enough block producers could bias this randomness by choosing upon
what their block producers build at the end of epoch current_epoch - 2 or the
beginning epoch current_epoch - 1, or skipping slots at the end of epoch
current_epoch - 2.
Adversaries should not possess many block production slots towards the beginning or end of every epoch, but they possess some influence over when they possess more slots.
Trait Implementations§
source§impl<T: Config> Randomness<<T as Config>::Hash, <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for RandomnessFromTwoEpochsAgo<T>
 
impl<T: Config> Randomness<<T as Config>::Hash, <<<T as Config>::Block as HeaderProvider>::HeaderT as Header>::Number> for RandomnessFromTwoEpochsAgo<T>
source§fn random(subject: &[u8]) -> (T::Hash, BlockNumberFor<T>)
 
fn random(subject: &[u8]) -> (T::Hash, BlockNumberFor<T>)
source§fn random_seed() -> (Output, BlockNumber)
 
fn random_seed() -> (Output, BlockNumber)
Auto Trait Implementations§
impl<T> RefUnwindSafe for RandomnessFromTwoEpochsAgo<T>where T: RefUnwindSafe,
impl<T> Send for RandomnessFromTwoEpochsAgo<T>where T: Send,
impl<T> Sync for RandomnessFromTwoEpochsAgo<T>where T: Sync,
impl<T> Unpin for RandomnessFromTwoEpochsAgo<T>where T: Unpin,
impl<T> UnwindSafe for RandomnessFromTwoEpochsAgo<T>where T: UnwindSafe,
Blanket Implementations§
source§impl<T> CheckedConversion for T
 
impl<T> CheckedConversion for T
source§impl<T> Instrument for T
 
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for Twhere
    Outer: AsRef<T> + AsMut<T> + From<T>,
    T: From<Outer>,
 
impl<T, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,
§impl<T> Pointable for T
 
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
 
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
    Self: UniqueSaturatedFrom<T>,
 
fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
    Self: UniqueSaturatedInto<T>,
 
fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,
T. Read more§impl<SS, SP> SupersetOf<SS> for SPwhere
    SS: SubsetOf<SP>,
 
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
 
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
 
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
 
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
 
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.source§impl<S, T> UncheckedInto<T> for Swhere
    T: UncheckedFrom<S>,
 
impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
 
fn unchecked_into(self) -> T
unchecked_from.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
    T: Bounded,
    S: TryInto<T>,
 
impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
 
fn unique_saturated_into(self) -> T
T.