remove at_idx method
This commit is contained in:
parent
5557a89538
commit
d3e70cf58b
2 changed files with 1 additions and 43 deletions
|
@ -48,16 +48,6 @@ impl MerklePath {
|
||||||
self.nodes.get(index as usize).copied()
|
self.nodes.get(index as usize).copied()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a reference to the path node at the specified index, or [None] if the index is out
|
|
||||||
/// of bounds.
|
|
||||||
///
|
|
||||||
/// The node at index 0 is the deepest part of the path.
|
|
||||||
///
|
|
||||||
/// This is a checked version of using the indexing operator `[]`.
|
|
||||||
pub fn at_idx(&self, index: usize) -> Option<RpoDigest> {
|
|
||||||
self.nodes.get(index).copied()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the depth in which this Merkle path proof is valid.
|
/// Returns the depth in which this Merkle path proof is valid.
|
||||||
pub fn depth(&self) -> u8 {
|
pub fn depth(&self) -> u8 {
|
||||||
self.nodes.len() as u8
|
self.nodes.len() as u8
|
||||||
|
|
|
@ -17,7 +17,7 @@ use super::{
|
||||||
/// maximum of 64 nodes (`SMT_MAX_DEPTH`) can be stored (empty and non-empty). The more nodes in a
|
/// maximum of 64 nodes (`SMT_MAX_DEPTH`) can be stored (empty and non-empty). The more nodes in a
|
||||||
/// path are empty, the less memory this struct will use. This type calculates empty nodes on-demand
|
/// path are empty, the less memory this struct will use. This type calculates empty nodes on-demand
|
||||||
/// when iterated through, converted to a [MerklePath], or an empty node is retrieved with
|
/// when iterated through, converted to a [MerklePath], or an empty node is retrieved with
|
||||||
/// [`SparseMerklePath::at_idx()`] or [`SparseMerklePath::at_depth()`], which will incur overhead.
|
/// [`SparseMerklePath::at_depth()`], which will incur overhead.
|
||||||
///
|
///
|
||||||
/// NOTE: This type assumes that Merkle paths always span from the root of the tree to a leaf.
|
/// NOTE: This type assumes that Merkle paths always span from the root of the tree to a leaf.
|
||||||
/// Partial paths are not supported.
|
/// Partial paths are not supported.
|
||||||
|
@ -99,28 +99,6 @@ impl SparseMerklePath {
|
||||||
Ok(node)
|
Ok(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the path node at the specified index, or [None] if the index is out of bounds.
|
|
||||||
///
|
|
||||||
/// The node at index 0 is the deepest part of the path.
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// # use core::num::NonZero;
|
|
||||||
/// # use miden_crypto::{ZERO, ONE, hash::rpo::RpoDigest, merkle::SparseMerklePath};
|
|
||||||
/// # let zero = RpoDigest::new([ZERO; 4]);
|
|
||||||
/// # let one = RpoDigest::new([ONE; 4]);
|
|
||||||
/// # let sparse_path = SparseMerklePath::from_sized_iter(vec![zero, one, one, zero]).unwrap();
|
|
||||||
/// let depth = NonZero::new(sparse_path.depth()).unwrap();
|
|
||||||
/// assert_eq!(
|
|
||||||
/// sparse_path.at_idx(0).unwrap(),
|
|
||||||
/// sparse_path.at_depth(depth).unwrap(),
|
|
||||||
/// );
|
|
||||||
/// ```
|
|
||||||
pub fn at_idx(&self, index: usize) -> Option<RpoDigest> {
|
|
||||||
// If this overflows *or* if the depth is zero then the index was out of bounds.
|
|
||||||
let depth = NonZero::new(u8::checked_sub(self.depth(), index as u8)?)?;
|
|
||||||
self.at_depth(depth).ok()
|
|
||||||
}
|
|
||||||
|
|
||||||
// PROVIDERS
|
// PROVIDERS
|
||||||
// ============================================================================================
|
// ============================================================================================
|
||||||
|
|
||||||
|
@ -570,15 +548,6 @@ mod tests {
|
||||||
let sparse_node = sparse_path.at_depth(depth).unwrap();
|
let sparse_node = sparse_path.at_depth(depth).unwrap();
|
||||||
assert_eq!(control_node, sparse_node, "at depth {depth} for entry {i}");
|
assert_eq!(control_node, sparse_node, "at depth {depth} for entry {i}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test random access by index.
|
|
||||||
// Letting index get to `control_path.len()` will test that both sides correctly return
|
|
||||||
// `None` for out of bounds access.
|
|
||||||
for index in 0..=(control_path.len()) {
|
|
||||||
let control_node = control_path.at_idx(index);
|
|
||||||
let sparse_node = sparse_path.at_idx(index);
|
|
||||||
assert_eq!(control_node, sparse_node);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -636,7 +605,6 @@ mod tests {
|
||||||
sparse_path.at_depth(NonZero::new(1).unwrap()),
|
sparse_path.at_depth(NonZero::new(1).unwrap()),
|
||||||
Err(MerkleError::DepthTooBig(1))
|
Err(MerkleError::DepthTooBig(1))
|
||||||
);
|
);
|
||||||
assert_eq!(sparse_path.at_idx(0), None);
|
|
||||||
assert_eq!(sparse_path.iter().next(), None);
|
assert_eq!(sparse_path.iter().next(), None);
|
||||||
assert_eq!(sparse_path.into_iter().next(), None);
|
assert_eq!(sparse_path.into_iter().next(), None);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue