1mod approve;
2mod approve_checked;
3mod burn;
4mod burn_checked;
5mod close_account;
6mod create_account;
7mod create_ata;
8mod create_ata_idempotent;
9mod create_mint;
10mod create_multisig;
11#[cfg(not(feature = "token-2022"))]
12mod create_native_mint;
13#[cfg(feature = "token-2022")]
14mod create_native_mint_2022;
15mod freeze_account;
16mod mint_to;
17mod mint_to_checked;
18mod revoke;
19mod set_authority;
20mod sync_native;
21mod thaw_account;
22mod transfer;
23mod transfer_checked;
24
25#[cfg(feature = "token-2022")]
26use create_native_mint_2022 as create_native_mint;
27#[cfg(feature = "token-2022")]
28pub use spl_token_2022_interface as spl_token;
29#[cfg(not(feature = "token-2022"))]
30pub use spl_token_interface as spl_token;
31pub use {
32 approve::*, approve_checked::*, burn::*, burn_checked::*, close_account::*, create_account::*,
33 create_ata::*, create_ata_idempotent::*, create_mint::*, create_multisig::*,
34 create_native_mint::*, freeze_account::*, mint_to::*, mint_to_checked::*, revoke::*,
35 set_authority::*, sync_native::*, thaw_account::*, transfer::*, transfer_checked::*,
36};
37use {
38 litesvm::{types::FailedTransactionMetadata, LiteSVM},
39 solana_program_pack::{IsInitialized, Pack},
40 solana_pubkey::Pubkey,
41 solana_transaction_error::TransactionError,
42};
43
44pub const TOKEN_ID: Pubkey = spl_token::ID;
45
46pub fn get_spl_account<T: Pack + IsInitialized>(
47 svm: &LiteSVM,
48 account: &Pubkey,
49) -> Result<T, FailedTransactionMetadata> {
50 let account = T::unpack(
51 &svm.get_account(account)
52 .ok_or(FailedTransactionMetadata {
53 err: TransactionError::AccountNotFound,
54 meta: Default::default(),
55 })?
56 .data[..T::LEN],
57 )?;
58
59 Ok(account)
60}
61
62fn get_multisig_signers<'a>(authority: &Pubkey, signing_pubkeys: &'a [Pubkey]) -> Vec<&'a Pubkey> {
63 if signing_pubkeys == [*authority] {
64 vec![]
65 } else {
66 signing_pubkeys.iter().collect::<Vec<_>>()
67 }
68}