Struct miden_objects::transaction::ChainMmr

source ·
pub struct ChainMmr { /* private fields */ }
Expand description

A struct that represents the chain Merkle Mountain Range (MMR).

The MMR allows for efficient authentication of input notes during transaction execution. Authentication is achieved by providing inclusion proofs for the notes consumed in the transaction against the chain MMR root associated with the latest block known at the time of transaction execution.

ChainMmr represents a partial view into the actual MMR and contains authentication paths for a limited set of blocks. The intent is to include only the blocks relevant for execution of a specific transaction (i.e., the blocks corresponding to all input notes).

Implementations§

source§

impl ChainMmr

source

pub fn new( mmr: PartialMmr, blocks: Vec<BlockHeader>, ) -> Result<Self, ChainMmrError>

Returns a new ChainMmr instantiated from the provided partial MMR and a list of block headers.

§Errors

Returns an error if:

  • block_num for any of the blocks is greater than the chain length implied by the provided partial MMR.
  • The same block appears more than once in the provided list of block headers.
  • The partial MMR does not track authentication paths for any of the specified blocks.
source

pub fn peaks(&self) -> MmrPeaks

Returns peaks of this MMR.

source

pub fn chain_length(&self) -> usize

Returns total number of blocks contain in the chain described by this MMR.

source

pub fn contains_block(&self, block_num: u32) -> bool

Returns true if the block is present in this chain MMR.

source

pub fn get_block(&self, block_num: u32) -> Option<&BlockHeader>

Returns the block header for the specified block, or None if the block is not present in this chain MMR.

source

pub fn add_block(&mut self, block_header: BlockHeader, track: bool)

Appends the provided block header to this chain MMR. This method assumes that the provided block header is for the next block in the chain.

If track parameter is set to true, the authentication path for the provided block header will be added to this chain MMR.

§Panics

Panics if the block_header.block_num is not equal to the current chain length (i.e., the provided block header is not the next block in the chain).

source

pub fn inner_nodes(&self) -> impl Iterator<Item = InnerNodeInfo> + '_

Returns an iterator over the inner nodes of authentication paths contained in this chain MMR.

Trait Implementations§

source§

impl Clone for ChainMmr

source§

fn clone(&self) -> ChainMmr

Returns a copy 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 Debug for ChainMmr

source§

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

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

impl PartialEq for ChainMmr

source§

fn eq(&self, other: &ChainMmr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for ChainMmr

source§

impl StructuralPartialEq for ChainMmr

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§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Same for T

§

type Output = T

Should always be Self
source§

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

§

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

§

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

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more