Struct miden_objects::block::BlockHeader

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

The header of a block. It contains metadata about the block, commitments to the current state of the chain and the hash of the proof that attests to the integrity of the chain.

A block header includes the following fields:

  • version specifies the version of the protocol.
  • prev_hash is the hash of the previous block header.
  • block_num is a unique sequential number of the current block.
  • chain_root is a commitment to an MMR of the entire chain where each block is a leaf.
  • account_root is a commitment to account database.
  • nullifier_root is a commitment to the nullifier database.
  • note_root is a commitment to all notes created in the current block.
  • tx_hash is a commitment to a set of IDs of transactions which affected accounts in the block.
  • proof_hash is a hash of a STARK proof attesting to the correct state transition.
  • timestamp is the time when the block was created, in seconds since UNIX epoch. Current representation is sufficient to represent time up to year 2106.
  • sub_hash is a sequential hash of all fields except the note_root.
  • hash is a 2-to-1 hash of the sub_hash and the note_root.

Implementations§

source§

impl BlockHeader

source

pub fn new( version: u32, prev_hash: Digest, block_num: u32, chain_root: Digest, account_root: Digest, nullifier_root: Digest, note_root: Digest, tx_hash: Digest, proof_hash: Digest, timestamp: u32, ) -> Self

Creates a new block header.

source

pub fn version(&self) -> u32

Returns the protocol version.

source

pub fn hash(&self) -> Digest

Returns the hash of the block header.

source

pub fn sub_hash(&self) -> Digest

Returns the sub hash of the block header. The sub hash is a sequential hash of all block header fields except the note root. This is used in the block hash computation which is a 2-to-1 hash of the sub hash and the note root [hash(sub_hash, note_root)]. This procedure is used to make the note root easily accessible without having to unhash the entire header.

source

pub fn prev_hash(&self) -> Digest

Returns the hash of the previous block header.

source

pub fn block_num(&self) -> u32

Returns the block number.

source

pub fn chain_root(&self) -> Digest

Returns the chain root.

source

pub fn account_root(&self) -> Digest

Returns the account database root.

source

pub fn nullifier_root(&self) -> Digest

Returns the nullifier database root.

source

pub fn note_root(&self) -> Digest

Returns the note root.

source

pub fn tx_hash(&self) -> Digest

Returns the commitment to all transactions in this block.

The commitment is computed as sequential hash of (transaction_id, account_id) tuples. This makes it possible for the verifier to link transaction IDs to the accounts which they were executed against.

source

pub fn proof_hash(&self) -> Digest

Returns the proof hash.

source

pub fn timestamp(&self) -> u32

Returns the timestamp at which the block was created, in seconds since UNIX epoch.

Trait Implementations§

source§

impl Clone for BlockHeader

source§

fn clone(&self) -> BlockHeader

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 BlockHeader

source§

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

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

impl Deserializable for BlockHeader

source§

fn read_from<R: ByteReader>( source: &mut R, ) -> Result<Self, DeserializationError>

Reads a sequence of bytes from the provided source, attempts to deserialize these bytes into Self, and returns the result. Read more
source§

fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>

Attempts to deserialize the provided bytes into Self and returns the result. Read more
source§

impl PartialEq for BlockHeader

source§

fn eq(&self, other: &BlockHeader) -> 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 Serializable for BlockHeader

source§

fn write_into<W: ByteWriter>(&self, target: &mut W)

Serializes self into bytes and writes these bytes into the target.
source§

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

Serializes self into a vector of bytes.
source§

fn get_size_hint(&self) -> usize

Returns an estimate of how many bytes are needed to represent self. Read more
source§

impl Copy for BlockHeader

source§

impl Eq for BlockHeader

source§

impl StructuralPartialEq for BlockHeader

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> CloneToUninit for T
where T: Copy,

source§

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