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>
impl<V: Default + Clone + Mergeable + ProofExtractable> MerkleProof<V>
Sourcepub fn new(_idx: TreeIndex) -> MerkleProof<V>
pub fn new(_idx: TreeIndex) -> MerkleProof<V>
The constructor for proof of a single node.
Sourcepub fn new_batch(idx: &[TreeIndex]) -> MerkleProof<V>
pub fn new_batch(idx: &[TreeIndex]) -> MerkleProof<V>
The constructor for a batched proof.
Sourcepub fn get_batch_num(&self) -> usize
pub fn get_batch_num(&self) -> usize
Returns the number indexes in this proof.
Sourcepub fn get_indexes(&self) -> &[TreeIndex]
pub fn get_indexes(&self) -> &[TreeIndex]
Returns the indexes of the proof.
Sourcepub fn get_path_siblings(&self) -> &[V::ProofNode]
pub fn get_path_siblings(&self) -> &[V::ProofNode]
Returns the siblings of nodes along the path.
Sourcepub fn get_siblings_num(&self) -> usize
pub fn get_siblings_num(&self) -> usize
Returns the number of siblings along the proof path.
Sourcepub fn get_sibling_at_idx(&self, idx: usize) -> &V::ProofNode
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]
.
Sourcepub fn add_sibling(&mut self, value: V::ProofNode)
pub fn add_sibling(&mut self, value: V::ProofNode)
Add a sibling node at the end of the proof path.
Sourcepub fn set_siblings(&mut self, value: Vec<V::ProofNode>)
pub fn set_siblings(&mut self, value: Vec<V::ProofNode>)
Set the sibling nodes.
Sourcepub fn verify(&self, leaf: &V::ProofNode, root: &V::ProofNode) -> bool
pub fn verify(&self, leaf: &V::ProofNode, root: &V::ProofNode) -> bool
Verify a Merkle proof of a single node.
Sourcepub fn verify_batch(&self, leaves: &[V::ProofNode], root: &V::ProofNode) -> bool
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>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Clone,
impl<V: Clone + Clone + Default + Mergeable + ProofExtractable> Clone for MerkleProof<V>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Clone,
Source§fn clone(&self) -> MerkleProof<V>
fn clone(&self) -> MerkleProof<V>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<V: Debug + Clone + Default + Mergeable + ProofExtractable> Debug for MerkleProof<V>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Debug,
impl<V: Debug + Clone + Default + Mergeable + ProofExtractable> Debug for MerkleProof<V>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Debug,
Source§impl<V: Default + Clone + Default + Mergeable + ProofExtractable> Default for MerkleProof<V>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Default,
impl<V: Default + Clone + Default + Mergeable + ProofExtractable> Default for MerkleProof<V>where
<V as ProofExtractable>::ProofNode: Clone + Default + Eq + Mergeable + Serializable,
V::ProofNode: Default,
Source§fn default() -> MerkleProof<V>
fn default() -> MerkleProof<V>
Source§impl<P: Clone + Default + Mergeable + Paddable + ProofExtractable> InclusionProvable for MerkleProof<P>
impl<P: Clone + Default + Mergeable + Paddable + ProofExtractable> InclusionProvable for MerkleProof<P>
Source§fn generate_inclusion_proof(
tree: &Self::TreeStruct,
list: &[TreeIndex],
) -> Option<Self>
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
type ProofNodeType = <P as ProofExtractable>::ProofNode
Source§type TreeStruct = SparseMerkleTree<P>
type TreeStruct = SparseMerkleTree<P>
Source§fn verify_inclusion_proof(
&self,
leaves: &[Self::ProofNodeType],
root: &Self::ProofNodeType,
) -> bool
fn verify_inclusion_proof( &self, leaves: &[Self::ProofNodeType], root: &Self::ProofNodeType, ) -> bool
Source§impl<V: Default + Clone + Mergeable + ProofExtractable> Serializable for MerkleProof<V>
impl<V: Default + Clone + Mergeable + ProofExtractable> Serializable for MerkleProof<V>
Source§fn serialize(&self) -> Vec<u8> ⓘ
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>
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,
fn deserialize(bytes: &[u8]) -> Result<Self, DecodingError>where
Self: Sized,
Self
object, using up all bytes. Read moreAuto Trait Implementations§
impl<V> Freeze for MerkleProof<V>
impl<V> RefUnwindSafe for MerkleProof<V>
impl<V> Send for MerkleProof<V>
impl<V> Sync for MerkleProof<V>
impl<V> Unpin for MerkleProof<V>
impl<V> UnwindSafe for MerkleProof<V>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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