Struct sp_runtime::random_number_generator::RandomNumberGenerator [−][src]
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,
fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
[src]
__codec_input_edqy: &mut __CodecInputEdqy
) -> Result<Self, Error>
impl<Hashing: Hash> Encode for RandomNumberGenerator<Hashing> where
Hashing::Output: Encode,
Hashing::Output: Encode,
[src]
Hashing::Output: Encode,
Hashing::Output: Encode,
fn encode_to<__CodecOutputEdqy: Output>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
[src]
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
pub fn size_hint(&self) -> usize
[src]
pub fn encode(&self) -> Vec<u8, Global>
[src]
pub 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>
impl<Hashing> Sync for RandomNumberGenerator<Hashing>
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,
pub 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> DecodeAll for T where
T: Decode,
[src]
T: Decode,
impl<T> DecodeLimit for T where
T: Decode,
[src]
T: Decode,
pub fn decode_all_with_depth_limit(limit: u32, input: &[u8]) -> Result<T, Error>
[src]
pub fn decode_with_depth_limit(limit: u32, input: &[u8]) -> Result<T, Error>
[src]
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, Global>> 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> Instrument for T
[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, Outer> IsWrappedBy<Outer> for T where
T: From<Outer>,
Outer: AsRef<T> + AsMut<T> + From<T>,
[src]
T: From<Outer>,
Outer: AsRef<T> + AsMut<T> + From<T>,
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]
T: Codec,
impl<T> MaybeRefUnwindSafe for T where
T: RefUnwindSafe,
[src]
T: RefUnwindSafe,
impl<T> Pointable for T
[src]
pub const ALIGN: usize
[src]
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
[src]
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
[src]
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
[src]
pub unsafe fn drop(ptr: usize)
[src]
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T> SaturatedConversion for T
[src]
pub fn saturated_from<T>(t: T) -> Self where
Self: UniqueSaturatedFrom<T>,
[src]
Self: UniqueSaturatedFrom<T>,
pub 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.
pub 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.
pub 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>,
pub fn unchecked_into(self) -> T
[src]
impl<T, S> UniqueSaturatedInto<T> for S where
T: Bounded,
S: TryInto<T>,
[src]
T: Bounded,
S: TryInto<T>,
pub fn unique_saturated_into(self) -> T
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,