pub trait ReadablePMMR {
type Item;
Show 15 methods
// Required methods
fn get_hash(&self, pos: u64) -> Option<Hash>;
fn get_data(&self, pos: u64) -> Option<Self::Item>;
fn get_from_file(&self, pos: u64) -> Option<Hash>;
fn get_peak_from_file(&self, pos: u64) -> Option<Hash>;
fn get_data_from_file(&self, pos: u64) -> Option<Self::Item>;
fn unpruned_size(&self) -> u64;
fn leaf_pos_iter(&self) -> Box<dyn Iterator<Item = u64> + '_>;
fn leaf_idx_iter(&self, from_idx: u64) -> Box<dyn Iterator<Item = u64> + '_>;
fn n_unpruned_leaves(&self) -> u64;
// Provided methods
fn is_empty(&self) -> bool { ... }
fn bag_the_rhs(&self, peak_pos0: u64) -> Option<Hash> { ... }
fn peaks(&self) -> Vec<Hash> { ... }
fn peak_path(&self, peak_pos0: u64) -> Vec<Hash> { ... }
fn root(&self) -> Result<Hash, String> { ... }
fn merkle_proof(&self, pos0: u64) -> Result<MerkleProof, String> { ... }
}Expand description
Trait with common methods for reading from a PMMR
Required Associated Types§
Required Methods§
Sourcefn get_hash(&self, pos: u64) -> Option<Hash>
fn get_hash(&self, pos: u64) -> Option<Hash>
Get the hash at provided position in the MMR. NOTE all positions are 0-based, so a size n MMR has nodes in positions 0 through n-1 just like a Rust Range 0..n
Sourcefn get_data(&self, pos: u64) -> Option<Self::Item>
fn get_data(&self, pos: u64) -> Option<Self::Item>
Get the data element at provided position in the MMR.
Sourcefn get_from_file(&self, pos: u64) -> Option<Hash>
fn get_from_file(&self, pos: u64) -> Option<Hash>
Get the hash from the underlying MMR file (ignores the remove log).
Sourcefn get_peak_from_file(&self, pos: u64) -> Option<Hash>
fn get_peak_from_file(&self, pos: u64) -> Option<Hash>
Get the hash for the provided peak pos. Optimized for reading peak hashes rather than arbitrary pos hashes. Peaks can be assumed to not be compacted.
Sourcefn get_data_from_file(&self, pos: u64) -> Option<Self::Item>
fn get_data_from_file(&self, pos: u64) -> Option<Self::Item>
Get the data element at provided position in the MMR (ignores the remove log).
Sourcefn unpruned_size(&self) -> u64
fn unpruned_size(&self) -> u64
Total size of the tree, including intermediary nodes and ignoring any pruning.
Sourcefn leaf_pos_iter(&self) -> Box<dyn Iterator<Item = u64> + '_>
fn leaf_pos_iter(&self) -> Box<dyn Iterator<Item = u64> + '_>
Iterator over current (unpruned, unremoved) leaf positions.
Sourcefn leaf_idx_iter(&self, from_idx: u64) -> Box<dyn Iterator<Item = u64> + '_>
fn leaf_idx_iter(&self, from_idx: u64) -> Box<dyn Iterator<Item = u64> + '_>
Iterator over current (unpruned, unremoved) leaf insertion indices.
Sourcefn n_unpruned_leaves(&self) -> u64
fn n_unpruned_leaves(&self) -> u64
Number of leaves in the MMR
Provided Methods§
Sourcefn bag_the_rhs(&self, peak_pos0: u64) -> Option<Hash>
fn bag_the_rhs(&self, peak_pos0: u64) -> Option<Hash>
Takes a single peak position and hashes together all the peaks to the right of this peak (if any). If this return a hash then this is our peaks sibling. If none then the sibling of our peak is the peak to the left.
Sourcefn peak_path(&self, peak_pos0: u64) -> Vec<Hash>
fn peak_path(&self, peak_pos0: u64) -> Vec<Hash>
Hashes of the peaks excluding peak_pos, where the rhs is bagged together
Sourcefn root(&self) -> Result<Hash, String>
fn root(&self) -> Result<Hash, String>
Computes the root of the MMR. Find all the peaks in the current tree and “bags” them to get a single peak.
Sourcefn merkle_proof(&self, pos0: u64) -> Result<MerkleProof, String>
fn merkle_proof(&self, pos0: u64) -> Result<MerkleProof, String>
Build a Merkle proof for the element at the given position.