solana_tx_decoding/instruction/raydium/
is_raydium_cpmm_swap_instruction.rs

1use solana_central::Instruction;
2use solana_central::constants::RAYDIUM_CONSTANTS;
3
4/// Determine if a Solana instruction is a Raydium Cpmm/AmmV5 swap instruction. Checks program ID,
5/// data length, account count, and instruction discriminator to identify Raydium CPMM swap
6/// instructions.
7pub fn is_raydium_cpmm_swap_instruction(instruction: &Instruction) -> bool {
8  if instruction.data.len() < 24 {
9    return false;
10  }
11  if instruction.accounts.len() < 13 {
12    return false;
13  }
14  if instruction.tx_account_keys[instruction.program_id_index as usize]
15    != RAYDIUM_CONSTANTS.cpmm_program
16  {
17    return false;
18  }
19  // Discriminator has to match one of the cpmm swap discriminators
20  if !(instruction.data[0..8] == RAYDIUM_CONSTANTS.cpmm_swap_discriminators[0]
21    || instruction.data[0..8] == RAYDIUM_CONSTANTS.cpmm_swap_discriminators[1])
22  {
23    return false;
24  }
25  true
26}