pub struct StorageMap { /* private fields */ }Expand description
An account storage map is a sparse merkle tree of depth Self::TREE_DEPTH (64).
It can be used to store a large amount of data in an account than would be otherwise possible
using just the account’s storage slots. This works by storing the root of the map’s underlying
SMT in one account storage slot. Each map entry is a leaf in the tree and its inclusion is
proven while retrieving it (e.g. via account::get_map_item).
As a side-effect, this also means that not all entries of the map have to be present at transaction execution time in order to access or modify the map. It is sufficient if just the accessed/modified items are present in the advice provider.
Because the keys of the map are user-chosen and thus not necessarily uniformly distributed, the tree could be imbalanced and made less efficient. To mitigate that, the keys used in the storage map are hashed before they are inserted into the SMT, which creates a uniform distribution. The original keys are retained in a separate map. This causes redundancy but allows for introspection of the map, e.g. by querying the set of stored (original) keys which is useful in debugging and explorer scenarios.
Implementations§
Source§impl StorageMap
impl StorageMap
Sourcepub const TREE_DEPTH: u8 = 64u8
pub const TREE_DEPTH: u8 = 64u8
Depth of the storage tree.
Sourcepub const EMPTY_VALUE: [BaseElement; 4] = Smt::EMPTY_VALUE
pub const EMPTY_VALUE: [BaseElement; 4] = Smt::EMPTY_VALUE
The default value of empty leaves.
Sourcepub fn new() -> StorageMap
pub fn new() -> StorageMap
Returns a new StorageMap.
All leaves in the returned tree are set to Self::EMPTY_VALUE.
Sourcepub fn with_entries<I>(
entries: impl IntoIterator<Item = (RpoDigest, [BaseElement; 4]), IntoIter = I>,
) -> Result<StorageMap, StorageMapError>
pub fn with_entries<I>( entries: impl IntoIterator<Item = (RpoDigest, [BaseElement; 4]), IntoIter = I>, ) -> Result<StorageMap, StorageMapError>
Creates a new StorageMap from the provided key-value entries.
§Errors
Returns an error if:
- the provided entries contain multiple values for the same key.
Sourcepub fn get(&self, key: &RpoDigest) -> [BaseElement; 4]
pub fn get(&self, key: &RpoDigest) -> [BaseElement; 4]
Returns the value corresponding to the key or Self::EMPTY_VALUE if the key is not
associated with a value.
Sourcepub fn open(&self, key: &RpoDigest) -> SmtProof
pub fn open(&self, key: &RpoDigest) -> SmtProof
Returns an opening of the leaf associated with key.
Conceptually, an opening is a Merkle path to the leaf, as well as the leaf itself.
Sourcepub fn leaves(
&self,
) -> impl Iterator<Item = (LeafIndex<miden_objects::::account::storage::map::{impl#0}::leaves::{constant#0}>, &SmtLeaf)>
pub fn leaves( &self, ) -> impl Iterator<Item = (LeafIndex<miden_objects::::account::storage::map::{impl#0}::leaves::{constant#0}>, &SmtLeaf)>
Returns an iterator over the leaves of the underlying Smt.
Sourcepub fn entries(&self) -> impl Iterator<Item = (&RpoDigest, &[BaseElement; 4])>
pub fn entries(&self) -> impl Iterator<Item = (&RpoDigest, &[BaseElement; 4])>
Returns an iterator over the key value pairs of the map.
Sourcepub fn inner_nodes(&self) -> impl Iterator<Item = InnerNodeInfo>
pub fn inner_nodes(&self) -> impl Iterator<Item = InnerNodeInfo>
Returns an iterator over the inner nodes of the underlying Smt.
Sourcepub fn insert(
&mut self,
key: RpoDigest,
value: [BaseElement; 4],
) -> [BaseElement; 4]
pub fn insert( &mut self, key: RpoDigest, value: [BaseElement; 4], ) -> [BaseElement; 4]
Inserts or updates the given key value pair and returns the previous value, or
Self::EMPTY_VALUE if no entry was previously present.
If the provided value is Self::EMPTY_VALUE the entry will be removed.
Sourcepub fn apply_delta(&mut self, delta: &StorageMapDelta) -> RpoDigest
pub fn apply_delta(&mut self, delta: &StorageMapDelta) -> RpoDigest
Applies the provided delta to this account storage.
Sourcepub fn into_entries(self) -> BTreeMap<RpoDigest, [BaseElement; 4]>
pub fn into_entries(self) -> BTreeMap<RpoDigest, [BaseElement; 4]>
Consumes the map and returns the underlying map of entries.
Trait Implementations§
Source§impl Clone for StorageMap
impl Clone for StorageMap
Source§fn clone(&self) -> StorageMap
fn clone(&self) -> StorageMap
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for StorageMap
impl Debug for StorageMap
Source§impl Default for StorageMap
impl Default for StorageMap
Source§fn default() -> StorageMap
fn default() -> StorageMap
Source§impl Deserializable for StorageMap
impl Deserializable for StorageMap
Source§fn read_from<R>(source: &mut R) -> Result<StorageMap, DeserializationError>where
R: ByteReader,
fn read_from<R>(source: &mut R) -> Result<StorageMap, DeserializationError>where
R: ByteReader,
source, attempts to deserialize these bytes
into Self, and returns the result. Read moreSource§fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
Source§impl PartialEq for StorageMap
impl PartialEq for StorageMap
Source§impl Serializable for StorageMap
impl Serializable for StorageMap
Source§fn write_into<W>(&self, target: &mut W)where
W: ByteWriter,
fn write_into<W>(&self, target: &mut W)where
W: ByteWriter,
self into bytes and writes these bytes into the target.Source§fn get_size_hint(&self) -> usize
fn get_size_hint(&self) -> usize
impl Eq for StorageMap
impl StructuralPartialEq for StorageMap
Auto Trait Implementations§
impl Freeze for StorageMap
impl RefUnwindSafe for StorageMap
impl Send for StorageMap
impl Sync for StorageMap
impl Unpin for StorageMap
impl UnwindSafe for StorageMap
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more