solana_tx_decoding/instruction/raydium/
is_raydium_ammv4_swap_instruction.rs

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