restricted_sparse_merkle_tree/
merge.rs

1use crate::h256::H256;
2use crate::traits::Hasher;
3
4/// Merge two hash
5/// this function optimized for ZERO_HASH
6/// if one of lhs or rhs is ZERO_HASH, this function just return another one
7pub fn merge<H: Hasher + Default>(lhs: &H256, rhs: &H256) -> H256 {
8    if lhs.is_zero() {
9        return *rhs;
10    } else if rhs.is_zero() {
11        return *lhs;
12    }
13    let mut hasher = H::default();
14    hasher.write_h256(lhs);
15    hasher.write_h256(rhs);
16    hasher.finish()
17}
18
19/// hash_leaf = hash(key | value)
20/// zero value represent delete the key, this function return zero for zero value
21pub fn hash_leaf<H: Hasher + Default>(key: &H256, value: &H256) -> H256 {
22    if value.is_zero() {
23        return H256::zero();
24    }
25    let mut hasher = H::default();
26    hasher.write_h256(key);
27    hasher.write_h256(value);
28    hasher.finish()
29}