pub struct MerkleTree<H: Hasher = Keccak256> {
pub root: MerkleRoot<H>,
pub nodes: Vec<H::Hash>,
}
Expand description
A MerkleTree is a binary tree where each node is the hash of its children.
Fields§
§root: MerkleRoot<H>
§nodes: Vec<H::Hash>
Implementations§
Source§impl<H: Hasher> MerkleTree<H>
Implement a MerkleTree-specific interface for interacting with trees.
impl<H: Hasher> MerkleTree<H>
Implement a MerkleTree-specific interface for interacting with trees.
Sourcepub fn new(items: &[&[u8]]) -> Option<Self>
pub fn new(items: &[&[u8]]) -> Option<Self>
Construct a new MerkleTree from a list of byte slices.
This list does not have to be a set which means the tree may contain duplicate items. It is up to the caller to enforce a strict set-like object if that is desired.
Sourcepub fn find_path(&self, index: usize) -> MerklePath<H>
pub fn find_path(&self, index: usize) -> MerklePath<H>
Produces a Proof of membership for an index in the tree.
Sourcepub fn verify_path(&self, proof: MerklePath<H>, item: &[u8]) -> bool
pub fn verify_path(&self, proof: MerklePath<H>, item: &[u8]) -> bool
Check if a given MerklePath is a valid proof for a corresponding item.
pub fn hash_leaf(leaf: &[u8]) -> H::Hash
pub fn hash_node(l: &H::Hash, r: &H::Hash) -> H::Hash
pub fn hash_null() -> H::Hash
Sourcepub fn serialize(&self, slot: u64, ring_size: u32) -> Vec<u8> ⓘ
pub fn serialize(&self, slot: u64, ring_size: u32) -> Vec<u8> ⓘ
Serialize a MerkleTree into a Vec
Layout:
ⓘ
4 bytes: magic number
1 byte: update type
4 byte: storage id
32 bytes: root hash
TODO: This code does not belong to MerkleTree, we should be using the wire data types in calling code to wrap this value.
Trait Implementations§
Source§impl<'a, H: Hasher + 'a> Accumulator<'a> for MerkleTree<H>
Presents an Accumulator friendly interface for MerkleTree.
impl<'a, H: Hasher + 'a> Accumulator<'a> for MerkleTree<H>
Presents an Accumulator friendly interface for MerkleTree.
Source§impl<H: Hasher> BorshDeserialize for MerkleTree<H>where
MerkleRoot<H>: BorshDeserialize,
impl<H: Hasher> BorshDeserialize for MerkleTree<H>where
MerkleRoot<H>: BorshDeserialize,
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Deserializes this instance from a given slice of bytes.
Updates the buffer to point at the remaining bytes.
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
Deserialize this instance from a slice of bytes.
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl<H: Hasher> BorshSerialize for MerkleTree<H>where
MerkleRoot<H>: BorshSerialize,
impl<H: Hasher> BorshSerialize for MerkleTree<H>where
MerkleRoot<H>: BorshSerialize,
Source§impl<H: Clone + Hasher> Clone for MerkleTree<H>
impl<H: Clone + Hasher> Clone for MerkleTree<H>
Source§fn clone(&self) -> MerkleTree<H>
fn clone(&self) -> MerkleTree<H>
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl<H: Default + Hasher> Default for MerkleTree<H>
impl<H: Default + Hasher> Default for MerkleTree<H>
Source§fn default() -> MerkleTree<H>
fn default() -> MerkleTree<H>
Returns the “default value” for a type. Read more
Source§impl<'de, H> Deserialize<'de> for MerkleTree<H>where
H: Deserialize<'de> + Hasher,
impl<'de, H> Deserialize<'de> for MerkleTree<H>where
H: Deserialize<'de> + Hasher,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<H> Serialize for MerkleTree<H>
impl<H> Serialize for MerkleTree<H>
impl<H: Eq + Hasher> Eq for MerkleTree<H>
impl<H: Hasher> StructuralPartialEq for MerkleTree<H>
Auto Trait Implementations§
impl<H> Freeze for MerkleTree<H>
impl<H> RefUnwindSafe for MerkleTree<H>
impl<H> Send for MerkleTree<H>
impl<H> Sync for MerkleTree<H>
impl<H> Unpin for MerkleTree<H>
impl<H> UnwindSafe for MerkleTree<H>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more