Struct pallet_babe::RandomnessFromTwoEpochsAgo [−][src]
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 CurrentBlockRandomness
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
impl<T: Config> Randomness<<T as Config>::Hash, <T as Config>::BlockNumber> for RandomnessFromTwoEpochsAgo<T>
impl<T: Config> Randomness<<T as Config>::Hash, <T as Config>::BlockNumber> for RandomnessFromTwoEpochsAgo<T>
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
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
type Output = T
type Output = T
Should always be Self
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
The counterpart to unchecked_from
.
Consume self to return an equivalent value of T
.
pub fn vzip(self) -> V