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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use ethereum_types::H256;
use hash256_std_hasher::Hash256StdHasher;
use hash_db::Hasher;
use sha3::{Digest, Keccak256};
#[derive(Default, Debug, Clone, PartialEq)]
pub struct KeccakHasher;
impl Hasher for KeccakHasher {
type Out = H256;
type StdHasher = Hash256StdHasher;
const LENGTH: usize = 32;
fn hash(x: &[u8]) -> Self::Out {
H256::from_slice(Keccak256::digest(x).as_slice())
}
}
pub fn trie_root<I, K, V>(input: I) -> H256
where
I: IntoIterator<Item = (K, V)>,
K: AsRef<[u8]> + Ord,
V: AsRef<[u8]>,
{
triehash::trie_root::<KeccakHasher, _, _, _>(input)
}
pub fn sec_trie_root<I, K, V>(input: I) -> H256
where
I: IntoIterator<Item = (K, V)>,
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
triehash::sec_trie_root::<KeccakHasher, _, _, _>(input)
}
pub fn ordered_trie_root<I, V>(input: I) -> H256
where
I: IntoIterator<Item = V>,
V: AsRef<[u8]>,
{
triehash::ordered_trie_root::<KeccakHasher, I>(input)
}