diff --git a/substrate/core/trie/src/lib.rs b/substrate/core/trie/src/lib.rs index e29402b63c..da6630e46d 100644 --- a/substrate/core/trie/src/lib.rs +++ b/substrate/core/trie/src/lib.rs @@ -158,11 +158,7 @@ pub fn is_child_trie_key_valid(storage_key: &[u8]) -> bool { /// Determine the default child trie root. pub fn default_child_trie_root(_storage_key: &[u8]) -> Vec { - let mut db = MemoryDB::default(); - let mut root = H::Out::default(); - let mut empty = TrieDBMut::::new(&mut db, &mut root); - empty.commit(); - empty.root().as_ref().to_vec() + trie_root::, Vec>(core::iter::empty()).as_ref().iter().cloned().collect() } /// Determine a child trie root given its ordered contents, closed form. H is the default hasher, but a generic @@ -377,6 +373,18 @@ mod tests { } } + #[test] + fn default_trie_root() { + let mut db = MemoryDB::default(); + let mut root = ::Out::default(); + let mut empty = TrieDBMut::::new(&mut db, &mut root); + empty.commit(); + let root1 = empty.root().as_ref().to_vec(); + let root2: Vec = trie_root::, Vec>(std::iter::empty()).as_ref().iter().cloned().collect(); + + assert_eq!(root1, root2); + } + #[test] fn empty_is_equivalent() { let input: Vec<(&[u8], &[u8])> = vec![];