Skip to main content

sol_parser_sdk/core/events/
enum_impl.rs

1use super::types::*;
2use once_cell::sync::Lazy;
3use serde::{Deserialize, Serialize};
4use solana_sdk::signature::Signature;
5
6// ====================== 统一的 DEX 事件枚举 ======================
7
8/// 统一的 DEX 事件枚举 - 参考 sol-dex-shreds 的做法
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum DexEvent {
11    // PumpFun 事件
12    PumpFunCreate(PumpFunCreateTokenEvent),     // - 已对接
13    PumpFunCreateV2(PumpFunCreateV2TokenEvent), // - 已对接 (CreateV2 / Mayhem)
14    PumpFunTrade(PumpFunTradeEvent),            // - 已对接 (统一交易事件,包含所有交易类型)
15    PumpFunBuy(PumpFunTradeEvent),              // - 已对接 (仅买入事件,用于过滤)
16    PumpFunSell(PumpFunTradeEvent),             // - 已对接 (仅卖出事件,用于过滤)
17    PumpFunBuyExactSolIn(PumpFunTradeEvent),    // - 已对接 (精确SOL买入事件,用于过滤)
18    PumpFunMigrate(PumpFunMigrateEvent),        // - 已对接
19    /// Pump fees:`CreateFeeSharingConfigEvent`(`pfeeUx...`,见 `idls/pump_fees.json`)
20    PumpFeesCreateFeeSharingConfig(PumpFeesCreateFeeSharingConfigEvent),
21    PumpFeesInitializeFeeConfig(PumpFeesInitializeFeeConfigEvent),
22    PumpFeesResetFeeSharingConfig(PumpFeesResetFeeSharingConfigEvent),
23    PumpFeesRevokeFeeSharingAuthority(PumpFeesRevokeFeeSharingAuthorityEvent),
24    PumpFeesTransferFeeSharingAuthority(PumpFeesTransferFeeSharingAuthorityEvent),
25    PumpFeesUpdateAdmin(PumpFeesUpdateAdminEvent),
26    PumpFeesUpdateFeeConfig(PumpFeesUpdateFeeConfigEvent),
27    PumpFeesUpdateFeeShares(PumpFeesUpdateFeeSharesEvent),
28    PumpFeesUpsertFeeTiers(PumpFeesUpsertFeeTiersEvent),
29    /// Pump.fun:曲线 creator 迁移(`migrateBondingCurveCreatorEvent`)
30    PumpFunMigrateBondingCurveCreator(PumpFunMigrateBondingCurveCreatorEvent),
31    PumpFunGlobalAccount(PumpFunGlobalAccountEvent), // - 已对接
32    PumpFunBondingCurveAccount(PumpFunBondingCurveAccountEvent),
33    PumpFunFeeConfigAccount(PumpFunFeeConfigAccountEvent),
34    PumpFunSharingConfigAccount(PumpFunSharingConfigAccountEvent),
35    PumpFunGlobalVolumeAccumulatorAccount(PumpFunGlobalVolumeAccumulatorAccountEvent),
36    PumpFunUserVolumeAccumulatorAccount(PumpFunUserVolumeAccumulatorAccountEvent),
37    PumpSwapTrade(PumpSwapTradeEvent), // - 已对接 (buy/sell/buy_exact_sol_in)
38    PumpSwapBuy(PumpSwapBuyEvent),     // - 已对接 (legacy)
39    PumpSwapSell(PumpSwapSellEvent),   // - 已对接 (legacy)
40    PumpSwapCreatePool(PumpSwapCreatePoolEvent), // - 已对接
41    PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), // - 已对接
42    PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved), // - 已对接
43
44    // Meteora DAMM V2 事件
45    MeteoraDammV2Swap(MeteoraDammV2SwapEvent), // - 已对接
46    MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), // - 已对接
47    MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent), // - 已对接
48    MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent), // - 已对接
49    MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent), // - 已对接
50
51    // Bonk 事件
52    BonkTrade(BonkTradeEvent),
53    BonkPoolCreate(BonkPoolCreateEvent),
54    BonkMigrateAmm(BonkMigrateAmmEvent),
55
56    // Raydium CLMM 事件
57    RaydiumClmmSwap(RaydiumClmmSwapEvent),
58    RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
59    RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
60    RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
61    RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
62    RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
63    RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
64    RaydiumClmmLiquidityChange(RaydiumClmmLiquidityChangeEvent),
65    RaydiumClmmConfigChange(RaydiumClmmConfigChangeEvent),
66    RaydiumClmmCreatePersonalPosition(RaydiumClmmCreatePersonalPositionEvent),
67    RaydiumClmmLiquidityCalculate(RaydiumClmmLiquidityCalculateEvent),
68    RaydiumClmmOpenLimitOrder(RaydiumClmmOpenLimitOrderEvent),
69    RaydiumClmmIncreaseLimitOrder(RaydiumClmmIncreaseLimitOrderEvent),
70    RaydiumClmmDecreaseLimitOrder(RaydiumClmmDecreaseLimitOrderEvent),
71    RaydiumClmmSettleLimitOrder(RaydiumClmmSettleLimitOrderEvent),
72    RaydiumClmmUpdateRewardInfos(RaydiumClmmUpdateRewardInfosEvent),
73    RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
74    RaydiumClmmAmmConfigAccount(RaydiumClmmAmmConfigAccountEvent),
75    RaydiumClmmPoolStateAccount(RaydiumClmmPoolStateAccountEvent),
76    RaydiumClmmTickArrayStateAccount(RaydiumClmmTickArrayStateAccountEvent),
77
78    // Raydium CPMM 事件
79    RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
80    RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
81    RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
82    RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
83
84    // Raydium AMM V4 事件
85    RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
86    RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
87    RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
88    RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
89    RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
90
91    // Orca Whirlpool 事件
92    OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
93    OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
94    OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
95    OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
96
97    // Meteora Pools 事件
98    MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
99    MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
100    MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
101    MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
102    MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
103    MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
104
105    // Meteora DLMM 事件
106    MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
107    MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
108    MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
109    MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
110    MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
111    MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
112    MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
113    MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
114
115    // 账户事件
116    TokenInfo(TokenInfoEvent),       // - 已对接
117    TokenAccount(TokenAccountEvent), // - 已对接
118    NonceAccount(NonceAccountEvent), // - 已对接
119    PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), // - 已对接
120    PumpSwapPoolAccount(PumpSwapPoolAccountEvent), // - 已对接
121
122    // 区块元数据事件
123    BlockMeta(BlockMetaEvent),
124
125    // 错误事件
126    Error(String),
127}
128
129// 静态默认 EventMetadata,用于 Error 事件
130static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
131    signature: Signature::from([0u8; 64]),
132    slot: 0,
133    tx_index: 0,
134    block_time_us: 0,
135    grpc_recv_us: 0,
136    recent_blockhash: None,
137});
138
139impl DexEvent {
140    /// 获取事件的元数据
141    pub fn metadata(&self) -> &EventMetadata {
142        match self {
143            // PumpFun 事件
144            DexEvent::PumpFunCreate(e) => &e.metadata,
145            DexEvent::PumpFunCreateV2(e) => &e.metadata,
146            DexEvent::PumpFunTrade(e) => &e.metadata,
147            DexEvent::PumpFunBuy(e) => &e.metadata,
148            DexEvent::PumpFunSell(e) => &e.metadata,
149            DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
150            DexEvent::PumpFunMigrate(e) => &e.metadata,
151            DexEvent::PumpFeesCreateFeeSharingConfig(e) => &e.metadata,
152            DexEvent::PumpFeesInitializeFeeConfig(e) => &e.metadata,
153            DexEvent::PumpFeesResetFeeSharingConfig(e) => &e.metadata,
154            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => &e.metadata,
155            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => &e.metadata,
156            DexEvent::PumpFeesUpdateAdmin(e) => &e.metadata,
157            DexEvent::PumpFeesUpdateFeeConfig(e) => &e.metadata,
158            DexEvent::PumpFeesUpdateFeeShares(e) => &e.metadata,
159            DexEvent::PumpFeesUpsertFeeTiers(e) => &e.metadata,
160            DexEvent::PumpFunMigrateBondingCurveCreator(e) => &e.metadata,
161            DexEvent::PumpFunGlobalAccount(e) => &e.metadata,
162            DexEvent::PumpFunBondingCurveAccount(e) => &e.metadata,
163            DexEvent::PumpFunFeeConfigAccount(e) => &e.metadata,
164            DexEvent::PumpFunSharingConfigAccount(e) => &e.metadata,
165            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => &e.metadata,
166            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => &e.metadata,
167
168            // PumpSwap 事件
169            DexEvent::PumpSwapTrade(e) => &e.metadata,
170            DexEvent::PumpSwapBuy(e) => &e.metadata,
171            DexEvent::PumpSwapSell(e) => &e.metadata,
172            DexEvent::PumpSwapCreatePool(e) => &e.metadata,
173            DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
174            DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
175
176            // Meteora DAMM V2 事件
177            DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
178            DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
179            DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
180            DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
181            DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
182
183            // Bonk 事件
184            DexEvent::BonkTrade(e) => &e.metadata,
185            DexEvent::BonkPoolCreate(e) => &e.metadata,
186            DexEvent::BonkMigrateAmm(e) => &e.metadata,
187
188            // Raydium CLMM 事件
189            DexEvent::RaydiumClmmSwap(e) => &e.metadata,
190            DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
191            DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
192            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
193            DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
194            DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
195            DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
196            DexEvent::RaydiumClmmLiquidityChange(e) => &e.metadata,
197            DexEvent::RaydiumClmmConfigChange(e) => &e.metadata,
198            DexEvent::RaydiumClmmCreatePersonalPosition(e) => &e.metadata,
199            DexEvent::RaydiumClmmLiquidityCalculate(e) => &e.metadata,
200            DexEvent::RaydiumClmmOpenLimitOrder(e) => &e.metadata,
201            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => &e.metadata,
202            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => &e.metadata,
203            DexEvent::RaydiumClmmSettleLimitOrder(e) => &e.metadata,
204            DexEvent::RaydiumClmmUpdateRewardInfos(e) => &e.metadata,
205            DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
206            DexEvent::RaydiumClmmAmmConfigAccount(e) => &e.metadata,
207            DexEvent::RaydiumClmmPoolStateAccount(e) => &e.metadata,
208            DexEvent::RaydiumClmmTickArrayStateAccount(e) => &e.metadata,
209
210            // Raydium CPMM 事件
211            DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
212            DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
213            DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
214            DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
215
216            // Raydium AMM V4 事件
217            DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
218            DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
219            DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
220            DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
221            DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
222
223            // Orca Whirlpool 事件
224            DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
225            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
226            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
227            DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
228
229            // Meteora Pools 事件
230            DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
231            DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
232            DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
233            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
234            DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
235            DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
236
237            // Meteora DLMM 事件
238            DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
239            DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
240            DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
241            DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
242            DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
243            DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
244            DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
245            DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
246
247            // 账户事件
248            DexEvent::TokenInfo(e) => &e.metadata,
249            DexEvent::TokenAccount(e) => &e.metadata,
250            DexEvent::NonceAccount(e) => &e.metadata,
251            DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
252            DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
253
254            // 区块元数据事件
255            DexEvent::BlockMeta(e) => &e.metadata,
256
257            // 错误事件 - 返回默认元数据
258            DexEvent::Error(_) => &DEFAULT_METADATA,
259        }
260    }
261
262    /// Mutable metadata for filling shared fields (e.g. recent_blockhash). Returns None for Error variant.
263    pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
264        match self {
265            DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
266            DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
267            DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
268            DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
269            DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
270            DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
271            DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
272            DexEvent::PumpFeesCreateFeeSharingConfig(e) => Some(&mut e.metadata),
273            DexEvent::PumpFeesInitializeFeeConfig(e) => Some(&mut e.metadata),
274            DexEvent::PumpFeesResetFeeSharingConfig(e) => Some(&mut e.metadata),
275            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => Some(&mut e.metadata),
276            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => Some(&mut e.metadata),
277            DexEvent::PumpFeesUpdateAdmin(e) => Some(&mut e.metadata),
278            DexEvent::PumpFeesUpdateFeeConfig(e) => Some(&mut e.metadata),
279            DexEvent::PumpFeesUpdateFeeShares(e) => Some(&mut e.metadata),
280            DexEvent::PumpFeesUpsertFeeTiers(e) => Some(&mut e.metadata),
281            DexEvent::PumpFunMigrateBondingCurveCreator(e) => Some(&mut e.metadata),
282            DexEvent::PumpFunGlobalAccount(e) => Some(&mut e.metadata),
283            DexEvent::PumpFunBondingCurveAccount(e) => Some(&mut e.metadata),
284            DexEvent::PumpFunFeeConfigAccount(e) => Some(&mut e.metadata),
285            DexEvent::PumpFunSharingConfigAccount(e) => Some(&mut e.metadata),
286            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
287            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
288            DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
289            DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
290            DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
291            DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
292            DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
293            DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
294            DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
295            DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
296            DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
297            DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
298            DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
299            DexEvent::BonkTrade(e) => Some(&mut e.metadata),
300            DexEvent::BonkPoolCreate(e) => Some(&mut e.metadata),
301            DexEvent::BonkMigrateAmm(e) => Some(&mut e.metadata),
302            DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
303            DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
304            DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
305            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
306            DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
307            DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
308            DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
309            DexEvent::RaydiumClmmLiquidityChange(e) => Some(&mut e.metadata),
310            DexEvent::RaydiumClmmConfigChange(e) => Some(&mut e.metadata),
311            DexEvent::RaydiumClmmCreatePersonalPosition(e) => Some(&mut e.metadata),
312            DexEvent::RaydiumClmmLiquidityCalculate(e) => Some(&mut e.metadata),
313            DexEvent::RaydiumClmmOpenLimitOrder(e) => Some(&mut e.metadata),
314            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => Some(&mut e.metadata),
315            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => Some(&mut e.metadata),
316            DexEvent::RaydiumClmmSettleLimitOrder(e) => Some(&mut e.metadata),
317            DexEvent::RaydiumClmmUpdateRewardInfos(e) => Some(&mut e.metadata),
318            DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
319            DexEvent::RaydiumClmmAmmConfigAccount(e) => Some(&mut e.metadata),
320            DexEvent::RaydiumClmmPoolStateAccount(e) => Some(&mut e.metadata),
321            DexEvent::RaydiumClmmTickArrayStateAccount(e) => Some(&mut e.metadata),
322            DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
323            DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
324            DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
325            DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
326            DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
327            DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
328            DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
329            DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
330            DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
331            DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
332            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
333            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
334            DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
335            DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
336            DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
337            DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
338            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
339            DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
340            DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
341            DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
342            DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
343            DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
344            DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
345            DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
346            DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
347            DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
348            DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
349            DexEvent::TokenInfo(e) => Some(&mut e.metadata),
350            DexEvent::TokenAccount(e) => Some(&mut e.metadata),
351            DexEvent::NonceAccount(e) => Some(&mut e.metadata),
352            DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
353            DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
354            DexEvent::BlockMeta(e) => Some(&mut e.metadata),
355            DexEvent::Error(_) => None,
356        }
357    }
358}