pub struct MerkleTree { /* private fields */ }Expand description
The Merkle tree.
Implementations§
Source§impl MerkleTree
impl MerkleTree
Sourcepub fn append(&mut self, entry: MerkleEntry) -> u64
pub fn append(&mut self, entry: MerkleEntry) -> u64
Append an entry.
O(log N): updates only the path from the new leaf up to the root. Each level either pairs its last two nodes (replacing the promoted copy one level up) or promotes the new node as-is.
Sourcepub fn root(&self) -> Hash
pub fn root(&self) -> Hash
Compute the current root hash. Empty tree returns all-zeros.
O(1) — the root is incrementally maintained on every append().
Sourcepub fn entry(&self, sequence: u64) -> Result<&MerkleEntry, MerkleError>
pub fn entry(&self, sequence: u64) -> Result<&MerkleEntry, MerkleError>
Get an entry by sequence.
Sourcepub fn inclusion_proof(
&self,
sequence: u64,
) -> Result<InclusionProof, MerkleError>
pub fn inclusion_proof( &self, sequence: u64, ) -> Result<InclusionProof, MerkleError>
Construct an inclusion proof for sequence. Returns direction-aware
proof per RFC 6962 §2.1.1.
O(log N) — walks the cached levels from leaf to root, picking the sibling at each level. Compare to the previous O(N) implementation which rebuilt every level on each call.
Sourcepub fn verify_inclusion(
entry: &MerkleEntry,
proof: &InclusionProof,
root: Hash,
) -> Result<(), MerkleError>
pub fn verify_inclusion( entry: &MerkleEntry, proof: &InclusionProof, root: Hash, ) -> Result<(), MerkleError>
Verify an inclusion proof (RFC 6962 §2.1.1).
Sourcepub fn consistency_proof(
&self,
old_size: usize,
) -> Result<Vec<Hash>, MerkleError>
pub fn consistency_proof( &self, old_size: usize, ) -> Result<Vec<Hash>, MerkleError>
Compute a consistency proof (RFC 6962 §2.1.2).
Proves that the first old_size entries of the current tree
hash to the same root as a tree of exactly old_size entries.
Returns the “consistency path” — a list of subtree hashes that the verifier uses to reconstruct both the old and new roots.
Sourcepub fn verify_consistency(
&self,
old_root: Hash,
new_root: Hash,
old_size: usize,
new_size: usize,
_proof: &[Hash],
) -> Result<(), MerkleError>
pub fn verify_consistency( &self, old_root: Hash, new_root: Hash, old_size: usize, new_size: usize, _proof: &[Hash], ) -> Result<(), MerkleError>
Verify a consistency proof (RFC 6962 §2.1.2).
Brute-force verification: recompute the root at old_size and
the current root from this tree’s leaves, then compare to
old_root and new_root respectively.
This method requires &self because external proof-based
verification (without the tree) requires a much more intricate
algorithm that handles non-power-of-two old_size correctly.
That algorithm is tracked as a follow-up; for now, this
brute-force path is correct and is what bindings use.
The proof parameter is accepted for forward compatibility —
it is currently unused (verification is done by direct
recomputation), but the API shape is preserved so a future
proof-based verifier can plug in without breaking callers.
Trait Implementations§
Source§impl Clone for MerkleTree
impl Clone for MerkleTree
Source§fn clone(&self) -> MerkleTree
fn clone(&self) -> MerkleTree
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more