use std::{
iter::{once, repeat},
str::FromStr,
};
use mpt_trie::partial_trie::PartialTrie;
use mpt_trie::{
nibbles::Nibbles,
partial_trie::{HashedPartialTrie, Node},
trie_ops::TrieOpResult,
};
fn main() -> TrieOpResult<()> {
pretty_env_logger::try_init().unwrap();
let mut full_trie = HashedPartialTrie::default();
full_trie.insert(Nibbles::from_str("0x00").unwrap(), large_val(1))?; full_trie.insert(Nibbles::from_str("0x01").unwrap(), large_val(2))?; full_trie.insert(Nibbles::from(0x10_u64), large_val(3))?; full_trie.insert(Nibbles::from(0x11_u64), large_val(4))?;
let full_trie_hash = full_trie.hash();
let left_side_hash = match &*full_trie {
Node::Branch { children, .. } => children[0].hash(),
_ => unreachable!(),
};
let mut hash_trie = HashedPartialTrie::default();
hash_trie.insert(Nibbles::from_str("0x0").unwrap(), left_side_hash)?; hash_trie.insert(0x10_u64, large_val(3))?; hash_trie.insert(0x11_u64, large_val(4))?;
let hash_trie_hash = hash_trie.hash();
assert_eq!(full_trie_hash, hash_trie_hash);
Ok(())
}
fn large_val(first_byte: u8) -> Vec<u8> {
Vec::from_iter(once(first_byte).chain(repeat(255).take(32)))
}