manifest/program/instruction_builders/
global_evict_instruction.rs1use crate::{
2 program::{global_deposit::GlobalDepositParams, ManifestInstruction},
3 validation::{get_global_address, get_global_vault_address},
4};
5use borsh::BorshSerialize;
6use solana_program::{
7 instruction::{AccountMeta, Instruction},
8 pubkey::Pubkey,
9};
10
11pub fn global_evict_instruction(
12 mint: &Pubkey,
13 payer: &Pubkey,
14 trader_token_account: &Pubkey,
15 evictee_token_account: &Pubkey,
16 token_program: &Pubkey,
17 num_atoms: u64,
18) -> Instruction {
19 let (global, _global_bump) = get_global_address(mint);
20 let (global_vault, _global_vault_bump) = get_global_vault_address(mint);
21 Instruction {
22 program_id: crate::id(),
23 accounts: vec![
24 AccountMeta::new(*payer, true),
25 AccountMeta::new(global, false),
26 AccountMeta::new_readonly(*mint, false),
27 AccountMeta::new(global_vault, false),
28 AccountMeta::new(*trader_token_account, false),
29 AccountMeta::new(*evictee_token_account, false),
30 AccountMeta::new_readonly(*token_program, false),
31 ],
32 data: [
33 ManifestInstruction::GlobalEvict.to_vec(),
34 GlobalDepositParams::new(num_atoms).try_to_vec().unwrap(),
35 ]
36 .concat(),
37 }
38}