litesvm_token/
lib.rs

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}