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§

source

type Item

Leaf type

Required Methods§

source

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

source

fn get_data(&self, pos: u64) -> Option<Self::Item>

Get the data element at provided position in the MMR.

source

fn get_from_file(&self, pos: u64) -> Option<Hash>

Get the hash from the underlying MMR file (ignores the remove log).

source

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.

source

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).

source

fn unpruned_size(&self) -> u64

Total size of the tree, including intermediary nodes and ignoring any pruning.

source

fn leaf_pos_iter(&self) -> Box<dyn Iterator<Item = u64> + '_>

Iterator over current (unpruned, unremoved) leaf positions.

source

fn leaf_idx_iter(&self, from_idx: u64) -> Box<dyn Iterator<Item = u64> + '_>

Iterator over current (unpruned, unremoved) leaf insertion indices.

source

fn n_unpruned_leaves(&self) -> u64

Number of leaves in the MMR

source

fn n_unpruned_leaves_to_index(&self, to_index: u64) -> u64

Number of leaves in the MMR up to index

Provided Methods§

source

fn is_empty(&self) -> bool

Is the MMR empty?

source

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.

source

fn peaks(&self) -> Vec<Hash>

Returns a vec of the peaks of this MMR.

source

fn peak_path(&self, peak_pos0: u64) -> Vec<Hash>

Hashes of the peaks excluding peak_pos, where the rhs is bagged together

source

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.

source

fn merkle_proof(&self, pos0: u64) -> Result<MerkleProof, String>

Build a Merkle proof for the element at the given position.

Implementors§

source§

impl<'a, T, B> ReadablePMMR for PMMR<'a, T, B>
where T: PMMRable, B: 'a + Backend<T>,

§

type Item = <T as PMMRable>::E

source§

impl<'a, T, B> ReadablePMMR for ReadonlyPMMR<'a, T, B>
where T: PMMRable, B: 'a + Backend<T>,

§

type Item = <T as PMMRable>::E