solana_tx_decoding/instruction/pumpswap/
is_pumpswap_swap_instruction.rs1use solana_central::Instruction;
2use solana_central::SwapDirection;
3use solana_central::constants::PUMP_CONSTANTS;
4
5pub fn is_pumpswap_swap_instruction(instruction: &Instruction) -> (bool, SwapDirection) {
8 if instruction.data.len() < 24 {
10 return (false, SwapDirection::AToB);
11 }
12 if instruction.tx_account_keys[instruction.program_id_index as usize]
13 != PUMP_CONSTANTS.pump_swap_program
14 {
15 return (false, SwapDirection::AToB);
16 }
17 let discriminator = &instruction.data[0..8];
18 if discriminator == PUMP_CONSTANTS.buy_instruction_discriminator {
20 return (true, SwapDirection::BToA);
21 } else if discriminator == PUMP_CONSTANTS.sell_instruction_discriminator {
22 return (true, SwapDirection::AToB);
23 } else if discriminator == PUMP_CONSTANTS.pumpswap_buy_exact_quote_in_instruction_discriminator {
24 return (true, SwapDirection::BToA);
25 } else {
26 return (false, SwapDirection::AToB);
27 }
28}