pub struct StorageMap { /* private fields */ }Expand description
An account storage map is a sparse merkle tree of depth Self::DEPTH.
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 active_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 EMPTY_VALUE: Word = Smt::EMPTY_VALUE
pub const EMPTY_VALUE: Word = Smt::EMPTY_VALUE
The default value of empty leaves.
Sourcepub fn new() -> Self
pub fn new() -> Self
Returns a new StorageMap.
All leaves in the returned tree are set to Self::EMPTY_VALUE.
Sourcepub fn with_entries<I: ExactSizeIterator<Item = (Word, Word)>>(
entries: impl IntoIterator<Item = (Word, Word), IntoIter = I>,
) -> Result<Self, StorageMapError>
pub fn with_entries<I: ExactSizeIterator<Item = (Word, Word)>>( entries: impl IntoIterator<Item = (Word, Word), IntoIter = I>, ) -> Result<Self, 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 num_leaves(&self) -> usize
pub fn num_leaves(&self) -> usize
Returns the number of non-empty leaves in this storage map.
Note that this may return a different value from Self::num_entries() as a single leaf may contain more than one key-value pair.
Sourcepub fn num_entries(&self) -> usize
pub fn num_entries(&self) -> usize
Returns the number of key-value pairs with non-default values in this storage map.
Note that this may return a different value from Self::num_leaves() as a single leaf may contain more than one key-value pair.
Sourcepub fn get(&self, raw_key: &Word) -> Word
pub fn get(&self, raw_key: &Word) -> Word
Returns the value corresponding to the key or Self::EMPTY_VALUE if the key is not
associated with a value.
Sourcepub fn open(&self, raw_key: &Word) -> StorageMapWitness
pub fn open(&self, raw_key: &Word) -> StorageMapWitness
Returns an opening of the leaf associated with raw 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<SMT_DEPTH>, &SmtLeaf)>
pub fn leaves(&self) -> impl Iterator<Item = (LeafIndex<SMT_DEPTH>, &SmtLeaf)>
Returns an iterator over the leaves of the underlying Smt.
Sourcepub fn entries(&self) -> impl Iterator<Item = (&Word, &Word)>
pub fn entries(&self) -> impl Iterator<Item = (&Word, &Word)>
Returns an iterator over the key-value pairs in this storage map.
Note that the returned key is the raw map key.
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,
raw_key: Word,
value: Word,
) -> Result<Word, AccountError>
pub fn insert( &mut self, raw_key: Word, value: Word, ) -> Result<Word, AccountError>
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,
) -> Result<Word, AccountError>
pub fn apply_delta( &mut self, delta: &StorageMapDelta, ) -> Result<Word, AccountError>
Applies the provided delta to this account storage.
Sourcepub fn into_entries(self) -> BTreeMap<Word, Word>
pub fn into_entries(self) -> BTreeMap<Word, Word>
Consumes the map and returns the underlying map of entries.
Sourcepub fn hashed_map_key_to_leaf_index(hashed_map_key: Word) -> Felt
pub fn hashed_map_key_to_leaf_index(hashed_map_key: Word) -> Felt
Returns the leaf index of a map key.
Trait Implementations§
Source§impl Clone for StorageMap
impl Clone for StorageMap
Source§fn clone(&self) -> StorageMap
fn clone(&self) -> StorageMap
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
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§impl Deserializable for StorageMap
impl Deserializable for StorageMap
Source§fn read_from<R: ByteReader>(
source: &mut R,
) -> Result<Self, DeserializationError>
fn read_from<R: ByteReader>( source: &mut R, ) -> Result<Self, DeserializationError>
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 From<StorageMap> for StorageMapDelta
Converts a StorageMap into a StorageMapDelta for initial delta construction.
impl From<StorageMap> for StorageMapDelta
Converts a StorageMap into a StorageMapDelta for initial delta construction.
Source§fn from(map: StorageMap) -> Self
fn from(map: StorageMap) -> Self
Source§impl PartialEq for StorageMap
impl PartialEq for StorageMap
Source§impl Serializable for StorageMap
impl Serializable for StorageMap
Source§fn write_into<W: ByteWriter>(&self, target: &mut W)
fn write_into<W: ByteWriter>(&self, target: &mut W)
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<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<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