pub struct Token {
pub mint: Pubkey,
pub owner: Pubkey,
pub amount: u64,
pub delegate: Option<Pubkey>,
pub state: AccountState,
pub is_native: Option<u64>,
pub delegated_amount: u64,
pub close_authority: Option<Pubkey>,
pub account_type: u8,
pub extensions: Option<Vec<ExtensionStruct>>,
}Expand description
Ctoken account structure (same as SPL Token Account but with extensions). Ctokens are solana accounts, compressed tokens are stored as TokenData that is optimized for compressed accounts.
Fields§
§mint: PubkeyThe mint associated with this account
owner: PubkeyThe owner of this account.
amount: u64The amount of tokens this account holds.
delegate: Option<Pubkey>If delegate is Some then delegated_amount represents
the amount authorized by the delegate
state: AccountStateThe account’s state
is_native: Option<u64>If is_some, this is a native token, and the value logs the rent-exempt
reserve. An Account is required to be rent-exempt, so the value is
used by the Processor to ensure that wrapped SOL accounts do not
drop below this threshold.
delegated_amount: u64The amount delegated
Optional authority to close the account.
account_type: u8Account type discriminator (at byte 165 when extensions present). For valid Token accounts this is ACCOUNT_TYPE_TOKEN_ACCOUNT (2).
extensions: Option<Vec<ExtensionStruct>>Extensions for the token account (including compressible config)
Implementations§
Source§impl Token
impl Token
Sourcepub fn amount_from_slice(data: &[u8]) -> Result<u64, ZeroCopyError>
pub fn amount_from_slice(data: &[u8]) -> Result<u64, ZeroCopyError>
Extract amount directly from account data slice using hardcoded offset Token layout: mint (32 bytes) + owner (32 bytes) + amount (8 bytes)
Sourcepub fn is_initialized(&self) -> bool
pub fn is_initialized(&self) -> bool
Checks if account is initialized
Sourcepub fn account_type(&self) -> u8
pub fn account_type(&self) -> u8
Returns the account type discriminator
Sourcepub fn is_token_account(&self) -> bool
pub fn is_token_account(&self) -> bool
Checks if account_type matches Token discriminator value
Source§impl Token
impl Token
Sourcepub fn zero_copy_at_checked(
bytes: &[u8],
) -> Result<(ZToken<'_>, &[u8]), TokenError>
pub fn zero_copy_at_checked( bytes: &[u8], ) -> Result<(ZToken<'_>, &[u8]), TokenError>
Zero-copy deserialization with initialization and account_type check. Returns an error if:
- Account is uninitialized (byte 108 == 0)
- Account type is not ACCOUNT_TYPE_TOKEN_ACCOUNT (byte 165 != 2) Allows both Initialized (1) and Frozen (2) states.
Sourcepub fn zero_copy_at_mut_checked(
bytes: &mut [u8],
) -> Result<(ZTokenMut<'_>, &mut [u8]), TokenError>
pub fn zero_copy_at_mut_checked( bytes: &mut [u8], ) -> Result<(ZTokenMut<'_>, &mut [u8]), TokenError>
Mutable zero-copy deserialization with initialization and account_type check. Returns an error if:
- Account is uninitialized (state == 0)
- Account type is not ACCOUNT_TYPE_TOKEN_ACCOUNT
Sourcepub fn from_account_info_checked<'a>(
account_info: &AccountInfo,
) -> Result<ZToken<'a>, TokenError>
pub fn from_account_info_checked<'a>( account_info: &AccountInfo, ) -> Result<ZToken<'a>, TokenError>
Deserialize a Token from account info with validation using zero-copy.
Checks:
- Account is owned by the CTOKEN program
- Account is initialized (state != 0)
- Account type is ACCOUNT_TYPE_TOKEN_ACCOUNT (byte 165 == 2)
- No trailing bytes after the Token structure
Safety: The returned ZToken references the account data which is valid for the duration of the transaction. The caller must ensure the account is not modified through other means while this reference exists.
Sourcepub fn from_account_info_mut_checked<'a>(
account_info: &AccountInfo,
) -> Result<ZTokenMut<'a>, TokenError>
pub fn from_account_info_mut_checked<'a>( account_info: &AccountInfo, ) -> Result<ZTokenMut<'a>, TokenError>
Mutable version of from_account_info_checked. Deserialize a Token from account info with validation using zero-copy.
Checks:
- Account is owned by the CTOKEN program
- Account is initialized (state != 0)
- Account type is ACCOUNT_TYPE_TOKEN_ACCOUNT (byte 165 == 2)
- No trailing bytes after the Token structure
Trait Implementations§
Source§impl BorshDeserialize for Token
impl BorshDeserialize for Token
fn deserialize_reader<R: Read>(buf: &mut R) -> Result<Self>
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl BorshSerialize for Token
impl BorshSerialize for Token
Source§impl<'a> ZeroCopyAt<'a> for Token
impl<'a> ZeroCopyAt<'a> for Token
type ZeroCopyAt = ZToken<'a>
fn zero_copy_at( bytes: &'a [u8], ) -> Result<(Self::ZeroCopyAt, &'a [u8]), ZeroCopyError>
Source§impl<'a> ZeroCopyAtMut<'a> for Token
impl<'a> ZeroCopyAtMut<'a> for Token
type ZeroCopyAtMut = ZTokenMut<'a>
fn zero_copy_at_mut( bytes: &'a mut [u8], ) -> Result<(Self::ZeroCopyAtMut, &'a mut [u8]), ZeroCopyError>
Source§impl<'a> ZeroCopyNew<'a> for Token
impl<'a> ZeroCopyNew<'a> for Token
Source§type ZeroCopyConfig = TokenConfig
type ZeroCopyConfig = TokenConfig
Source§fn byte_len(config: &Self::ZeroCopyConfig) -> Result<usize, ZeroCopyError>
fn byte_len(config: &Self::ZeroCopyConfig) -> Result<usize, ZeroCopyError>
Source§fn new_zero_copy(
bytes: &'a mut [u8],
config: Self::ZeroCopyConfig,
) -> Result<(Self::Output, &'a mut [u8]), ZeroCopyError>
fn new_zero_copy( bytes: &'a mut [u8], config: Self::ZeroCopyConfig, ) -> Result<(Self::Output, &'a mut [u8]), ZeroCopyError>
impl Eq for Token
impl StructuralPartialEq for Token
Auto Trait Implementations§
impl Freeze for Token
impl RefUnwindSafe for Token
impl Send for Token
impl Sync for Token
impl Unpin for Token
impl UnwindSafe for Token
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> HashToFieldSize for Twhere
T: BorshSerialize,
impl<T> HashToFieldSize for Twhere
T: BorshSerialize,
fn hash_to_field_size(&self) -> Result<[u8; 32], HasherError>
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 more