1use solana_pubkey::{Pubkey, PUBKEY_BYTES};
3
4solana_pubkey::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
5
6pub mod program_v3_4_0 {
7 solana_pubkey::declare_id!("NToK4t5AQzxPNpUA84DkxgfXaVDbDQQjpHKCqsbY46B");
8}
9
10pub const SPL_TOKEN_ACCOUNT_MINT_OFFSET: usize = 0;
23pub const SPL_TOKEN_ACCOUNT_OWNER_OFFSET: usize = 32;
24const SPL_TOKEN_ACCOUNT_LENGTH: usize = 165;
25
26pub trait GenericTokenAccount {
27 fn valid_account_data(account_data: &[u8]) -> bool;
28
29 fn unpack_account_owner_unchecked(account_data: &[u8]) -> &Pubkey {
31 Self::unpack_pubkey_unchecked(account_data, SPL_TOKEN_ACCOUNT_OWNER_OFFSET)
32 }
33
34 fn unpack_account_mint_unchecked(account_data: &[u8]) -> &Pubkey {
36 Self::unpack_pubkey_unchecked(account_data, SPL_TOKEN_ACCOUNT_MINT_OFFSET)
37 }
38
39 fn unpack_pubkey_unchecked(account_data: &[u8], offset: usize) -> &Pubkey {
41 bytemuck::from_bytes(&account_data[offset..offset.wrapping_add(PUBKEY_BYTES)])
42 }
43
44 fn unpack_account_owner(account_data: &[u8]) -> Option<&Pubkey> {
45 if Self::valid_account_data(account_data) {
46 Some(Self::unpack_account_owner_unchecked(account_data))
47 } else {
48 None
49 }
50 }
51
52 fn unpack_account_mint(account_data: &[u8]) -> Option<&Pubkey> {
53 if Self::valid_account_data(account_data) {
54 Some(Self::unpack_account_mint_unchecked(account_data))
55 } else {
56 None
57 }
58 }
59}
60
61pub struct Account;
62impl Account {
63 pub fn get_packed_len() -> usize {
64 SPL_TOKEN_ACCOUNT_LENGTH
65 }
66}
67
68impl GenericTokenAccount for Account {
69 fn valid_account_data(account_data: &[u8]) -> bool {
70 account_data.len() == SPL_TOKEN_ACCOUNT_LENGTH
71 }
72}
73
74pub mod native_mint {
75 solana_pubkey::declare_id!("So11111111111111111111111111111111111111112");
76
77 pub const ACCOUNT_DATA: [u8; 82] = [
87 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
90 ];
91}