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
.