Struct miden_objects::accounts::AccountStorage

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

Account storage consists of 256 index-addressable storage slots.

Each slot has a type which defines the size and the structure of the slot. Currently, the following types are supported:

  • Scalar: a sequence of up to 256 words.
  • Array: a sparse array of up to 2^n values where n > 1 and n <= 64 and each value contains up to 256 words.
  • Map: a key-value map where keys are words and values contain up to 256 words.

Storage slots are stored in a simple Sparse Merkle Tree of depth 8. Slot 255 is always reserved and contains information about slot types of all other slots.

Optionally, a user can make use of storage maps. Storage maps are represented by a SMT and they can hold more data as there is in plain usage of the storage slots. The root of the SMT consumes one storage slot.

Implementations§

source§

impl AccountStorage

source

pub const STORAGE_TREE_DEPTH: u8 = 8u8

Depth of the storage tree.

source

pub const NUM_STORAGE_SLOTS: usize = 256usize

Total number of storage slots.

source

pub const SLOT_LAYOUT_COMMITMENT_INDEX: u8 = 255u8

The storage slot at which the layout commitment is stored.

source

pub fn new( items: Vec<SlotItem>, maps: Vec<StorageMap> ) -> Result<AccountStorage, AccountError>

Returns a new instance of account storage initialized with the provided items.

source

pub fn root(&self) -> Digest

Returns a commitment to this storage.

source

pub fn get_item(&self, index: u8) -> Digest

Returns an item from the storage at the specified index.

If the item is not present in the storage, [ZERO; 4] is returned.

source

pub fn slots(&self) -> &SimpleSmt<STORAGE_TREE_DEPTH>

Returns a reference to the Sparse Merkle Tree that backs the storage slots.

source

pub fn layout(&self) -> &[StorageSlotType]

Returns layout info for this storage.

source

pub fn layout_commitment(&self) -> Digest

Returns a commitment to the storage layout.

source

pub fn maps(&self) -> &[StorageMap]

Returns the storage maps for this storage.

source

pub fn set_item(&mut self, index: u8, value: Word) -> Result<Word, AccountError>

Sets an item from the storage at the specified index.

§Errors

Returns an error if:

  • The index specifies a reserved storage slot.
  • The update violates storage layout constraints.

Trait Implementations§

source§

impl Clone for AccountStorage

source§

fn clone(&self) -> AccountStorage

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 AccountStorage

source§

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

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

impl Deserializable for AccountStorage

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 AccountStorage

source§

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

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 Eq for AccountStorage

source§

impl StructuralPartialEq for AccountStorage

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