diff --git a/src/merkle/tiered_smt/mod.rs b/src/merkle/tiered_smt/mod.rs index 52a3f89..b8dd52f 100644 --- a/src/merkle/tiered_smt/mod.rs +++ b/src/merkle/tiered_smt/mod.rs @@ -214,6 +214,11 @@ impl TieredSmt { // ITERATORS // -------------------------------------------------------------------------------------------- + /// Returns an iterator over all key-value pairs in this [TieredSmt]. + pub fn iter(&self) -> impl Iterator { + self.values.iter() + } + /// Returns an iterator over all inner nodes of this [TieredSmt] (i.e., nodes not at depths 16 /// 32, 48, or 64). /// @@ -230,6 +235,7 @@ impl TieredSmt { self.nodes.upper_leaves().map(|(index, node)| { let key_prefix = index_to_prefix(index); let (key, value) = self.values.get_first(key_prefix).expect("upper leaf not found"); + debug_assert_eq!(key_to_index(key, index.depth()), *index); (*node, *key, *value) }) } diff --git a/src/merkle/tiered_smt/values.rs b/src/merkle/tiered_smt/values.rs index b80aebd..eca8e5d 100644 --- a/src/merkle/tiered_smt/values.rs +++ b/src/merkle/tiered_smt/values.rs @@ -108,6 +108,11 @@ impl ValueStore { None } + /// Returns an iterator over all key-value pairs in this store. + pub fn iter(&self) -> impl Iterator { + self.values.iter().flat_map(|(_, entry)| entry.iter()) + } + // STATE MUTATORS // --------------------------------------------------------------------------------------------