solana_tx_decoding/instruction/
classify_instruction.rs1use crate::instruction::pumpfun::is_pf_bonding_curve_create_instruction::is_pf_bonding_curve_create_instruction;
2use crate::instruction::pumpfun::is_pumpfun_event_instruction::is_pumpfun_event_instruction;
3use crate::instruction::pumpswap::is_pumpswap_swap_instruction::is_pumpswap_swap_instruction;
4use crate::instruction::raydium::is_raydium_ammv4_swap_instruction::is_raydium_ammv4_swap_instruction;
5use crate::instruction::raydium::is_raydium_cpmm_swap_instruction::is_raydium_cpmm_swap_instruction;
6use crate::instruction::raydium::is_raydium_launchpad_swap_instruction::is_raydium_launchpad_swap_instruction;
7use crate::types::instruction_type::InstructionType;
8use solana_central::Instruction;
9use solana_central::SwapDirection;
10
11pub fn classify_instruction(instruction: &Instruction) -> (InstructionType, SwapDirection) {
15 if is_raydium_ammv4_swap_instruction(instruction) {
16 return (InstructionType::RaydiumAmmV4Swap, SwapDirection::AToB);
17 } else if is_raydium_cpmm_swap_instruction(instruction) {
18 return (InstructionType::RaydiumCpmmSwap, SwapDirection::AToB);
19 }
20
21 let (is_raydium_launchpad_swap, swap_direction) =
23 is_raydium_launchpad_swap_instruction(instruction);
24 if is_raydium_launchpad_swap {
25 return (InstructionType::RaydiumLaunchpadSwap, swap_direction);
26 }
27 let (is_pumpswap_swap, swap_direction) = is_pumpswap_swap_instruction(instruction);
28 if is_pumpswap_swap {
29 return (InstructionType::PumpswapSwap, swap_direction);
30 }
31 else if is_pumpfun_event_instruction(instruction) {
33 return (InstructionType::PfBondingCurveSwap, SwapDirection::AToB);
34 } else if is_pf_bonding_curve_create_instruction(instruction) {
35 return (InstructionType::PfBondingCurveCreate, SwapDirection::AToB);
36 } else {
37 return (InstructionType::None, SwapDirection::AToB);
38 }
39}