[−][src]Struct sp_runtime::random_number_generator::RandomNumberGenerator
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]
Hashing::Output: Decode,
Hashing::Output: Decode,
impl<Hashing: Hash> Encode for RandomNumberGenerator<Hashing> where
Hashing::Output: Encode,
Hashing::Output: Encode,
[src]
Hashing::Output: Encode,
Hashing::Output: Encode,
fn encode_to<EncOut: Output>(&self, dest: &mut EncOut)
[src]
fn size_hint(&self) -> usize
[src]
fn encode(&self) -> Vec<u8>
[src]
fn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
[src]
F: FnOnce(&[u8]) -> R,
impl<Hashing: Hash> EncodeLike<RandomNumberGenerator<Hashing>> for RandomNumberGenerator<Hashing> where
Hashing::Output: Encode,
Hashing::Output: Encode,
[src]
Hashing::Output: Encode,
Hashing::Output: Encode,
Auto Trait Implementations
impl<Hashing> RefUnwindSafe for RandomNumberGenerator<Hashing> where
<Hashing as Hash>::Output: RefUnwindSafe,
<Hashing as Hash>::Output: RefUnwindSafe,
impl<Hashing> Send for RandomNumberGenerator<Hashing> where
<Hashing as Hash>::Output: Send,
<Hashing as Hash>::Output: Send,
impl<Hashing> Sync for RandomNumberGenerator<Hashing> where
<Hashing as Hash>::Output: Sync,
<Hashing as Hash>::Output: Sync,
impl<Hashing> Unpin for RandomNumberGenerator<Hashing> where
<Hashing as Hash>::Output: Unpin,
<Hashing as Hash>::Output: Unpin,
impl<Hashing> UnwindSafe for RandomNumberGenerator<Hashing> where
<Hashing as Hash>::Output: UnwindSafe,
<Hashing as Hash>::Output: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> CheckedConversion for T
[src]
fn checked_from<T>(t: T) -> Option<Self> where
Self: TryFrom<T>,
[src]
Self: TryFrom<T>,
fn checked_into<T>(self) -> Option<T> where
Self: TryInto<T>,
[src]
Self: TryInto<T>,
impl<S> Codec for S where
S: Encode + Decode,
[src]
S: Encode + Decode,
impl<T, X> Decode for X where
T: Decode + Into<X>,
X: WrapperTypeDecode<Wrapped = T>,
[src]
T: Decode + Into<X>,
X: WrapperTypeDecode<Wrapped = T>,
impl<T> DecodeAll for T where
T: Decode,
[src]
T: Decode,
impl<T> DecodeLimit for T where
T: Decode,
[src]
T: Decode,
fn decode_all_with_depth_limit(limit: u32, input: &[u8]) -> Result<T, Error>
[src]
fn decode_with_depth_limit(limit: u32, input: &[u8]) -> Result<T, Error>
[src]
impl<T, X> Encode for X where
T: Encode + ?Sized,
X: WrapperTypeEncode<Target = T>,
[src]
T: Encode + ?Sized,
X: WrapperTypeEncode<Target = T>,
fn size_hint(&self) -> usize
[src]
fn using_encoded<R, F>(&self, f: F) -> R where
F: FnOnce(&[u8]) -> R,
[src]
F: FnOnce(&[u8]) -> R,
fn encode(&self) -> Vec<u8>
[src]
fn encode_to<W>(&self, dest: &mut W) where
W: Output,
[src]
W: Output,
impl<'_, '_, T> EncodeLike<&'_ &'_ T> for T where
T: Encode,
[src]
T: Encode,
impl<'_, T> EncodeLike<&'_ T> for T where
T: Encode,
[src]
T: Encode,
impl<'_, T> EncodeLike<&'_ mut T> for T where
T: Encode,
[src]
T: Encode,
impl<T> EncodeLike<Arc<T>> for T where
T: Encode,
[src]
T: Encode,
impl<T> EncodeLike<Box<T>> for T where
T: Encode,
[src]
T: Encode,
impl<T> EncodeLike<Rc<T>> for T where
T: Encode,
[src]
T: Encode,
impl<T> From<T> for T
[src]
impl<S> FullCodec for S where
S: Decode + FullEncode,
[src]
S: Decode + FullEncode,
impl<S> FullEncode for S where
S: Encode + EncodeLike<S>,
[src]
S: Encode + EncodeLike<S>,
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, Outer> IsWrappedBy<Outer> for T where
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
[src]
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
fn from_ref(outer: &Outer) -> &T
[src]
Get a reference to the inner from the outer.
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]
T: Codec,
impl<T> MaybeRefUnwindSafe for T where
T: RefUnwindSafe,
[src]
T: RefUnwindSafe,
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T> SaturatedConversion for T
[src]
fn saturated_from<T>(t: T) -> Self where
Self: UniqueSaturatedFrom<T>,
[src]
Self: UniqueSaturatedFrom<T>,
fn saturated_into<T>(self) -> T where
Self: UniqueSaturatedInto<T>,
[src]
Self: UniqueSaturatedInto<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<S, T> UncheckedInto<T> for S where
T: UncheckedFrom<S>,
[src]
T: UncheckedFrom<S>,
fn unchecked_into(self) -> T
[src]
impl<T, S> UniqueSaturatedInto<T> for S where
S: TryInto<T>,
T: Bounded,
[src]
S: TryInto<T>,
T: Bounded,
fn unique_saturated_into(self) -> T
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,