1use solana_sdk::pubkey::{Pubkey, PUBKEY_BYTES};
3
4solana_sdk::declare_id!("ToKLx75MGim1d1jRusuVX8xvdvvbSDESVaNXpRA9PHN");
5
6pub(crate) mod program_v3_4_0 {
7 solana_sdk::declare_id!("NToWZEGXbb8dvy6qbKHb3ZTL8jf9UpZo3VDzm9fkwHr");
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(crate) 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 + 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_sdk::declare_id!("Safe111111111111111111111111111111111111111");
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}