Skip to main content

UnbalancedMerkleTree

Struct UnbalancedMerkleTree 

Source
pub struct UnbalancedMerkleTree;
Expand description

Merkle Tree variant that has pre-hashed leaves with arbitrary number of elements.

This can be considered a general case of BalancedMerkleTree. The root and proofs are identical for both in case the number of leaves is a power of two. BalancedMerkleTree is more efficient and should be preferred when possible.

The unbalanced tree is not padded, it is created the same way Merkle Mountain Range would be:

              Root
        /--------------\
       H3              H4
   /-------\         /----\
  H0       H1       H2     \
 /  \     /  \     /  \     \
L0  L1   L2  L3   L4  L5    L6

Implementations§

Source§

impl UnbalancedMerkleTree

Source

pub fn compute_root_only<'a, const MAX_N: u64, Item, Iter>( leaves: Iter, ) -> Option<[u8; 32]>
where [(); { _ }]:, Item: Into<[u8; 32]>, Iter: IntoIterator<Item = Item> + 'a,

Compute Merkle Tree Root.

MAX_N generic constant defines the maximum number of elements supported and controls stack usage.

Returns None for an empty list of leaves, or if the number of leaves is larger than MAX_N.

Source

pub fn compute_root_and_proof<'a, const MAX_N: u64, Item, Iter>( leaves: Iter, target_index: usize, ) -> Option<([u8; 32], Vec<[u8; 32]>)>
where [(); { _ }]:, Item: Into<[u8; 32]>, Iter: IntoIterator<Item = Item> + 'a,

Compute Merkle Tree root and generate a proof for the leaf at target_index.

Returns Some((root, proof)) on success, None if index is outside of list of leaves.

MAX_N generic constant defines the maximum number of elements supported and controls stack usage.

Source

pub fn compute_root_and_proof_in<'a, 'proof, const MAX_N: u64, Item, Iter>( leaves: Iter, target_index: usize, proof: &'proof mut [MaybeUninit<[u8; 32]>; { _ }], ) -> Option<([u8; 32], &'proof mut [[u8; 32]])>
where [(); { _ }]:, Item: Into<[u8; 32]>, Iter: IntoIterator<Item = Item> + 'a,

Compute Merkle Tree root and generate a proof for the leaf at target_index.

Returns Some((root, proof)) on success, None if index is outside of list of leaves.

MAX_N generic constant defines the maximum number of elements supported and controls stack usage.

Source

pub fn verify( root: &[u8; 32], proof: &[[u8; 32]], leaf_index: u64, leaf: [u8; 32], num_leaves: u64, ) -> bool

Verify a Merkle proof for a leaf at the given index

Trait Implementations§

Source§

impl Debug for UnbalancedMerkleTree

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.