Struct miden_objects::accounts::code::AccountCode
source · pub struct AccountCode { /* private fields */ }
Expand description
A public interface of an account.
Account’s public interface consists of a set of account procedures, each procedure being a Miden VM program. Thus, MAST root of each procedure commits to the underlying program.
Each exported procedure is associated with a storage offset. This offset is applied to any accesses made from within the procedure to the associated account’s storage. For example, if storage offset for a procedure is set ot 1, a call to the account::get_item(storage_slot=4) made from this procedure would actually access storage slot with index 5.
We commit to the entire account interface by building a sequential hash of all procedure MAST roots and associated storage_offset’s. Specifically, each procedure contributes exactly 8 field elements to the sequence of elements to be hashed. These elements are defined as follows:
[PROCEDURE_MAST_ROOT, storage_offset, 0, 0, 0]
Implementations§
source§impl AccountCode
impl AccountCode
sourcepub const MAX_NUM_PROCEDURES: usize = 256usize
pub const MAX_NUM_PROCEDURES: usize = 256usize
The maximum number of account interface procedures.
sourcepub fn new(library: Library) -> Result<Self, AccountError>
pub fn new(library: Library) -> Result<Self, AccountError>
Returns a new AccountCode instantiated from the provided Library.
All procedures exported from the provided library will become members of the account’s public interface.
§Errors
Returns an error if the number of procedures exported from the provided library is smaller than 1 or greater than 256.
sourcepub fn compile(
source_code: impl Compile,
assembler: Assembler,
) -> Result<Self, AccountError>
pub fn compile( source_code: impl Compile, assembler: Assembler, ) -> Result<Self, AccountError>
Returns a new AccountCode compiled from the provided source code using the specified assembler.
All procedures exported from the provided code will become members of the account’s public interface.
§Errors
Returns an error if:
- Compilation of the provided source code fails.
- The number of procedures exported from the provided library is smaller than 1 or greater than 256.
sourcepub fn from_bytes(bytes: &[u8]) -> Result<Self, AccountError>
pub fn from_bytes(bytes: &[u8]) -> Result<Self, AccountError>
Returns a new AccountCode deserialized from the provided bytes.
§Errors
Returns an error if account code deserialization fails.
sourcepub fn from_parts(
mast: Arc<MastForest>,
procedures: Vec<AccountProcedureInfo>,
) -> Self
pub fn from_parts( mast: Arc<MastForest>, procedures: Vec<AccountProcedureInfo>, ) -> Self
Returns a new definition of an account’s interface instantiated from the provided MastForest and a list of AccountProcedureInfos.
§Panics
Panics if:
- The number of procedures is smaller than 1 or greater than 256.
- If some any of the provided procedures does not have a corresponding root in the provided MAST forest.
sourcepub fn commitment(&self) -> Digest
pub fn commitment(&self) -> Digest
Returns a commitment to an account’s public interface.
sourcepub fn mast(&self) -> Arc<MastForest>
pub fn mast(&self) -> Arc<MastForest>
Returns a reference to the MastForest backing this account code.
sourcepub fn procedures(&self) -> &[AccountProcedureInfo]
pub fn procedures(&self) -> &[AccountProcedureInfo]
Returns a reference to the account procedures.
sourcepub fn procedure_roots(&self) -> impl Iterator<Item = Digest> + '_
pub fn procedure_roots(&self) -> impl Iterator<Item = Digest> + '_
Returns an iterator over the procedure MAST roots of this account code.
sourcepub fn num_procedures(&self) -> usize
pub fn num_procedures(&self) -> usize
Returns the number of public interface procedures defined in this account code.
sourcepub fn has_procedure(&self, mast_root: Digest) -> bool
pub fn has_procedure(&self, mast_root: Digest) -> bool
Returns true if a procedure with the specified MAST root is defined in this account code.
sourcepub fn get_procedure_by_index(&self, index: usize) -> &AccountProcedureInfo
pub fn get_procedure_by_index(&self, index: usize) -> &AccountProcedureInfo
Returns information about the procedure at the specified index.
§Panics
Panics if the provided index is out of bounds.
sourcepub fn get_procedure_index_by_root(&self, root: Digest) -> Option<usize>
pub fn get_procedure_index_by_root(&self, root: Digest) -> Option<usize>
Returns the procedure index for the procedure with the specified MAST root or None if such procedure is not defined in this AccountCode.
sourcepub fn as_elements(&self) -> Vec<Felt>
pub fn as_elements(&self) -> Vec<Felt>
Converts procedure information in this AccountCode into a vector of field elements.
This is done by first converting each procedure into exactly 8 elements as follows:
[PROCEDURE_MAST_ROOT, storage_offset, 0, 0, 0]
And then concatenating the resulting elements into a single vector.
Trait Implementations§
source§impl Clone for AccountCode
impl Clone for AccountCode
source§fn clone(&self) -> AccountCode
fn clone(&self) -> AccountCode
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for AccountCode
impl Debug for AccountCode
source§impl Deserializable for AccountCode
impl Deserializable for AccountCode
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 PartialEq for AccountCode
impl PartialEq for AccountCode
source§impl Serializable for AccountCode
impl Serializable for AccountCode
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 AccountCode
Auto Trait Implementations§
impl Freeze for AccountCode
impl RefUnwindSafe for AccountCode
impl Send for AccountCode
impl Sync for AccountCode
impl Unpin for AccountCode
impl UnwindSafe for AccountCode
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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<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