-
Notifications
You must be signed in to change notification settings - Fork 154
/
Copy pathtraits.rs
29 lines (24 loc) · 1.22 KB
/
traits.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use alloc::vec::Vec;
#[cfg(feature = "parallel")]
use rayon::prelude::{IntoParallelRefIterator, ParallelIterator};
/// A backend for Merkle trees. This defines raw `Data` from which the Merkle
/// tree is built from. It also defines the `Node` type and the hash function
/// used to build parent nodes from children nodes.
pub trait IsMerkleTreeBackend: Default {
type Node: PartialEq + Eq + Clone + Sync + Send;
type Data: Sync + Send;
/// This function takes a single variable `Data` and converts it to a node.
fn hash_data(leaf: &Self::Data) -> Self::Node;
/// This function takes the list of data from which the Merkle
/// tree will be built from and converts it to a list of leaf nodes.
fn hash_leaves(unhashed_leaves: &[Self::Data]) -> Vec<Self::Node> {
#[cfg(feature = "parallel")]
let iter = unhashed_leaves.par_iter();
#[cfg(not(feature = "parallel"))]
let iter = unhashed_leaves.iter();
iter.map(|leaf| Self::hash_data(leaf)).collect()
}
/// This function takes to children nodes and builds a new parent node.
/// It will be used in the construction of the Merkle tree.
fn hash_new_parent(child_1: &Self::Node, child_2: &Self::Node) -> Self::Node;
}