Struct MerkleProof

Source
pub struct MerkleProof<V: Clone + Default + Mergeable + ProofExtractable>{ /* private fields */ }
Expand description

A proof depicts a Merkle path.

It consists of the tree index of the proved node, which indicates the path from the root to it, and the siblings of nodes along the path, excluding the root which doesn’t have a sibling.

Implementations§

Source§

impl<V: Default + Clone + Mergeable + ProofExtractable> MerkleProof<V>

Source

pub fn new(_idx: TreeIndex) -> MerkleProof<V>

The constructor for proof of a single node.

Source

pub fn new_batch(idx: &[TreeIndex]) -> MerkleProof<V>

The constructor for a batched proof.

Source

pub fn get_batch_num(&self) -> usize

Returns the number indexes in this proof.

Source

pub fn get_indexes(&self) -> &[TreeIndex]

Returns the indexes of the proof.

Source

pub fn get_path_siblings(&self) -> &[V::ProofNode]

Returns the siblings of nodes along the path.

Source

pub fn get_siblings_num(&self) -> usize

Returns the number of siblings along the proof path.

Source

pub fn get_sibling_at_idx(&self, idx: usize) -> &V::ProofNode

Returns the sibling of the node at input index.

For the single node proof, the sibling which is the child of the root has index 0, and the sibling of the proved node has the greatest index.

For a batched proof, the order of siblings follows the BFS order.

Panics if the input index is out of the range [0, siblings_num-1].

Source

pub fn add_sibling(&mut self, value: V::ProofNode)

Add a sibling node at the end of the proof path.

Source

pub fn set_siblings(&mut self, value: Vec<V::ProofNode>)

Set the sibling nodes.

Source

pub fn verify(&self, leaf: &V::ProofNode, root: &V::ProofNode) -> bool

Verify a Merkle proof of a single node.

Source

pub fn verify_batch(&self, leaves: &[V::ProofNode], root: &V::ProofNode) -> bool

Verify a batched Merkle proof.

Trait Implementations§

Source§

impl<V: Clone + Clone + Default + Mergeable + ProofExtractable> Clone for MerkleProof<V>

Source§

fn clone(&self) -> MerkleProof<V>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<V: Debug + Clone + Default + Mergeable + ProofExtractable> Debug for MerkleProof<V>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<V: Default + Clone + Default + Mergeable + ProofExtractable> Default for MerkleProof<V>

Source§

fn default() -> MerkleProof<V>

Returns the “default value” for a type. Read more
Source§

impl<P: Clone + Default + Mergeable + Paddable + ProofExtractable> InclusionProvable for MerkleProof<P>

Source§

fn generate_inclusion_proof( tree: &Self::TreeStruct, list: &[TreeIndex], ) -> Option<Self>

Generate Merkle proof for a given list of nodes.

Return None if any of the input node doesn’t exist in the tree.

Source§

type ProofNodeType = <P as ProofExtractable>::ProofNode

The data type of a node with necessary information in Merkle proofs.
Source§

type TreeStruct = SparseMerkleTree<P>

The data type of the Merkle tree.
Source§

fn verify_inclusion_proof( &self, leaves: &[Self::ProofNodeType], root: &Self::ProofNodeType, ) -> bool

Verify the inclusion proof according to the leave nodes and the root.
Source§

impl<V: Default + Clone + Mergeable + ProofExtractable> Serializable for MerkleProof<V>

Source§

fn serialize(&self) -> Vec<u8>

Encode a proof in the format: batch_num || tree_indexes || sibling_num || siblings.

If the index list is empty, return empty vector.

Source§

fn deserialize_as_a_unit( bytes: &[u8], begin: &mut usize, ) -> Result<MerkleProof<V>, DecodingError>

Decode input bytes (batch_num || tree_indexes || sibling_num || siblings) as a Merkle proof.

If there are bytes left, not used for decoding, or *begin != bytes.len() at the end of the execution, return DecodingError::TooManyEncodedBytes.

Source§

fn deserialize(bytes: &[u8]) -> Result<Self, DecodingError>
where Self: Sized,

Decode the input bytes as a Self object, using up all bytes. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V