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: BTreeMap<u8, 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, crate::EMPTY_WORD is returned.

source

pub fn get_map_item(&self, index: u8, key: Word) -> Result<Word, AccountError>

Returns a map item from the storage at the specified index.

If the item is not present in the storage, crate::EMPTY_WORD 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) -> &BTreeMap<u8, StorageMap>

Returns the storage maps for this storage.

source

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

Updates the value of the storage slot at the specified index.

This method should be used only to update simple value slots. For updating values in storage maps, please see AccountStorage::set_map_item().

§Errors

Returns an error if:

  • The index specifies a reserved storage slot.
  • The update tries to set a slot of type array.
  • The update has a value arity different from 0.
source

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

Updates the value of a key-value pair of a storage map at the specified index.

This method should be used only to update storage maps. For updating values in storage slots, please see AccountStorage::set_item().

§Errors

Returns an error if:

  • The index specifies a reserved storage slot.
  • The index is not a map slot.
  • The update tries to set a slot of type value or array.
  • The update has a value arity different from 0.

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