mollusk_svm_programs_token/
token.rs1use {
2 mollusk_svm::Mollusk,
3 solana_account::Account,
4 solana_program_pack::Pack,
5 solana_pubkey::Pubkey,
6 solana_rent::Rent,
7 spl_token_interface::state::{Account as TokenAccount, Mint},
8};
9
10pub const ID: Pubkey = solana_pubkey::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
11
12pub const ELF: &[u8] = include_bytes!("elf/token.so");
13
14pub fn add_program(mollusk: &mut Mollusk) {
15 mollusk.add_program_with_loader_and_elf(
17 &ID,
18 &mollusk_svm::program::loader_keys::LOADER_V2,
19 ELF,
20 );
21}
22
23pub fn account() -> Account {
24 mollusk_svm::program::create_program_account_loader_v2(ELF)
26}
27
28pub fn keyed_account() -> (Pubkey, Account) {
30 (ID, account())
31}
32
33pub fn create_account_for_mint(mint_data: Mint) -> Account {
35 let mut data = vec![0u8; Mint::LEN];
36 Mint::pack(mint_data, &mut data).unwrap();
37
38 Account {
39 lamports: Rent::default().minimum_balance(Mint::LEN),
40 data,
41 owner: ID,
42 executable: false,
43 rent_epoch: 0,
44 }
45}
46
47pub fn create_account_for_token_account(token_account_data: TokenAccount) -> Account {
49 let mut data = vec![0u8; TokenAccount::LEN];
50 TokenAccount::pack(token_account_data, &mut data).unwrap();
51
52 Account {
53 lamports: Rent::default().minimum_balance(TokenAccount::LEN),
54 data,
55 owner: ID,
56 executable: false,
57 rent_epoch: 0,
58 }
59}