sol_parser_sdk/instr/
mod.rs1pub mod meteora_amm;
6pub mod meteora_damm;
7pub mod meteora_dlmm;
8pub mod orca_whirlpool;
9pub mod program_ids;
10pub mod pump;
11pub mod pump_fees;
12pub mod pump_amm;
13pub mod raydium_amm;
14pub mod raydium_clmm;
15pub mod raydium_cpmm;
16pub mod raydium_launchpad;
17pub mod utils;
18
19pub mod all_inner;
21pub mod inner_common; pub mod pump_amm_inner; pub mod pump_inner; pub mod raydium_clmm_inner; use crate::grpc::types::EventTypeFilter;
26pub use meteora_damm::parse_instruction as parse_meteora_damm_instruction;
28pub use pump::parse_instruction as parse_pumpfun_instruction;
29pub use pump_amm::parse_instruction as parse_pumpswap_instruction;
30
31pub use utils::*;
33
34use crate::core::events::DexEvent;
35use program_ids::*;
36use solana_sdk::{pubkey::Pubkey, signature::Signature};
37
38#[inline]
40pub fn parse_instruction_unified(
41 instruction_data: &[u8],
42 accounts: &[Pubkey],
43 signature: Signature,
44 slot: u64,
45 tx_index: u64,
46 block_time_us: Option<i64>,
47 grpc_recv_us: i64,
48 event_type_filter: Option<&EventTypeFilter>,
49 program_id: &Pubkey,
50) -> Option<DexEvent> {
51 if instruction_data.is_empty() {
53 return None;
54 }
55
56 if *program_id == PUMPFUN_PROGRAM_ID {
60 if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pumpfun() {
61 return None;
62 }
63 return parse_pumpfun_instruction(
64 instruction_data,
65 accounts,
66 signature,
67 slot,
68 tx_index,
69 block_time_us,
70 grpc_recv_us,
71 );
72 }
73 else if *program_id == PUMPSWAP_PROGRAM_ID {
75 if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pumpswap() {
76 return None;
77 }
78 return parse_pumpswap_instruction(
79 instruction_data,
80 accounts,
81 signature,
82 slot,
83 tx_index,
84 block_time_us,
85 );
86 }
87 else if *program_id == METEORA_DAMM_V2_PROGRAM_ID {
89 if event_type_filter.is_some() && !event_type_filter.unwrap().includes_meteora_damm_v2() {
90 return None;
91 }
92 return parse_meteora_damm_instruction(
93 instruction_data,
94 accounts,
95 signature,
96 slot,
97 tx_index,
98 block_time_us,
99 grpc_recv_us,
100 );
101 }
102 else if *program_id == PUMP_FEES_PROGRAM_ID {
104 if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pump_fees() {
105 return None;
106 }
107 return crate::instr::pump_fees::parse_instruction(
108 instruction_data,
109 accounts,
110 signature,
111 slot,
112 tx_index,
113 block_time_us,
114 grpc_recv_us,
115 );
116 }
117
118 None
119}