You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to replace triehash::ordered_trie_root with an equivalent function based on alloy-trie. Even if it works pretty well, sometimes alloy-trie panics with a cannot convert a slice of length 29 to FixedBytes<32> error. Here is a complete reproducer for the issue:
use std::collections::BTreeMap;use alloy_primitives::{keccak256,B256};use alloy_rlp::Encodable;use alloy_trie::HashBuilder;use nybbles::Nibbles;fntriehash_ordered_trie_root<I>(iter:I) -> B256whereI:IntoIterator,I::Item:AsRef<[u8]>,{structKeccak256Hasher;impl hash_db::HasherforKeccak256Hasher{typeOut = B256;typeStdHasher = plain_hasher::PlainHasher;constLENGTH:usize = 32;fnhash(x:&[u8]) -> Self::Out{keccak256(x)}}
triehash::ordered_trie_root::<Keccak256Hasher,_>(iter)}fnalloy_ordered_trie_root<I>(iter:I) -> B256whereI:IntoIterator,I::Item:AsRef<[u8]>,{let hashed = iter
.into_iter().enumerate().map(|(i, v)| {letmut buf = Vec::new();
i.encode(&mut buf);(buf, v)}).collect::<BTreeMap<_,_>>();letmut hb = HashBuilder::default();
hashed.iter().for_each(|(key, val)| {let nibbles = Nibbles::unpack(key);
hb.add_leaf(nibbles, val.as_ref());});
hb.root()}// This fails with error:// cannot convert a slice of length 29 to FixedBytes<32>#[test]fnsmall_data(){let data = &["cake","pie","candy"];assert_eq!(triehash_ordered_trie_root(data), alloy_ordered_trie_root(data));}// This succeeds.#[test]fnbig_data(){let data = &["a_very_big_cake","a_very_big_pie","a_lots_of_candies"];assert_eq!(triehash_ordered_trie_root(data), alloy_ordered_trie_root(data));}
The text was updated successfully, but these errors were encountered:
thread 'main' panicked at /../alloy-trie-0.4.1/src/nodes/branch.rs:164:35:
cannot convert a slice of length 21 to FixedBytes<32>
stack backtrace:
0: rust_begin_unwind
at /rustc/../library/std/src/panicking.rs:652:5
1: core::panicking::panic_fmt
at /rustc/../library/core/src/panicking.rs:72:14
2: alloy_primitives::bits::fixed::FixedBytes<_>::from_slice
at /../alloy-primitives-0.7.7/src/bits/fixed.rs:476:23
3: alloy_trie::nodes::branch::BranchNodeRef::child_hashes
at /../alloy-trie-0.4.1/src/nodes/branch.rs:164:35
4: alloy_trie::hash_builder::HashBuilder::push_branch_node
at /../alloy-trie-0.4.1/src/hash_builder/mod.rs:314:24
5: alloy_trie::hash_builder::HashBuilder::update
at /../alloy-trie-0.4.1/src/hash_builder/mod.rs:279:32
6: alloy_trie::hash_builder::HashBuilder::root
at /../alloy-trie-0.4.1/src/hash_builder/mod.rs:137:13
7: sketchbook::main
at ./src/main.rs:7:5
I am trying to replace
triehash::ordered_trie_root
with an equivalent function based onalloy-trie
. Even if it works pretty well, sometimesalloy-trie
panics with acannot convert a slice of length 29 to FixedBytes<32>
error. Here is a complete reproducer for the issue:The text was updated successfully, but these errors were encountered: