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: 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
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>, )
source§impl PartialEq for TokenData
impl PartialEq for TokenData
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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default 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