Trait storage_proofs_core::merkle::MerkleProofTrait

source ·
pub trait MerkleProofTrait: Clone + Serialize + DeserializeOwned + Debug + Sync + Send {
    type Hasher: Hasher;
    type Arity: 'static + PoseidonArity;
    type SubTreeArity: 'static + PoseidonArity;
    type TopTreeArity: 'static + PoseidonArity;

Show 14 methods // Required methods fn try_from_proof( p: Proof<<Self::Hasher as Hasher>::Domain, Self::Arity>, ) -> Result<Self>; fn verify(&self) -> bool; fn leaf(&self) -> <Self::Hasher as Hasher>::Domain; fn root(&self) -> <Self::Hasher as Hasher>::Domain; fn len(&self) -> usize; fn path(&self) -> Vec<(Vec<<Self::Hasher as Hasher>::Domain>, usize)>; // Provided methods fn as_options(&self) -> Vec<(Vec<Option<Fr>>, Option<usize>)> { ... } fn into_options_with_leaf( self, ) -> (Option<Fr>, Vec<(Vec<Option<Fr>>, Option<usize>)>) { ... } fn as_pairs(&self) -> Vec<(Vec<Fr>, usize)> { ... } fn validate(&self, node: usize) -> bool { ... } fn validate_data(&self, data: <Self::Hasher as Hasher>::Domain) -> bool { ... } fn path_index(&self) -> usize { ... } fn proves_challenge(&self, challenge: usize) -> bool { ... } fn expected_len(&self, leaves: usize) -> usize { ... }
}
Expand description

Trait to abstract over the concept of Merkle Proof.

Required Associated Types§

Required Methods§

source

fn try_from_proof( p: Proof<<Self::Hasher as Hasher>::Domain, Self::Arity>, ) -> Result<Self>

Try to convert a merkletree proof into this structure.

source

fn verify(&self) -> bool

source

fn leaf(&self) -> <Self::Hasher as Hasher>::Domain

source

fn root(&self) -> <Self::Hasher as Hasher>::Domain

source

fn len(&self) -> usize

source

fn path(&self) -> Vec<(Vec<<Self::Hasher as Hasher>::Domain>, usize)>

Provided Methods§

source

fn as_options(&self) -> Vec<(Vec<Option<Fr>>, Option<usize>)>

source

fn into_options_with_leaf( self, ) -> (Option<Fr>, Vec<(Vec<Option<Fr>>, Option<usize>)>)

source

fn as_pairs(&self) -> Vec<(Vec<Fr>, usize)>

source

fn validate(&self, node: usize) -> bool

Validates the MerkleProof and that it corresponds to the supplied node.

TODO: audit performance and usage in case verification is unnecessary based on how it’s used.

source

fn validate_data(&self, data: <Self::Hasher as Hasher>::Domain) -> bool

source

fn path_index(&self) -> usize

source

fn proves_challenge(&self, challenge: usize) -> bool

source

fn expected_len(&self, leaves: usize) -> usize

Calcluates the exected length of the full path, given the number of leaves in the base layer.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<H: Hasher, Arity: 'static + PoseidonArity, SubTreeArity: 'static + PoseidonArity, TopTreeArity: 'static + PoseidonArity> MerkleProofTrait for MerkleProof<H, Arity, SubTreeArity, TopTreeArity>

§

type Hasher = H

§

type Arity = Arity

§

type SubTreeArity = SubTreeArity

§

type TopTreeArity = TopTreeArity