diff --git a/src/error.rs b/src/error.rs index 771b833..d4245da 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,7 +1,7 @@ #[cfg(feature = "std")] use std::{error::Error, fmt::Display}; -use crate::{bonsai_database::DBError, String}; +use crate::{bonsai_database::DBError, BitVec, String}; /// All errors that can be returned by BonsaiStorage. #[derive(Debug)] @@ -22,7 +22,7 @@ where /// Error when decoding a node NodeDecodeError(parity_scale_codec::Error), /// Error when creating a storage proof. - CreateProof(String), + CreateProofKeyNotInTree { key: BitVec }, /// Malformated trie key. KeyLength { expected: usize, got: usize }, } @@ -56,7 +56,9 @@ where BonsaiStorageError::Merge(e) => write!(f, "Merge error: {}", e), BonsaiStorageError::Database(e) => write!(f, "Database error: {}", e), BonsaiStorageError::NodeDecodeError(e) => write!(f, "Node decode error: {}", e), - BonsaiStorageError::CreateProof(e) => write!(f, "Proof creation error: {}", e), + BonsaiStorageError::CreateProofKeyNotInTree { key } => { + write!(f, "Key not in tree: {key:b}") + } BonsaiStorageError::KeyLength { expected, got } => { write!(f, "Malformated key length: expected {expected}, got {got}") } diff --git a/src/lib.rs b/src/lib.rs index cf0a5a8..6662ae9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -128,7 +128,7 @@ pub mod id; pub use bonsai_database::{BonsaiDatabase, BonsaiPersistentDatabase, DBError, DatabaseKey}; pub use error::BonsaiStorageError; -pub use trie::proof::Membership; +pub use trie::proof::{Membership, MultiProof, ProofNode}; #[cfg(test)] mod tests; @@ -153,7 +153,7 @@ impl EncodeExt for T {} use changes::ChangeBatch; use key_value_db::KeyValueDB; use starknet_types_core::{felt::Felt, hash::StarkHash}; -use trie::{proof::MultiProof, tree::bytes_to_bitvec, trees::MerkleTrees}; +use trie::{tree::bytes_to_bitvec, trees::MerkleTrees}; /// Structure that contains the configuration for the BonsaiStorage. /// A default implementation is provided with coherent values. diff --git a/src/trie/proof.rs b/src/trie/proof.rs index b108937..71b1daa 100644 --- a/src/trie/proof.rs +++ b/src/trie/proof.rs @@ -4,7 +4,6 @@ use super::{ tree::MerkleTree, }; use crate::{ - format, id::Id, key_value_db::KeyValueDB, trie::{ @@ -71,7 +70,7 @@ impl MultiProof { key_values.into_iter().map(move |(k, v)| { let k = k.as_ref(); - if k.len() != tree_height as _ { + if k.len() != tree_height as usize { return Membership::NonMember; } @@ -187,11 +186,15 @@ impl MerkleTree { got: key.len(), }); } + log::debug!("go to = {key:b}"); iter.traverse_to(&mut visitor, key)?; + + log::debug!("iter = {iter:?}"); // We should have found a leaf here. - iter.leaf_hash.ok_or_else(|| { - BonsaiStorageError::CreateProof(format!("Key {key:b} is not in the trie.")) - })?; + iter.leaf_hash + .ok_or(BonsaiStorageError::CreateProofKeyNotInTree { + key: key.to_bitvec(), + })?; } Ok(visitor.0)