pub enum Asset {
Fungible(FungibleAsset),
NonFungible(NonFungibleAsset),
}Expand description
A fungible or a non-fungible asset.
All assets are encoded as the vault key of the asset and its value, each represented as one word (4 elements). This makes it is easy to determine the type of an asset both inside and outside Miden VM. Specifically:
The vault key of an asset contains the AssetComposition which describes how assets compose,
meaning whether they can be merged or split.
This property guarantees that there can never be a collision between a fungible and a non-fungible asset.
The methodology for constructing fungible and non-fungible assets is described below.
§Fungible assets
- A fungible asset’s value layout is:
[amount, 0, 0, 0]. - A fungible asset’s vault key layout is:
[0, 0, faucet_id_suffix_and_metadata, faucet_id_prefix].
Where:
amountis theAssetAmountthat the asset holds and cannot be greater thanAssetAmount::MAXand thus fits into a felt.- the remaining elements in the value word must be zero.
faucet_id_prefixis the prefix of the faucet ID which issues the asset.faucet_id_suffix_and_metadatais the suffix of the faucet ID which issues the asset and the asset metadata (AssetCallbackFlagandAssetComposition). SeeAssetVaultKeyfor more details on the key’s layout.- the asset ID limbs must be zero, which means two instances of the same fungible asset have the same asset key and will be merged together when stored in the same account’s vault.
It is impossible to find a collision between two fungible assets issued by different faucets as the faucet ID is part of the asset’s vault key and this is guaranteed to be different for each faucet as per the faucet creation logic.
§Non-fungible assets
- A non-fungible asset’s data layout is:
[hash0, hash1, hash2, hash3]. - A non-fungible asset’s vault key layout is:
[hash0, hash1, faucet_id_suffix_and_metadata, faucet_id_prefix].
Where:
- the 4 elements of non-fungible asset values are computed by hashing the asset data. This compresses an asset of an arbitrary length to 4 field elements.
faucet_id_prefixis the prefix of the faucet ID which issues the asset.faucet_id_suffix_and_metadatais the suffix of the faucet ID which issues the asset and the asset metadata (AssetCallbackFlagandAssetComposition). SeeAssetVaultKeyfor more details on the key’s layout.- The asset ID limbs are set to hashes from the asset’s value (
hash0andhash1).
It is impossible to find a collision between two non-fungible assets issued by different faucets as the faucet ID is part of the asset’s vault key and this is guaranteed to be different as per the faucet creation logic.
The collision resistance of non-fungible assets issued by the same faucet is ~2^64, due to the 128-bit asset ID that is unique per non-fungible asset. In other words, two non-fungible assets issued by the same faucet are very unlikely to have the same asset key and thus should not collide when stored in the same account’s vault.
Variants§
Fungible(FungibleAsset)
NonFungible(NonFungibleAsset)
Implementations§
Source§impl Asset
impl Asset
Sourcepub fn from_key_value(
key: AssetVaultKey,
value: Word,
) -> Result<Self, AssetError>
pub fn from_key_value( key: AssetVaultKey, value: Word, ) -> Result<Self, AssetError>
Sourcepub fn from_key_value_words(key: Word, value: Word) -> Result<Self, AssetError>
pub fn from_key_value_words(key: Word, value: Word) -> Result<Self, AssetError>
Creates an asset from the provided key and value.
Prefer Self::from_key_value for more type safety.
§Errors
Returns an error if:
- The provided key does not contain a valid faucet ID.
Self::from_key_valuefails.
Sourcepub fn with_callbacks(self, callbacks: AssetCallbackFlag) -> Self
pub fn with_callbacks(self, callbacks: AssetCallbackFlag) -> Self
Returns a copy of this asset with the given AssetCallbackFlag.
Sourcepub fn is_same(&self, other: &Self) -> bool
pub fn is_same(&self, other: &Self) -> bool
Returns true if this asset is the same as the specified asset.
Two assets are defined to be the same if their vault keys match.
Sourcepub fn is_fungible(&self) -> bool
pub fn is_fungible(&self) -> bool
Returns true if this asset is a fungible asset.
Sourcepub fn is_non_fungible(&self) -> bool
pub fn is_non_fungible(&self) -> bool
Returns true if this asset is a non fungible asset.
Sourcepub fn vault_key(&self) -> AssetVaultKey
pub fn vault_key(&self) -> AssetVaultKey
Returns the key which is used to store this asset in the account vault.
Sourcepub fn to_key_word(&self) -> Word
pub fn to_key_word(&self) -> Word
Returns the asset’s key encoded to a Word.
Sourcepub fn to_value_word(&self) -> Word
pub fn to_value_word(&self) -> Word
Returns the asset’s value encoded to a Word.
Sourcepub fn as_elements(&self) -> [Felt; 8]
pub fn as_elements(&self) -> [Felt; 8]
Returns the asset encoded as elements.
The first four elements contain the asset key and the last four elements contain the asset value.
Sourcepub fn unwrap_fungible(&self) -> FungibleAsset
pub fn unwrap_fungible(&self) -> FungibleAsset
Sourcepub fn unwrap_non_fungible(&self) -> NonFungibleAsset
pub fn unwrap_non_fungible(&self) -> NonFungibleAsset
Trait Implementations§
Source§impl Deserializable for Asset
impl Deserializable for Asset
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 min_serialized_size() -> usize
fn min_serialized_size() -> usize
Source§fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
fn read_from_bytes(bytes: &[u8]) -> Result<Self, DeserializationError>
Source§fn read_from_bytes_with_budget(
bytes: &[u8],
budget: usize,
) -> Result<Self, DeserializationError>
fn read_from_bytes_with_budget( bytes: &[u8], budget: usize, ) -> Result<Self, DeserializationError>
Self from bytes with a byte budget limit. Read moreSource§impl From<Asset> for AssetVaultKey
impl From<Asset> for AssetVaultKey
Source§impl From<FungibleAsset> for Asset
impl From<FungibleAsset> for Asset
Source§fn from(asset: FungibleAsset) -> Self
fn from(asset: FungibleAsset) -> Self
Source§impl From<NonFungibleAsset> for Asset
impl From<NonFungibleAsset> for Asset
Source§fn from(asset: NonFungibleAsset) -> Self
fn from(asset: NonFungibleAsset) -> Self
Source§impl Serializable for Asset
impl Serializable for Asset
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 Copy for Asset
impl Eq for Asset
impl StructuralPartialEq for Asset
Auto Trait Implementations§
impl Freeze for Asset
impl RefUnwindSafe for Asset
impl Send for Asset
impl Sync for Asset
impl Unpin for Asset
impl UnsafeUnpin for Asset
impl UnwindSafe for Asset
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<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