Struct light_compressed_token::token_data::TokenData
source · pub struct TokenData {
pub mint: Pubkey,
pub owner: Pubkey,
pub amount: u64,
pub delegate: Option<Pubkey>,
pub state: AccountState,
pub tlv: Option<Vec<u8>>,
}
Fields§
§mint: Pubkey
The mint associated with this account
owner: Pubkey
The owner of this account.
amount: u64
The amount of tokens this account holds.
delegate: Option<Pubkey>
If delegate
is Some
then delegated_amount
represents
the amount authorized by the delegate
state: AccountState
The account’s state
tlv: Option<Vec<u8>>
Placeholder for TokenExtension tlv data (unimplemented)
Implementations§
source§impl TokenData
impl TokenData
Hashing schema: H(mint, owner, amount, delegate, delegated_amount, is_native, state)
delegate, delegated_amount, is_native and state have dynamic positions. Always hash mint, owner and amount If delegate hash delegate and delegated_amount together. If is native hash is_native else is omitted. If frozen hash AccountState::Frozen else is omitted.
Security: to prevent the possibility that different fields with the same value to result in the same hash we add a prefix to the delegated amount, is native and state fields. This way we can have a dynamic hashing schema and hash only used values.
sourcepub fn is_native(&self) -> bool
pub fn is_native(&self) -> bool
Only the spl representation of native tokens (wrapped SOL) is compressed. The sol value is stored in the token pool account. The sol value in the compressed account is independent from the wrapped sol amount.
pub fn hash_with_hashed_values<H: Hasher>( hashed_mint: &[u8; 32], hashed_owner: &[u8; 32], amount_bytes: &[u8; 8], hashed_delegate: &Option<&[u8; 32]>, ) -> Result<[u8; 32], HasherError>
pub fn hash_frozen_with_hashed_values<H: Hasher>( hashed_mint: &[u8; 32], hashed_owner: &[u8; 32], amount_bytes: &[u8; 8], hashed_delegate: &Option<&[u8; 32]>, ) -> Result<[u8; 32], HasherError>
sourcepub fn hash_inputs_with_hashed_values<H: Hasher, const FROZEN_INPUTS: bool>(
mint: &[u8; 32],
owner: &[u8; 32],
amount_bytes: &[u8; 8],
hashed_delegate: &Option<&[u8; 32]>,
) -> Result<[u8; 32], HasherError>
pub fn hash_inputs_with_hashed_values<H: Hasher, const FROZEN_INPUTS: bool>( mint: &[u8; 32], owner: &[u8; 32], amount_bytes: &[u8; 8], hashed_delegate: &Option<&[u8; 32]>, ) -> Result<[u8; 32], HasherError>
We should not hash pubkeys multiple times. For all we can assume mints are equal. For all input compressed accounts we assume owners are equal.
Trait Implementations§
source§impl BorshDeserialize for TokenDatawhere
Pubkey: BorshDeserialize,
u64: BorshDeserialize,
Option<Pubkey>: BorshDeserialize,
AccountState: BorshDeserialize,
Option<Vec<u8>>: BorshDeserialize,
impl BorshDeserialize for TokenDatawhere
Pubkey: BorshDeserialize,
u64: BorshDeserialize,
Option<Pubkey>: BorshDeserialize,
AccountState: BorshDeserialize,
Option<Vec<u8>>: BorshDeserialize,
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
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 TokenDatawhere
Pubkey: BorshSerialize,
u64: BorshSerialize,
Option<Pubkey>: BorshSerialize,
AccountState: BorshSerialize,
Option<Vec<u8>>: BorshSerialize,
impl BorshSerialize for TokenDatawhere
Pubkey: BorshSerialize,
u64: BorshSerialize,
Option<Pubkey>: BorshSerialize,
AccountState: BorshSerialize,
Option<Vec<u8>>: BorshSerialize,
source§impl DataHasher for TokenData
impl DataHasher for TokenData
source§impl IdlBuild for TokenData
impl IdlBuild for TokenData
source§fn __anchor_private_full_path() -> String
fn __anchor_private_full_path() -> String
source§fn __anchor_private_gen_idl_type() -> Option<IdlTypeDefinition>
fn __anchor_private_gen_idl_type() -> Option<IdlTypeDefinition>
None
if it doesn’t exist.source§fn __anchor_private_insert_idl_defined(
defined_types: &mut HashMap<String, IdlTypeDefinition>,
)
fn __anchor_private_insert_idl_defined( defined_types: &mut HashMap<String, IdlTypeDefinition>, )
impl Eq for TokenData
impl StructuralPartialEq for TokenData
Auto Trait Implementations§
impl Freeze for TokenData
impl RefUnwindSafe for TokenData
impl Send for TokenData
impl Sync for TokenData
impl Unpin for TokenData
impl UnwindSafe for TokenData
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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