sol_parser_sdk/instr/
mod.rs1pub mod utils;
6pub mod program_ids;
7pub mod raydium_launchpad;
8pub mod pumpfun;
9pub mod pump_amm;
10pub mod raydium_clmm;
11pub mod raydium_cpmm;
12pub mod raydium_amm;
13pub mod orca_whirlpool;
14pub mod meteora_amm;
15pub mod meteora_damm;
16pub mod meteora_dlmm;
17
18pub use raydium_launchpad::parse_instruction as parse_raydium_launchpad_instruction;
20pub use pumpfun::parse_instruction as parse_pumpfun_instruction;
21pub use pump_amm::parse_instruction as parse_pump_amm_instruction;
22pub use raydium_clmm::parse_instruction as parse_raydium_clmm_instruction;
23pub use raydium_cpmm::parse_instruction as parse_raydium_cpmm_instruction;
24pub use raydium_amm::parse_instruction as parse_raydium_amm_instruction;
25pub use orca_whirlpool::parse_instruction as parse_orca_whirlpool_instruction;
26pub use meteora_amm::parse_instruction as parse_meteora_amm_instruction;
27pub use meteora_damm::parse_instruction as parse_meteora_damm_instruction;
28pub use meteora_dlmm::parse_instruction as parse_meteora_dlmm_instruction;
29
30pub use utils::*;
32
33use solana_sdk::{pubkey::Pubkey, signature::Signature};
34use crate::core::events::DexEvent;
35use program_ids::*;
36
37#[inline]
39pub fn parse_instruction_unified(
40 instruction_data: &[u8],
41 accounts: &[Pubkey],
42 signature: Signature,
43 slot: u64,
44 tx_index: u64,
45 block_time: Option<i64>,
46 program_id: &Pubkey,
47) -> Option<DexEvent> {
48 if instruction_data.is_empty() {
50 return None;
51 }
52
53 if *program_id == PUMPFUN_PROGRAM_ID {
57 return parse_pumpfun_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
58 }
59
60 if *program_id == RAYDIUM_AMM_V4_PROGRAM_ID {
62 return parse_raydium_amm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
63 }
64
65 if *program_id == RAYDIUM_CLMM_PROGRAM_ID {
67 return parse_raydium_clmm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
68 }
69
70 if *program_id == ORCA_WHIRLPOOL_PROGRAM_ID {
72 return parse_orca_whirlpool_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
73 }
74
75 if *program_id == RAYDIUM_CPMM_PROGRAM_ID {
77 return parse_raydium_cpmm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
78 }
79
80 if *program_id == METEORA_DAMM_V2_PROGRAM_ID {
82 return parse_meteora_damm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
83 }
84
85 if *program_id == METEORA_DLMM_PROGRAM_ID {
87 return parse_meteora_dlmm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
88 }
89
90 if *program_id == BONK_PROGRAM_ID {
92 return parse_raydium_launchpad_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
93 }
94
95 if *program_id == PUMPSWAP_PROGRAM_ID {
97 return parse_pump_amm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
98 }
99
100 if *program_id == METEORA_POOLS_PROGRAM_ID {
102 return parse_meteora_amm_instruction(instruction_data, accounts, signature, slot, tx_index, block_time);
103 }
104
105 None
106}