feat(smt): make leaf-emptiness knowable at the trait level
This commit is contained in:
parent
731afe30ec
commit
4f17c1deb1
3 changed files with 15 additions and 0 deletions
|
@ -263,6 +263,13 @@ impl SparseMerkleTree<SMT_DEPTH> for Smt {
|
|||
leaf.hash()
|
||||
}
|
||||
|
||||
fn is_leaf_empty(leaf: &SmtLeaf) -> bool {
|
||||
match leaf {
|
||||
SmtLeaf::Empty(_) => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn hash_prospective_leaf(&self, key: &RpoDigest, value: &Word) -> RpoDigest {
|
||||
// Future work could avoid cloning the leaf by mirroring some of the insertion logic and
|
||||
// hashing without an intermediate leaf, but cloning is only expensive for multi-leaves,
|
||||
|
|
|
@ -167,6 +167,10 @@ pub(crate) trait SparseMerkleTree<const DEPTH: u8> {
|
|||
/// Returns the hash of a leaf
|
||||
fn hash_leaf(leaf: &Self::Leaf) -> RpoDigest;
|
||||
|
||||
/// Returns true if a leaf is completely sparse and does not hold any key-value pairs.
|
||||
#[allow(dead_code)]
|
||||
fn is_leaf_empty(leaf: &Self::Leaf) -> bool;
|
||||
|
||||
/// Returns the hash of a leaf if the leaf WERE inserted into the tree,
|
||||
/// without performing any insertion or other mutation.
|
||||
///
|
||||
|
|
|
@ -302,6 +302,10 @@ impl<const DEPTH: u8> SparseMerkleTree<DEPTH> for SimpleSmt<DEPTH> {
|
|||
leaf.into()
|
||||
}
|
||||
|
||||
fn is_leaf_empty(leaf: &Word) -> bool {
|
||||
*leaf == Self::EMPTY_VALUE
|
||||
}
|
||||
|
||||
fn hash_prospective_leaf(&self, _key: &LeafIndex<DEPTH>, value: &Word) -> RpoDigest {
|
||||
Self::hash_leaf(value)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue