Skip to main content

litesvm_token/
lib.rs

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