Struct sp_runtime::random_number_generator::RandomNumberGenerator[][src]

pub struct RandomNumberGenerator<Hashing: Hash> { /* fields omitted */ }

Pseudo-random number streamer. This retains the state of the random number stream. It's as secure as the combination of the seed with which it is constructed and the hash function it uses to cycle elements.

It can be saved and later reloaded using the Codec traits.

Example:

use sp_runtime::traits::{Hash, BlakeTwo256};
use sp_runtime::RandomNumberGenerator;
let random_seed = BlakeTwo256::hash(b"Sixty-nine");
let mut rng = <RandomNumberGenerator<BlakeTwo256>>::new(random_seed);
assert_eq!(rng.pick_u32(100), 59);
assert_eq!(rng.pick_item(&[1, 2, 3]), Some(&1));

This can use any cryptographic Hash function as the means of entropy-extension, and avoids needless extensions of entropy.

If you're persisting it over blocks, be aware that the sequence will start to repeat. This won't be a practical issue unless you're using tiny hash types (e.g. 64-bit) and pulling hundred of megabytes of data from it.

Implementations

impl<Hashing: Hash> RandomNumberGenerator<Hashing>[src]

pub fn new(seed: Hashing::Output) -> Self[src]

A new source of random data.

pub fn pick_u32(&mut self, max: u32) -> u32[src]

Returns a number at least zero, at most max.

pub fn pick_usize(&mut self, max: usize) -> usize[src]

Returns a number at least zero, at most max.

This returns a usize, but internally it only uses u32 so avoid consensus problems.

pub fn pick_item<'a, T>(&mut self, items: &'a [T]) -> Option<&'a T>[src]

Pick a random element from an array of items.

This is guaranteed to return Some except in the case that the given array items is empty.

Trait Implementations

impl<Hashing: Hash> Decode for RandomNumberGenerator<Hashing> where
    Hashing::Output: Decode,
    Hashing::Output: Decode
[src]

impl<Hashing: Hash> Encode for RandomNumberGenerator<Hashing> where
    Hashing::Output: Encode,
    Hashing::Output: Encode
[src]

impl<Hashing: Hash> EncodeLike<RandomNumberGenerator<Hashing>> for RandomNumberGenerator<Hashing> where
    Hashing::Output: Encode,
    Hashing::Output: Encode
[src]

Auto Trait Implementations

impl<Hashing> RefUnwindSafe for RandomNumberGenerator<Hashing> where
    <Hashing as Hash>::Output: RefUnwindSafe
[src]

impl<Hashing> Send for RandomNumberGenerator<Hashing>[src]

impl<Hashing> Sync for RandomNumberGenerator<Hashing>[src]

impl<Hashing> Unpin for RandomNumberGenerator<Hashing> where
    <Hashing as Hash>::Output: Unpin
[src]

impl<Hashing> UnwindSafe for RandomNumberGenerator<Hashing> where
    <Hashing as Hash>::Output: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> CheckedConversion for T[src]

impl<S> Codec for S where
    S: Encode + Decode
[src]

impl<T> DecodeAll for T where
    T: Decode
[src]

impl<T> DecodeLimit for T where
    T: Decode
[src]

impl<'_, '_, T> EncodeLike<&'_ &'_ T> for T where
    T: Encode
[src]

impl<'_, T> EncodeLike<&'_ T> for T where
    T: Encode
[src]

impl<'_, T> EncodeLike<&'_ mut T> for T where
    T: Encode
[src]

impl<T> EncodeLike<Arc<T>> for T where
    T: Encode
[src]

impl<T> EncodeLike<Box<T, Global>> for T where
    T: Encode
[src]

impl<T> EncodeLike<Rc<T>> for T where
    T: Encode
[src]

impl<T> From<T> for T[src]

impl<S> FullCodec for S where
    S: Decode + FullEncode
[src]

impl<S> FullEncode for S where
    S: Encode + EncodeLike<S>, 
[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, Outer> IsWrappedBy<Outer> for T where
    T: From<Outer>,
    Outer: AsRef<T> + AsMut<T> + From<T>, 
[src]

pub fn from_ref(outer: &Outer) -> &T[src]

Get a reference to the inner from the outer.

pub fn from_mut(outer: &mut Outer) -> &mut T[src]

Get a mutable reference to the inner from the outer.

impl<T> KeyedVec for T where
    T: Codec
[src]

impl<T> MaybeRefUnwindSafe for T where
    T: RefUnwindSafe

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> SaturatedConversion for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<S, T> UncheckedInto<T> for S where
    T: UncheckedFrom<S>, 
[src]

impl<T, S> UniqueSaturatedInto<T> for S where
    T: Bounded,
    S: TryInto<T>, 
[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,