bee_block/rand/
block.rs

1// Copyright 2020-2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::{
5    parent::Parents,
6    rand::{bytes::rand_bytes_array, number::rand_number, parents::rand_parents, payload::rand_payload_for_block},
7    Block, BlockBuilder, BlockId,
8};
9
10/// Generates a random block id.
11pub fn rand_block_id() -> BlockId {
12    BlockId::new(rand_bytes_array())
13}
14
15/// Generates a vector of random block ids of a given length.
16pub fn rand_block_ids(len: usize) -> Vec<BlockId> {
17    let mut parents = (0..len).map(|_| rand_block_id()).collect::<Vec<_>>();
18    parents.sort_by(|a, b| a.as_ref().cmp(b.as_ref()));
19    parents
20}
21
22/// Generates a random block with given parents.
23pub fn rand_block_with_parents(parents: Parents, min_pow_score: u32) -> Block {
24    BlockBuilder::<u64>::new(parents)
25        .with_payload(rand_payload_for_block())
26        .with_nonce_provider(rand_number())
27        .finish(min_pow_score)
28        .unwrap()
29}
30
31/// Generates a random block.
32pub fn rand_block(min_pow_score: u32) -> Block {
33    rand_block_with_parents(rand_parents(), min_pow_score)
34}