pub struct TokenId<M: ManagedTypeApi> { /* private fields */ }Expand description
Specialized type for handling token identifiers (e.g. ABCDEF-123456).
Implementations§
Source§impl<M: ManagedTypeApi> TokenId<M>
impl<M: ManagedTypeApi> TokenId<M>
Sourcepub fn new(data: ManagedBuffer<M>) -> Self
pub fn new(data: ManagedBuffer<M>) -> Self
Creates a new TokenId from a ManagedBuffer.
Automatically handles backwards compatibility by converting:
- Empty buffers to the native token (EGLD-000000)
- Legacy “EGLD” representation to the native token (EGLD-000000)
- All other values are stored as-is
Sourcepub fn new_backwards_compatible(data: ManagedBuffer<M>) -> Self
pub fn new_backwards_compatible(data: ManagedBuffer<M>) -> Self
Creates a new TokenId with backwards compatibility for legacy EGLD representations.
This method handles the conversion of legacy EGLD representations to the current standard:
- Empty buffers are converted to the native token (EGLD-000000)
- The legacy “EGLD” representation is converted to “EGLD-000000”
- All other token identifiers are stored without modification
This ensures consistency across the codebase when dealing with the native token.
Sourcepub unsafe fn new_unchecked(data: ManagedBuffer<M>) -> Self
pub unsafe fn new_unchecked(data: ManagedBuffer<M>) -> Self
Creates a TokenId without any conversion or validation.
§Safety
It does not convert the legacy EGLD representation (“EGLD” -> “EGLD-000000”). Only use if you are certain you are not in this scenario.
Sourcepub fn native() -> Self
pub fn native() -> Self
Creates a TokenId representing the native token on the chain.
Returns a TokenId with the value “EGLD-000000”, which is the current standard representation for the native EGLD token.
Future developments might make this configurable for custom chains.
pub fn into_managed_buffer(self) -> ManagedBuffer<M>
pub fn as_managed_buffer(&self) -> &ManagedBuffer<M>
pub fn into_legacy(self) -> EgldOrEsdtTokenIdentifier<M>
pub fn as_legacy(&self) -> &EgldOrEsdtTokenIdentifier<M>
Sourcepub unsafe fn as_esdt_unchecked(&self) -> &EsdtTokenIdentifier<M>
pub unsafe fn as_esdt_unchecked(&self) -> &EsdtTokenIdentifier<M>
Converts to a specialized ESDT token identifier.
§Safety
Leads to inconsistencies if the token is EGLD.
Sourcepub unsafe fn into_esdt_unchecked(self) -> EsdtTokenIdentifier<M>
pub unsafe fn into_esdt_unchecked(self) -> EsdtTokenIdentifier<M>
Converts to a specialized ESDT token identifier.
§Safety
Leads to inconsistencies if the token is EGLD.
pub fn to_boxed_bytes(&self) -> BoxedBytes
Sourcepub fn is_native(&self) -> bool
pub fn is_native(&self) -> bool
Checks if a token is the native one on the chain. Currently only returns true for EGLD-000000.
Sourcepub fn is_valid(&self) -> bool
pub fn is_valid(&self) -> bool
Checks the ESDT token identifier for validity.
Will fail if it encodes an invalid ESDT token identifier.
Sourcepub fn is_valid_esdt_identifier(&self) -> bool
pub fn is_valid_esdt_identifier(&self) -> bool
Old method name. Kept for easier transition. Use is_valid instead.
Sourcepub fn ticker(&self) -> ManagedBuffer<M>
pub fn ticker(&self) -> ManagedBuffer<M>
Extracts the ticker from the token identifier.
E.g. for “ABCDEF-123456” it will return “ABCDEF”.
Trait Implementations§
Source§impl<M: ManagedTypeApi> AsRef<TokenId<M>> for EgldOrEsdtTokenIdentifier<M>
impl<M: ManagedTypeApi> AsRef<TokenId<M>> for EgldOrEsdtTokenIdentifier<M>
Source§impl<M: ManagedTypeApi> Debug for TokenId<M>
impl<M: ManagedTypeApi> Debug for TokenId<M>
Source§impl<M: ManagedTypeApi> Display for TokenId<M>
impl<M: ManagedTypeApi> Display for TokenId<M>
Source§impl<M: ManagedTypeApi> From<EgldOrEsdtTokenIdentifier<M>> for TokenId<M>
impl<M: ManagedTypeApi> From<EgldOrEsdtTokenIdentifier<M>> for TokenId<M>
Source§fn from(token_id: EgldOrEsdtTokenIdentifier<M>) -> Self
fn from(token_id: EgldOrEsdtTokenIdentifier<M>) -> Self
Source§impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for TokenId<M>
impl<M: ManagedTypeApi> From<ManagedBuffer<M>> for TokenId<M>
Source§fn from(buffer: ManagedBuffer<M>) -> Self
fn from(buffer: ManagedBuffer<M>) -> Self
Source§impl<M: ManagedTypeApi> From<TokenId<M>> for EgldOrEsdtTokenIdentifier<M>
impl<M: ManagedTypeApi> From<TokenId<M>> for EgldOrEsdtTokenIdentifier<M>
Source§impl<M: ManagedTypeApi> From<TokenId<M>> for EsdtTokenIdentifier<M>
impl<M: ManagedTypeApi> From<TokenId<M>> for EsdtTokenIdentifier<M>
Source§impl<M: ManagedTypeApi> ManagedType<M> for TokenId<M>
impl<M: ManagedTypeApi> ManagedType<M> for TokenId<M>
type OwnHandle = <M as HandleTypeInfo>::ManagedBufferHandle
fn get_handle(&self) -> M::ManagedBufferHandle
Source§unsafe fn forget_into_handle(self) -> Self::OwnHandle
unsafe fn forget_into_handle(self) -> Self::OwnHandle
Source§fn transmute_from_handle_ref(handle_ref: &M::ManagedBufferHandle) -> &Self
fn transmute_from_handle_ref(handle_ref: &M::ManagedBufferHandle) -> &Self
fn transmute_from_handle_ref_mut( handle_ref: &mut M::ManagedBufferHandle, ) -> &mut Self
fn get_raw_handle(&self) -> RawHandle
fn get_raw_handle_unchecked(&self) -> RawHandle
fn as_ref(&self) -> ManagedRef<'_, M, Self>
Source§impl<M: ManagedTypeApi> ManagedVecItem for TokenId<M>
impl<M: ManagedTypeApi> ManagedVecItem for TokenId<M>
Source§const SKIPS_RESERIALIZATION: bool = false
const SKIPS_RESERIALIZATION: bool = false
u32).Source§type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UTerm, B1>, B0>, B0>>
type PAYLOAD = ManagedVecItemPayloadBuffer<UInt<UInt<UInt<UTerm, B1>, B0>, B0>>
Source§type Ref<'a> = ManagedRef<'a, M, TokenId<M>>
type Ref<'a> = ManagedRef<'a, M, TokenId<M>>
Source§fn read_from_payload(payload: &Self::PAYLOAD) -> Self
fn read_from_payload(payload: &Self::PAYLOAD) -> Self
Source§unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
unsafe fn borrow_from_payload<'a>(payload: &Self::PAYLOAD) -> Self::Ref<'a>
Source§fn save_to_payload(self, payload: &mut Self::PAYLOAD)
fn save_to_payload(self, payload: &mut Self::PAYLOAD)
fn payload_size() -> usize
Source§impl<M: ManagedTypeApi> NestedDecode for TokenId<M>
impl<M: ManagedTypeApi> NestedDecode for TokenId<M>
Source§fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
fn dep_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<Self, H::HandledErr>where
I: NestedDecodeInput,
H: DecodeErrorHandler,
dep_decode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
fn dep_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: NestedDecodeInput,
Source§impl<M: ManagedTypeApi> NestedEncode for TokenId<M>
impl<M: ManagedTypeApi> NestedEncode for TokenId<M>
Source§fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
fn dep_encode_or_handle_err<O, H>(
&self,
dest: &mut O,
h: H,
) -> Result<(), H::HandledErr>where
O: NestedEncodeOutput,
H: EncodeErrorHandler,
dep_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
fn dep_encode<O>(&self, dest: &mut O) -> Result<(), EncodeError>where
O: NestedEncodeOutput,
Source§impl<M: ManagedTypeApi> PartialEq for TokenId<M>
impl<M: ManagedTypeApi> PartialEq for TokenId<M>
Source§impl<M: ManagedTypeApi> SCDisplay for TokenId<M>
impl<M: ManagedTypeApi> SCDisplay for TokenId<M>
fn fmt<F: FormatByteReceiver>(&self, f: &mut F)
Source§impl<M: ManagedTypeApi> SCLowerHex for TokenId<M>
impl<M: ManagedTypeApi> SCLowerHex for TokenId<M>
fn fmt<F: FormatByteReceiver>(&self, f: &mut F)
Source§impl<M: ManagedTypeApi> TopDecode for TokenId<M>
impl<M: ManagedTypeApi> TopDecode for TokenId<M>
Source§fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
fn top_decode_or_handle_err<I, H>(input: I, h: H) -> Result<Self, H::HandledErr>where
I: TopDecodeInput,
H: DecodeErrorHandler,
top_decode that can handle errors as soon as they occur.
For instance it can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
fn top_decode<I>(input: I) -> Result<Self, DecodeError>where
I: TopDecodeInput,
Source§impl<M: ManagedTypeApi> TopEncode for TokenId<M>
impl<M: ManagedTypeApi> TopEncode for TokenId<M>
Source§fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
fn top_encode_or_handle_err<O, H>(
&self,
output: O,
h: H,
) -> Result<(), H::HandledErr>where
O: TopEncodeOutput,
H: EncodeErrorHandler,
top_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.Source§fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
fn top_encode<O>(&self, output: O) -> Result<(), EncodeError>where
O: TopEncodeOutput,
Source§impl<M: ManagedTypeApi> TypeAbi for TokenId<M>
impl<M: ManagedTypeApi> TypeAbi for TokenId<M>
type Unmanaged = TokenId<M>
fn type_name() -> TypeName
fn type_name_rust() -> TypeName
fn type_names() -> TypeNames
Source§fn provide_type_descriptions<TDC: TypeDescriptionContainer>(
accumulator: &mut TDC,
)
fn provide_type_descriptions<TDC: TypeDescriptionContainer>( accumulator: &mut TDC, )
impl<M: ManagedTypeApi> Eq for TokenId<M>
impl<M> TypeAbiFrom<&[u8]> for TokenId<M>where
M: ManagedTypeApi,
impl<M> TypeAbiFrom<&EsdtTokenIdentifier<M>> for TokenId<M>where
M: ManagedTypeApi,
impl<M> TypeAbiFrom<&TestTokenIdentifier<'_>> for TokenId<M>where
M: ManagedTypeApi,
impl<M: ManagedTypeApi> TypeAbiFrom<&TokenId<M>> for TokenId<M>
impl<M> TypeAbiFrom<&str> for TokenId<M>where
M: ManagedTypeApi,
impl<M> TypeAbiFrom<EsdtTokenIdentifier<M>> for TokenId<M>where
M: ManagedTypeApi,
impl<M> TypeAbiFrom<TestTokenIdentifier<'_>> for TokenId<M>where
M: ManagedTypeApi,
impl<M: ManagedTypeApi> TypeAbiFrom<TokenId<M>> for TokenId<M>
Auto Trait Implementations§
impl<M> Freeze for TokenId<M>
impl<M> RefUnwindSafe for TokenId<M>
impl<M> Send for TokenId<M>
impl<M> Sync for TokenId<M>
impl<M> Unpin for TokenId<M>
impl<M> UnwindSafe for TokenId<M>
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> MultiValueConstLength for T
impl<T> MultiValueConstLength for T
Source§const MULTI_VALUE_CONST_LEN: usize = 1usize
const MULTI_VALUE_CONST_LEN: usize = 1usize
Source§impl<T> MultiValueLength for T
impl<T> MultiValueLength for T
Source§fn multi_value_len(&self) -> usize
fn multi_value_len(&self) -> usize
Source§impl<T> SCCodec for Twhere
T: TopEncode,
impl<T> SCCodec for Twhere
T: TopEncode,
fn fmt<F>(&self, f: &mut F)where
F: FormatByteReceiver,
Source§impl<T> TopDecodeMulti for Twhere
T: TopDecode,
impl<T> TopDecodeMulti for Twhere
T: TopDecode,
Source§const IS_SINGLE_VALUE: bool = true
const IS_SINGLE_VALUE: bool = true
fn multi_decode_or_handle_err<I, H>(
input: &mut I,
h: H,
) -> Result<T, <H as DecodeErrorHandler>::HandledErr>where
I: TopDecodeMultiInput,
H: DecodeErrorHandler,
fn multi_decode<I>(input: &mut I) -> Result<Self, DecodeError>where
I: TopDecodeMultiInput,
Source§impl<T> TopEncodeMulti for Twhere
T: TopEncode,
impl<T> TopEncodeMulti for Twhere
T: TopEncode,
Source§fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
fn multi_encode_or_handle_err<O, H>(
&self,
output: &mut O,
h: H,
) -> Result<(), <H as EncodeErrorHandler>::HandledErr>where
O: TopEncodeMultiOutput,
H: EncodeErrorHandler,
top_encode that can handle errors as soon as they occur.
For instance in can exit immediately and make sure that if it returns, it is a success.
By not deferring error handling, this can lead to somewhat smaller bytecode.