pub struct AccountTree<S = Smt> { /* private fields */ }Expand description
The sparse merkle tree of all accounts in the blockchain.
The key is the AccountId while the value is the current state commitment of the account,
i.e. Account::commitment. If the account is new, then
the commitment is the EMPTY_WORD.
Each account ID occupies exactly one leaf in the tree, which is identified by its
AccountId::prefix. In other words, account ID prefixes are unique in the blockchain.
Implementations§
Source§impl<S> AccountTree<S>where
S: AccountTreeBackend<Error = MerkleError>,
impl<S> AccountTree<S>where
S: AccountTreeBackend<Error = MerkleError>,
Sourcepub fn new(smt: S) -> Result<Self, AccountTreeError>
pub fn new(smt: S) -> Result<Self, AccountTreeError>
Creates a new AccountTree from its inner representation with validation.
This constructor validates that the provided SMT upholds the guarantees of the
AccountTree. The constructor ensures only the uniqueness of the account ID prefix.
§Errors
Returns an error if:
- The SMT contains duplicate account ID prefixes
Sourcepub fn new_unchecked(smt: S) -> Self
pub fn new_unchecked(smt: S) -> Self
Creates a new AccountTree from its inner representation without validation.
§Warning
Assumes the provided SMT upholds the guarantees of the AccountTree. Specifically:
- Each account ID prefix must be unique (no duplicate prefixes allowed)
- The SMT should only contain valid account IDs and their state commitments
See type-level documentation for more details on these invariants. Using this constructor with an SMT that violates these guarantees may lead to undefined behavior.
Sourcepub fn open(&self, account_id: AccountId) -> AccountWitness
pub fn open(&self, account_id: AccountId) -> AccountWitness
Returns an opening of the leaf associated with the account_id. This is a proof of the
current state commitment of the given account ID.
Conceptually, an opening is a Merkle path to the leaf, as well as the leaf itself.
§Panics
Panics if the SMT backend fails to open the leaf (only possible with LargeSmt backend).
Sourcepub fn get(&self, account_id: AccountId) -> Word
pub fn get(&self, account_id: AccountId) -> Word
Returns the current state commitment of the given account ID.
Sourcepub fn contains_account_id_prefix(
&self,
account_id_prefix: AccountIdPrefix,
) -> bool
pub fn contains_account_id_prefix( &self, account_id_prefix: AccountIdPrefix, ) -> bool
Returns true if the tree contains a leaf for the given account ID prefix.
Sourcepub fn num_accounts(&self) -> usize
pub fn num_accounts(&self) -> usize
Returns the number of account IDs in this tree.
Sourcepub fn account_commitments(&self) -> impl Iterator<Item = (AccountId, Word)>
pub fn account_commitments(&self) -> impl Iterator<Item = (AccountId, Word)>
Returns an iterator over the account ID state commitment pairs in the tree.
Sourcepub fn compute_mutations(
&self,
account_commitments: impl IntoIterator<Item = (AccountId, Word)>,
) -> Result<AccountMutationSet, AccountTreeError>
pub fn compute_mutations( &self, account_commitments: impl IntoIterator<Item = (AccountId, Word)>, ) -> Result<AccountMutationSet, AccountTreeError>
Computes the necessary changes to insert the specified (account ID, state commitment) pairs into this tree, allowing for validation before applying those changes.
Self::apply_mutations can be used in order to commit these changes to the tree.
If the concurrent feature of miden-crypto is enabled, this function uses a parallel
implementation to compute the mutations, otherwise it defaults to the sequential
implementation.
This is a thin wrapper around Smt::compute_mutations. See its documentation for more
details.
§Errors
Returns an error if:
- an insertion of an account ID would violate the uniqueness of account ID prefixes in the tree.
Sourcepub fn insert(
&mut self,
account_id: AccountId,
state_commitment: Word,
) -> Result<Word, AccountTreeError>
pub fn insert( &mut self, account_id: AccountId, state_commitment: Word, ) -> Result<Word, AccountTreeError>
Inserts the state commitment for the given account ID, returning the previous state commitment associated with that ID.
This also recomputes all hashes between the leaf (associated with the key) and the root, updating the root itself.
§Errors
Returns an error if:
- the prefix of the account ID already exists in the tree.
Sourcepub fn apply_mutations(
&mut self,
mutations: AccountMutationSet,
) -> Result<(), AccountTreeError>
pub fn apply_mutations( &mut self, mutations: AccountMutationSet, ) -> Result<(), AccountTreeError>
Applies the prospective mutations computed with Self::compute_mutations to this tree.
§Errors
Returns an error if:
mutationswas computed on a tree with a different root than this one.
Sourcepub fn apply_mutations_with_reversion(
&mut self,
mutations: AccountMutationSet,
) -> Result<AccountMutationSet, AccountTreeError>
pub fn apply_mutations_with_reversion( &mut self, mutations: AccountMutationSet, ) -> Result<AccountMutationSet, AccountTreeError>
Applies the prospective mutations computed with Self::compute_mutations to this tree
and returns the reverse mutation set.
Applying the reverse mutation sets to the updated tree will revert the changes.
§Errors
Returns an error if:
mutationswas computed on a tree with a different root than this one.
Source§impl AccountTree<Smt>
impl AccountTree<Smt>
Sourcepub fn with_entries<I>(
entries: impl IntoIterator<Item = (AccountId, Word), IntoIter = I>,
) -> Result<Self, AccountTreeError>
pub fn with_entries<I>( entries: impl IntoIterator<Item = (AccountId, Word), IntoIter = I>, ) -> Result<Self, AccountTreeError>
Creates a new AccountTree with the provided entries.
This is a convenience method for testing that creates an SMT backend with the provided entries and wraps it in an AccountTree. It validates that the entries don’t contain duplicate prefixes.
§Errors
Returns an error if:
- The provided entries contain duplicate account ID prefixes
- The backend fails to create the SMT with the entries
Trait Implementations§
Source§impl<S: Clone> Clone for AccountTree<S>
impl<S: Clone> Clone for AccountTree<S>
Source§fn clone(&self) -> AccountTree<S>
fn clone(&self) -> AccountTree<S>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<S: Debug> Debug for AccountTree<S>
impl<S: Debug> Debug for AccountTree<S>
Source§impl<S> Default for AccountTree<S>where
S: Default,
impl<S> Default for AccountTree<S>where
S: Default,
Source§impl Deserializable for AccountTree
impl Deserializable for AccountTree
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<S: PartialEq> PartialEq for AccountTree<S>
impl<S: PartialEq> PartialEq for AccountTree<S>
Source§impl Serializable for AccountTree
impl Serializable for AccountTree
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<S: Eq> Eq for AccountTree<S>
impl<S> StructuralPartialEq for AccountTree<S>
Auto Trait Implementations§
impl<S> Freeze for AccountTree<S>where
S: Freeze,
impl<S> RefUnwindSafe for AccountTree<S>where
S: RefUnwindSafe,
impl<S> Send for AccountTree<S>where
S: Send,
impl<S> Sync for AccountTree<S>where
S: Sync,
impl<S> Unpin for AccountTree<S>where
S: Unpin,
impl<S> UnwindSafe for AccountTree<S>where
S: UnwindSafe,
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