pub struct Account { /* private fields */ }Expand description
An account which can store assets and define rules for manipulating them.
An account consists of the following components:
- Account ID, which uniquely identifies the account and also defines basic properties of the account.
- Account vault, which stores assets owned by the account.
- Account storage, which is a key-value map (both keys and values are words) used to store arbitrary user-defined data.
- Account code, which is a set of Miden VM programs defining the public interface of the account.
- Account nonce, a value which is incremented whenever account state is updated.
Out of the above components account ID is always immutable (once defined it can never be changed). Other components may be mutated throughout the lifetime of the account. However, account state can be changed only by invoking one of account interface methods.
The recommended way to build an account is through an AccountBuilder, which can be
instantiated through Account::builder. See the type’s documentation for details.
Implementations§
Source§impl Account
impl Account
Sourcepub fn new(
id: AccountId,
vault: AssetVault,
storage: AccountStorage,
code: AccountCode,
nonce: Felt,
seed: Option<Word>,
) -> Result<Self, AccountError>
pub fn new( id: AccountId, vault: AssetVault, storage: AccountStorage, code: AccountCode, nonce: Felt, seed: Option<Word>, ) -> Result<Self, AccountError>
Returns an Account instantiated with the provided components.
§Errors
Returns an error if:
- an account seed is provided but the account’s nonce indicates the account already exists.
- an account seed is not provided but the account’s nonce indicates the account is new.
- an account seed is provided but the account ID derived from it is invalid or does not match the provided account’s ID.
Sourcepub fn new_unchecked(
id: AccountId,
vault: AssetVault,
storage: AccountStorage,
code: AccountCode,
nonce: Felt,
seed: Option<Word>,
) -> Self
pub fn new_unchecked( id: AccountId, vault: AssetVault, storage: AccountStorage, code: AccountCode, nonce: Felt, seed: Option<Word>, ) -> Self
Returns an Account instantiated with the provided components.
§Warning
This does not check that the provided seed is valid with respect to the provided components.
Prefer using Account::new whenever possible.
Sourcepub fn builder(init_seed: [u8; 32]) -> AccountBuilder
pub fn builder(init_seed: [u8; 32]) -> AccountBuilder
Creates a new AccountBuilder for an account and sets the initial seed from which the
grinding process for that account’s AccountId will start.
This initial seed should come from a cryptographic random number generator.
Sourcepub fn commitment(&self) -> Word
pub fn commitment(&self) -> Word
Returns the commitment of this account.
The commitment of an account is computed as hash(id, nonce, vault_root, storage_commitment, code_commitment). Computing the account commitment requires 2 permutations of the hash function.
Sourcepub fn initial_commitment(&self) -> Word
pub fn initial_commitment(&self) -> Word
Returns the commitment of this account as used for the initial account state commitment in transaction proofs.
For existing accounts, this is exactly the same as Account::commitment(), however, for new accounts this value is set to crate::EMPTY_WORD. This is because when a transaction is executed against a new account, public input for the initial account state is set to crate::EMPTY_WORD to distinguish new accounts from existing accounts. The actual commitment of the initial account state (and the initial state itself), are provided to the VM via the advice provider.
Sourcepub fn account_type(&self) -> AccountType
pub fn account_type(&self) -> AccountType
Returns the account type
Sourcepub fn vault(&self) -> &AssetVault
pub fn vault(&self) -> &AssetVault
Returns a reference to the vault of this account.
Sourcepub fn storage(&self) -> &AccountStorage
pub fn storage(&self) -> &AccountStorage
Returns a reference to the storage of this account.
Sourcepub fn code(&self) -> &AccountCode
pub fn code(&self) -> &AccountCode
Returns a reference to the code of this account.
Sourcepub fn seed(&self) -> Option<Word>
pub fn seed(&self) -> Option<Word>
Returns the seed of the account’s ID if the account is new.
That is, if Account::is_new returns true, the seed will be Some.
Sourcepub fn is_regular_account(&self) -> bool
pub fn is_regular_account(&self) -> bool
Returns true if this is a regular account.
Sourcepub fn has_public_state(&self) -> bool
pub fn has_public_state(&self) -> bool
Returns true if the full state of the account is public on chain, i.e. if the modes are
AccountStorageMode::Public or AccountStorageMode::Network, false otherwise.
Sourcepub fn is_public(&self) -> bool
pub fn is_public(&self) -> bool
Returns true if the storage mode is AccountStorageMode::Public, false otherwise.
Sourcepub fn is_private(&self) -> bool
pub fn is_private(&self) -> bool
Returns true if the storage mode is AccountStorageMode::Private, false otherwise.
Sourcepub fn is_network(&self) -> bool
pub fn is_network(&self) -> bool
Returns true if the storage mode is AccountStorageMode::Network, false otherwise.
Sourcepub fn is_new(&self) -> bool
pub fn is_new(&self) -> bool
Returns true if the account is new, false otherwise.
An account is considered new if the account’s nonce is zero and it hasn’t been registered on chain yet.
Sourcepub fn into_parts(
self,
) -> (AccountId, AssetVault, AccountStorage, AccountCode, Felt, Option<Word>)
pub fn into_parts( self, ) -> (AccountId, AssetVault, AccountStorage, AccountCode, Felt, Option<Word>)
Decomposes the account into the underlying account components.
Sourcepub fn apply_delta(&mut self, delta: &AccountDelta) -> Result<(), AccountError>
pub fn apply_delta(&mut self, delta: &AccountDelta) -> Result<(), AccountError>
Applies the provided delta to this account. This updates account vault, storage, and nonce to the values specified by the delta.
§Errors
Returns an error if:
AccountDelta::is_full_statereturnstrue, i.e. represents the state of an entire account. Only partial state deltas can be applied to an account.- Applying vault sub-delta to the vault of this account fails.
- Applying storage sub-delta to the storage of this account fails.
- The nonce specified in the provided delta smaller than or equal to the current account nonce.
Sourcepub fn increment_nonce(&mut self, nonce_delta: Felt) -> Result<(), AccountError>
pub fn increment_nonce(&mut self, nonce_delta: Felt) -> Result<(), AccountError>
Trait Implementations§
Source§impl Deserializable for Account
impl Deserializable for Account
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<&Account> for AccountHeader
impl From<&Account> for AccountHeader
Source§impl From<&Account> for PartialAccount
impl From<&Account> for PartialAccount
Source§fn from(account: &Account) -> Self
fn from(account: &Account) -> Self
Constructs a PartialAccount from the provided account.
The behavior is different whether the Account::is_new or not:
- For new accounts, the storage is tracked in full. This is because transactions that create accounts need the full state.
- For existing accounts, the storage is tracked minimally, i.e. the minimal necessary data is included.
Because new accounts always have empty vaults, in both cases, the asset vault is a minimal representation.
For precise control over how an account is converted to a partial account, use
PartialAccount::new.
Source§impl From<Account> for AccountHeader
impl From<Account> for AccountHeader
Source§impl Serializable for Account
impl Serializable for Account
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
Source§impl TryFrom<&AccountDelta> for Account
impl TryFrom<&AccountDelta> for Account
Source§fn try_from(delta: &AccountDelta) -> Result<Self, Self::Error>
fn try_from(delta: &AccountDelta) -> Result<Self, Self::Error>
Converts an AccountDelta into an Account.
Conceptually, this applies the delta onto an empty account.
§Errors
Returns an error if:
- If the delta is not a full state delta. See
AccountDeltafor details. - If any vault delta operation removes an asset.
- If any vault delta operation adds an asset that would overflow the maximum representable amount.
- If any storage delta update violates account storage constraints.
Source§type Error = AccountError
type Error = AccountError
Source§impl TryFrom<Account> for AccountDelta
impl TryFrom<Account> for AccountDelta
Source§fn try_from(account: Account) -> Result<Self, Self::Error>
fn try_from(account: Account) -> Result<Self, Self::Error>
Converts an Account into an AccountDelta.
§Errors
Returns an error if:
- the account has a seed. Accounts with seeds have a nonce of 0. Representing such accounts as deltas is not possible because deltas with a non-empty state change need a nonce_delta greater than 0.
Source§type Error = AccountError
type Error = AccountError
impl Eq for Account
impl StructuralPartialEq for Account
Auto Trait Implementations§
impl Freeze for Account
impl RefUnwindSafe for Account
impl Send for Account
impl Sync for Account
impl Unpin for Account
impl UnwindSafe for Account
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