use tree_hash::{Hash256, MerkleHasher, TreeHash, TreeHashType};
pub fn vec_tree_hash_root<T>(vec: &[T], max_leaves: usize) -> Hash256
where
T: TreeHash,
{
match T::tree_hash_type() {
TreeHashType::Basic => {
let mut hasher =
MerkleHasher::with_leaves(max_leaves.div_ceil(T::tree_hash_packing_factor()));
for item in vec {
hasher
.write(&item.tree_hash_packed_encoding())
.expect("ssz_types variable vec should not contain more elements than max");
}
hasher
.finish()
.expect("ssz_types variable vec should not have a remaining buffer")
}
TreeHashType::Container | TreeHashType::List | TreeHashType::Vector => {
let mut hasher = MerkleHasher::with_leaves(max_leaves);
for item in vec {
hasher
.write(item.tree_hash_root().as_slice())
.expect("ssz_types vec should not contain more elements than max");
}
hasher
.finish()
.expect("ssz_types vec should not have a remaining buffer")
}
}
}