Trait grin_core::core::pmmr::ReadablePMMR
source · pub trait ReadablePMMR {
type Item;
Show 16 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;
fn n_unpruned_leaves_to_index(&self, to_index: u64) -> 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
sourcefn n_unpruned_leaves_to_index(&self, to_index: u64) -> u64
fn n_unpruned_leaves_to_index(&self, to_index: u64) -> u64
Number of leaves in the MMR up to index
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.