Struct storage_proofs_core::merkle::MerkleTreeWrapper

source ·
pub struct MerkleTreeWrapper<H: Hasher, S: Store<<H as Hasher>::Domain>, U: PoseidonArity, V: PoseidonArity = U0, W: PoseidonArity = U0> {
    pub inner: MerkleTree<<H as Hasher>::Domain, <H as Hasher>::Function, S, U, V, W>,
    pub h: PhantomData<H>,
}

Fields§

§inner: MerkleTree<<H as Hasher>::Domain, <H as Hasher>::Function, S, U, V, W>§h: PhantomData<H>

Implementations§

source§

impl<H: Hasher, S: Store<<H as Hasher>::Domain>, U: PoseidonArity, V: PoseidonArity, W: PoseidonArity> MerkleTreeWrapper<H, S, U, V, W>

source

pub fn new<I: IntoIterator<Item = H::Domain>>(data: I) -> Result<Self>

source

pub fn new_with_config<I: IntoIterator<Item = H::Domain>>( data: I, config: StoreConfig, ) -> Result<Self>

source

pub fn from_data_with_config<O: Hashable<H::Function>, I: IntoIterator<Item = O>>( data: I, config: StoreConfig, ) -> Result<Self>

source

pub fn from_data_store(data: S, leafs: usize) -> Result<Self>

source

pub fn from_byte_slice_with_config( data: &[u8], config: StoreConfig, ) -> Result<Self>

source

pub fn from_tree_slice(data: &[u8], leafs: usize) -> Result<Self>

source

pub fn from_tree_slice_with_config( data: &[u8], leafs: usize, config: StoreConfig, ) -> Result<Self>

source

pub fn from_trees( trees: Vec<MerkleTreeWrapper<H, S, U, U0, U0>>, ) -> Result<Self>

source

pub fn from_sub_trees( trees: Vec<MerkleTreeWrapper<H, S, U, V, U0>>, ) -> Result<Self>

source

pub fn from_sub_trees_as_trees( trees: Vec<MerkleTreeWrapper<H, S, U, U0, U0>>, ) -> Result<Self>

source

pub fn from_slices( tree_data: &[&[u8]], leafs: usize, ) -> Result<MerkleTreeWrapper<H, S, U, V, U0>>

source

pub fn from_slices_with_configs( tree_data: &[&[u8]], leafs: usize, configs: &[StoreConfig], ) -> Result<Self>

source

pub fn from_stores(leafs: usize, stores: Vec<S>) -> Result<Self>

source

pub fn from_store_configs(leafs: usize, configs: &[StoreConfig]) -> Result<Self>

source

pub fn from_store_configs_and_replica( leafs: usize, configs: &[StoreConfig], replica_config: &ReplicaConfig, ) -> Result<LCTree<H, U, V, W>>

source

pub fn from_sub_tree_store_configs( leafs: usize, configs: &[StoreConfig], ) -> Result<Self>

source

pub fn try_from_iter<I: IntoIterator<Item = Result<H::Domain>>>( into: I, ) -> Result<Self>

source

pub fn from_sub_tree_store_configs_and_replica( leafs: usize, configs: &[StoreConfig], replica_config: &ReplicaConfig, ) -> Result<LCTree<H, U, V, W>>

source

pub fn try_from_iter_with_config<I: IntoIterator<Item = Result<H::Domain>>>( into: I, config: StoreConfig, ) -> Result<Self>

source

pub fn from_par_iter<I>(par_iter: I) -> Result<Self>

source

pub fn from_par_iter_with_config<I>( par_iter: I, config: StoreConfig, ) -> Result<Self>

Methods from Deref<Target = MerkleTree<H::Domain, H::Function, S, BaseArity, SubTreeArity, TopTreeArity>>§

source

pub fn set_external_reader_path(&mut self, path: &Path) -> Result<(), Error>

Given a pathbuf, instantiate an ExternalReader and set it for the LevelCacheStore.

source

pub fn gen_proof(&self, i: usize) -> Result<Proof<E, BaseTreeArity>, Error>

Generate merkle tree inclusion proof for leaf i

source

pub fn gen_cached_proof( &self, i: usize, rows_to_discard: Option<usize>, ) -> Result<Proof<E, BaseTreeArity>, Error>

Generate merkle tree inclusion proof for leaf i by first building a partial tree (returned) along with the proof. ‘rows_to_discard’ is an option that will be used if set (even if it may cause an error), otherwise a reasonable default is chosen.

Return value is a Result tuple of the proof and the partial tree that was constructed.

source

pub fn root(&self) -> E

Returns merkle root

source

pub fn len(&self) -> usize

Returns number of elements in the tree.

source

pub fn compact( &mut self, config: StoreConfig, store_version: u32, ) -> Result<bool, Error>

Truncates the data for later access via LevelCacheStore interface.

source

pub fn reinit(&mut self) -> Result<(), Error>

source

pub fn delete(&self, config: StoreConfig) -> Result<(), Error>

Removes the backing store for this merkle tree.

source

pub fn is_empty(&self) -> bool

Returns true if the store contains no elements.

source

pub fn row_count(&self) -> usize

Returns row_count of the tree

source

pub fn leafs(&self) -> usize

Returns original number of elements the tree was built upon.

source

pub fn data(&self) -> Option<&S>

Returns data reference

source

pub fn read_at(&self, i: usize) -> Result<E, Error>

Returns merkle leaf at index i

source

pub fn read_range(&self, start: usize, end: usize) -> Result<Vec<E>, Error>

source

pub fn read_range_into( &self, start: usize, end: usize, buf: &mut [u8], ) -> Result<(), Error>

source

pub fn read_into(&self, pos: usize, buf: &mut [u8]) -> Result<(), Error>

Reads into a pre-allocated slice (for optimization purposes).

Trait Implementations§

source§

impl<H: Hasher, S: Store<<H as Hasher>::Domain>, BaseArity: PoseidonArity, SubTreeArity: PoseidonArity, TopTreeArity: PoseidonArity> Debug for MerkleTreeWrapper<H, S, BaseArity, SubTreeArity, TopTreeArity>

source§

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

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

impl<H: Hasher, S: Store<<H as Hasher>::Domain>, BaseArity: PoseidonArity, SubTreeArity: PoseidonArity, TopTreeArity: PoseidonArity> DerefMut for MerkleTreeWrapper<H, S, BaseArity, SubTreeArity, TopTreeArity>

source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
source§

impl<H: Hasher, S: Store<<H as Hasher>::Domain>, U: PoseidonArity, V: PoseidonArity, W: PoseidonArity> From<MerkleTree<<H as Hasher>::Domain, <H as Hasher>::Function, S, U, V, W>> for MerkleTreeWrapper<H, S, U, V, W>

source§

fn from( tree: MerkleTree<<H as Hasher>::Domain, <H as Hasher>::Function, S, U, V, W>, ) -> Self

Converts to this type from the input type.
source§

impl<H: 'static + Hasher, S: Store<<H as Hasher>::Domain>, U: 'static + PoseidonArity, V: 'static + PoseidonArity, W: 'static + PoseidonArity> MerkleTreeTrait for MerkleTreeWrapper<H, S, U, V, W>

§

type Arity = U

§

type SubTreeArity = V

§

type TopTreeArity = W

§

type Hasher = H

§

type Store = S

§

type Proof = MerkleProof<<MerkleTreeWrapper<H, S, U, V, W> as MerkleTreeTrait>::Hasher, <MerkleTreeWrapper<H, S, U, V, W> as MerkleTreeTrait>::Arity, <MerkleTreeWrapper<H, S, U, V, W> as MerkleTreeTrait>::SubTreeArity, <MerkleTreeWrapper<H, S, U, V, W> as MerkleTreeTrait>::TopTreeArity>

source§

fn display() -> String

Print a unique name for this configuration.
source§

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

Returns the root hash of the tree.
source§

fn gen_proof(&self, i: usize) -> Result<Self::Proof>

Creates a merkle proof of the node at the given index.
source§

fn gen_cached_proof( &self, i: usize, rows_to_discard: Option<usize>, ) -> Result<Self::Proof>

source§

fn row_count(&self) -> usize

source§

fn leaves(&self) -> usize

source§

fn from_merkle( tree: MerkleTree<<Self::Hasher as Hasher>::Domain, <Self::Hasher as Hasher>::Function, Self::Store, Self::Arity, Self::SubTreeArity, Self::TopTreeArity>, ) -> Self

source§

impl<H: Hasher, S: Store<<H as Hasher>::Domain>, BaseArity: PoseidonArity, SubTreeArity: PoseidonArity, TopTreeArity: PoseidonArity> Deref for MerkleTreeWrapper<H, S, BaseArity, SubTreeArity, TopTreeArity>

§

type Target = MerkleTree<<H as Hasher>::Domain, <H as Hasher>::Function, S, BaseArity, SubTreeArity, TopTreeArity>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<H, S, U, V, W> Freeze for MerkleTreeWrapper<H, S, U, V, W>
where <H as Hasher>::Domain: Freeze, S: Freeze,

§

impl<H, S, U, V, W> RefUnwindSafe for MerkleTreeWrapper<H, S, U, V, W>

§

impl<H, S, U, V, W> Send for MerkleTreeWrapper<H, S, U, V, W>

§

impl<H, S, U, V, W> Sync for MerkleTreeWrapper<H, S, U, V, W>

§

impl<H, S, U, V, W> Unpin for MerkleTreeWrapper<H, S, U, V, W>
where <H as Hasher>::Domain: Unpin, H: Unpin, S: Unpin, <H as Hasher>::Function: Unpin, U: Unpin, V: Unpin, W: Unpin,

§

impl<H, S, U, V, W> UnwindSafe for MerkleTreeWrapper<H, S, U, V, W>

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

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

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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