Skip to main content

sol_parser_sdk/core/events/
enum_impl.rs

1use super::types::*;
2use super::PumpRouteIntentEvent;
3use once_cell::sync::Lazy;
4use serde::{Deserialize, Serialize};
5use solana_sdk::signature::Signature;
6
7// ====================== 统一的 DEX 事件枚举 ======================
8
9/// 统一的 DEX 事件枚举 - 参考 sol-dex-shreds 的做法
10#[derive(Debug, Clone, Serialize, Deserialize)]
11#[non_exhaustive]
12pub enum DexEvent {
13    RawAccountSnapshot(Box<crate::accounts::liquidity_snapshot::RawAccountSnapshotEvent>),
14    LiquidityAccountSnapshot(
15        Box<crate::accounts::liquidity_snapshot::LiquidityAccountSnapshotEvent>,
16    ),
17    // PumpFun 事件
18    PumpFunCreate(PumpFunCreateTokenEvent),     // - 已对接
19    PumpFunCreateV2(PumpFunCreateV2TokenEvent), // - 已对接 (CreateV2 / Mayhem)
20    PumpFunTrade(PumpFunTradeEvent),            // - 已对接 (统一交易事件,包含所有交易类型)
21    PumpFunBuy(PumpFunTradeEvent),              // - 已对接 (仅买入事件,用于过滤)
22    PumpFunSell(PumpFunTradeEvent),             // - 已对接 (仅卖出事件,用于过滤)
23    PumpFunBuyExactSolIn(PumpFunTradeEvent),    // - 已对接 (精确SOL买入事件,用于过滤)
24    PumpFunMigrate(PumpFunMigrateEvent),        // - 已对接
25    /// Pump fees:`CreateFeeSharingConfigEvent`(`pfeeUx...`,见 `idl/pump_fees.json`)
26    PumpFeesCreateFeeSharingConfig(PumpFeesCreateFeeSharingConfigEvent),
27    PumpFeesInitializeFeeConfig(PumpFeesInitializeFeeConfigEvent),
28    PumpFeesResetFeeSharingConfig(PumpFeesResetFeeSharingConfigEvent),
29    PumpFeesRevokeFeeSharingAuthority(PumpFeesRevokeFeeSharingAuthorityEvent),
30    PumpFeesTransferFeeSharingAuthority(PumpFeesTransferFeeSharingAuthorityEvent),
31    PumpFeesUpdateAdmin(PumpFeesUpdateAdminEvent),
32    PumpFeesUpdateFeeConfig(PumpFeesUpdateFeeConfigEvent),
33    PumpFeesUpdateFeeShares(PumpFeesUpdateFeeSharesEvent),
34    PumpFeesUpsertFeeTiers(PumpFeesUpsertFeeTiersEvent),
35    /// Pump.fun:曲线 creator 迁移(`migrateBondingCurveCreatorEvent`)
36    PumpFunMigrateBondingCurveCreator(PumpFunMigrateBondingCurveCreatorEvent),
37    PumpFunGlobalAccount(PumpFunGlobalAccountEvent), // - 已对接
38    PumpFunBondingCurveAccount(PumpFunBondingCurveAccountEvent),
39    PumpFunFeeConfigAccount(PumpFunFeeConfigAccountEvent),
40    PumpFunSharingConfigAccount(PumpFunSharingConfigAccountEvent),
41    PumpFunGlobalVolumeAccumulatorAccount(PumpFunGlobalVolumeAccumulatorAccountEvent),
42    PumpFunUserVolumeAccumulatorAccount(PumpFunUserVolumeAccumulatorAccountEvent),
43    PumpSwapTrade(PumpSwapTradeEvent), // - 已对接 (buy/sell/buy_exact_sol_in)
44    PumpSwapBuy(PumpSwapBuyEvent),     // - 已对接 (legacy)
45    PumpSwapSell(PumpSwapSellEvent),   // - 已对接 (legacy)
46    PumpSwapCreatePool(PumpSwapCreatePoolEvent), // - 已对接
47    PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), // - 已对接
48    PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved), // - 已对接
49
50    // Meteora DAMM V2 事件
51    MeteoraDammV2Swap(MeteoraDammV2SwapEvent), // - 已对接
52    MeteoraDammV2ClaimPositionFee(MeteoraDammV2ClaimPositionFeeEvent),
53    MeteoraDammV2ClaimReward(MeteoraDammV2ClaimRewardEvent),
54    MeteoraDlmmClaimReward(MeteoraDlmmClaimRewardEvent),
55    MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), // - 已对接
56    MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent),   // - 已对接
57    MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent),     // - 已对接
58    MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent), // - 已对接
59    MeteoraDammV2InitializePool(MeteoraDammV2InitializePoolEvent), // - 已对接
60    MeteoraDammV2UpdateDelegatePermission(MeteoraDammV2UpdateDelegatePermissionEvent),
61    MeteoraDammV2WithdrawDeadLiquidityReward(MeteoraDammV2WithdrawDeadLiquidityRewardEvent),
62    MeteoraDammV2WithdrawIneligibleReward(MeteoraDammV2WithdrawIneligibleRewardEvent),
63    MeteoraDammV2UpdateRewardFunder(MeteoraDammV2UpdateRewardFunderEvent),
64    MeteoraDammV2UpdateRewardDuration(MeteoraDammV2UpdateRewardDurationEvent),
65    MeteoraDammV2InitializeReward(MeteoraDammV2InitializeRewardEvent),
66    MeteoraDammV2FundReward(MeteoraDammV2FundRewardEvent),
67    MeteoraDammV2CreateConfig(MeteoraDammV2CreateConfigEvent),
68    MeteoraDammV2CreateDynamicConfig(MeteoraDammV2CreateDynamicConfigEvent),
69
70    // Meteora DBC 事件
71    MeteoraDbcSwap(MeteoraDbcSwapEvent),
72    MeteoraDbcInitializePool(MeteoraDbcInitializePoolEvent),
73    MeteoraDbcCurveComplete(MeteoraDbcCurveCompleteEvent),
74
75    // RaydiumLaunchlab 事件
76    RaydiumLaunchlabTrade(RaydiumLaunchlabTradeEvent),
77    RaydiumLaunchlabPoolCreate(RaydiumLaunchlabPoolCreateEvent),
78    RaydiumLaunchlabMigrateAmm(RaydiumLaunchlabMigrateAmmEvent),
79
80    // Raydium CLMM 事件
81    RaydiumClmmSwap(RaydiumClmmSwapEvent),
82    RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
83    RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
84    RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
85    RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
86    RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
87    RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
88    RaydiumClmmLiquidityChange(RaydiumClmmLiquidityChangeEvent),
89    RaydiumClmmConfigChange(RaydiumClmmConfigChangeEvent),
90    RaydiumClmmCreatePersonalPosition(RaydiumClmmCreatePersonalPositionEvent),
91    RaydiumClmmLiquidityCalculate(RaydiumClmmLiquidityCalculateEvent),
92    RaydiumClmmOpenLimitOrder(RaydiumClmmOpenLimitOrderEvent),
93    RaydiumClmmIncreaseLimitOrder(RaydiumClmmIncreaseLimitOrderEvent),
94    RaydiumClmmDecreaseLimitOrder(RaydiumClmmDecreaseLimitOrderEvent),
95    RaydiumClmmSettleLimitOrder(RaydiumClmmSettleLimitOrderEvent),
96    RaydiumClmmUpdateRewardInfos(RaydiumClmmUpdateRewardInfosEvent),
97    RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
98    RaydiumClmmAmmConfigAccount(Box<RaydiumClmmAmmConfigAccountEvent>),
99    RaydiumClmmPoolStateAccount(Box<RaydiumClmmPoolStateAccountEvent>),
100    RaydiumClmmTickArrayStateAccount(Box<RaydiumClmmTickArrayStateAccountEvent>),
101
102    // Raydium CPMM 事件
103    RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
104    RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
105    RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
106    RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
107    RaydiumCpmmAmmConfigAccount(Box<RaydiumCpmmAmmConfigAccountEvent>),
108    RaydiumCpmmPoolStateAccount(Box<RaydiumCpmmPoolStateAccountEvent>),
109    RaydiumCpmmCollectCreatorFee(RaydiumCpmmCollectCreatorFeeEvent),
110    RaydiumCpmmCreatorFeeShareAccount(Box<RaydiumCpmmCreatorFeeShareAccountEvent>),
111
112    // Raydium AMM V4 事件
113    RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
114    RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
115    RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
116    RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
117    RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
118
119    // Orca Whirlpool 事件
120    OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
121    OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
122    OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
123    OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
124    OrcaWhirlpoolAccount(Box<OrcaWhirlpoolAccountEvent>),
125    OrcaPositionAccount(Box<OrcaPositionAccountEvent>),
126    OrcaTickArrayAccount(Box<OrcaTickArrayAccountEvent>),
127    OrcaFeeTierAccount(Box<OrcaFeeTierAccountEvent>),
128    OrcaWhirlpoolsConfigAccount(Box<OrcaWhirlpoolsConfigAccountEvent>),
129
130    // Meteora Pools 事件
131    MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
132    MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
133    MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
134    MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
135    MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
136    MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
137
138    // Meteora DLMM 事件
139    MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
140    MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
141    MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
142    MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
143    MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
144    MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
145    MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
146    MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
147
148    // 账户事件
149    TokenInfo(TokenInfoEvent),       // - 已对接
150    TokenAccount(TokenAccountEvent), // - 已对接
151    NonceAccount(NonceAccountEvent), // - 已对接
152    PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), // - 已对接
153    PumpSwapPoolAccount(PumpSwapPoolAccountEvent), // - 已对接
154
155    // 区块元数据事件
156    BlockMeta(BlockMetaEvent),
157
158    // 错误事件
159    Error(String),
160    PumpFunPostCompleteBuy(PumpFunPostCompleteBuyEvent),
161    PumpFunSweepBondingCurveFee(PumpFunSweepBondingCurveFeeEvent),
162    PumpFunComplete(PumpFunCompleteEvent),
163    PumpSwapSweepPoolFee(PumpSwapSweepPoolFeeEvent),
164    /// Pre-execution route intent; never a confirmed trade.
165    PumpRouteIntent(Box<PumpRouteIntentEvent>),
166    RawInstruction(Box<super::RawInstructionEvent>),
167}
168
169// 静态默认 EventMetadata,用于 Error 事件
170static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
171    signature: Signature::from([0u8; 64]),
172    slot: 0,
173    tx_index: 0,
174    block_time_us: 0,
175    grpc_recv_us: 0,
176    recent_blockhash: None,
177});
178
179impl DexEvent {
180    /// 获取事件的元数据
181    pub fn metadata(&self) -> &EventMetadata {
182        match self {
183            DexEvent::PumpRouteIntent(e) => &e.metadata,
184            DexEvent::RawInstruction(e) => &e.metadata,
185            // PumpFun 事件
186            DexEvent::PumpFunCreate(e) => &e.metadata,
187            DexEvent::PumpFunCreateV2(e) => &e.metadata,
188            DexEvent::PumpFunTrade(e) => &e.metadata,
189            DexEvent::PumpFunBuy(e) => &e.metadata,
190            DexEvent::PumpFunSell(e) => &e.metadata,
191            DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
192            DexEvent::PumpFunMigrate(e) => &e.metadata,
193            DexEvent::PumpFeesCreateFeeSharingConfig(e) => &e.metadata,
194            DexEvent::PumpFeesInitializeFeeConfig(e) => &e.metadata,
195            DexEvent::PumpFeesResetFeeSharingConfig(e) => &e.metadata,
196            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => &e.metadata,
197            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => &e.metadata,
198            DexEvent::PumpFeesUpdateAdmin(e) => &e.metadata,
199            DexEvent::PumpFeesUpdateFeeConfig(e) => &e.metadata,
200            DexEvent::PumpFeesUpdateFeeShares(e) => &e.metadata,
201            DexEvent::PumpFeesUpsertFeeTiers(e) => &e.metadata,
202            DexEvent::PumpFunPostCompleteBuy(e) => &e.metadata,
203            DexEvent::PumpFunSweepBondingCurveFee(e) => &e.metadata,
204            DexEvent::PumpFunComplete(e) => &e.metadata,
205            DexEvent::PumpSwapSweepPoolFee(e) => &e.metadata,
206            DexEvent::PumpFunMigrateBondingCurveCreator(e) => &e.metadata,
207            DexEvent::PumpFunGlobalAccount(e) => &e.metadata,
208            DexEvent::PumpFunBondingCurveAccount(e) => &e.metadata,
209            DexEvent::PumpFunFeeConfigAccount(e) => &e.metadata,
210            DexEvent::PumpFunSharingConfigAccount(e) => &e.metadata,
211            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => &e.metadata,
212            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => &e.metadata,
213
214            // PumpSwap 事件
215            DexEvent::PumpSwapTrade(e) => &e.metadata,
216            DexEvent::PumpSwapBuy(e) => &e.metadata,
217            DexEvent::PumpSwapSell(e) => &e.metadata,
218            DexEvent::PumpSwapCreatePool(e) => &e.metadata,
219            DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
220            DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
221
222            // Meteora DAMM V2 事件
223            DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
224            DexEvent::MeteoraDammV2ClaimPositionFee(e) => &e.metadata,
225            DexEvent::MeteoraDammV2ClaimReward(e) => &e.metadata,
226            DexEvent::MeteoraDlmmClaimReward(e) => &e.metadata,
227            DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
228            DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
229            DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
230            DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
231            DexEvent::MeteoraDammV2InitializePool(e) => &e.metadata,
232            DexEvent::MeteoraDammV2UpdateDelegatePermission(e) => &e.metadata,
233            DexEvent::MeteoraDammV2WithdrawDeadLiquidityReward(e) => &e.metadata,
234            DexEvent::MeteoraDammV2WithdrawIneligibleReward(e) => &e.metadata,
235            DexEvent::MeteoraDammV2UpdateRewardFunder(e) => &e.metadata,
236            DexEvent::MeteoraDammV2UpdateRewardDuration(e) => &e.metadata,
237            DexEvent::MeteoraDammV2InitializeReward(e) => &e.metadata,
238            DexEvent::MeteoraDammV2FundReward(e) => &e.metadata,
239            DexEvent::MeteoraDammV2CreateConfig(e) => &e.metadata,
240            DexEvent::MeteoraDammV2CreateDynamicConfig(e) => &e.metadata,
241            DexEvent::MeteoraDbcSwap(e) => &e.metadata,
242            DexEvent::MeteoraDbcInitializePool(e) => &e.metadata,
243            DexEvent::MeteoraDbcCurveComplete(e) => &e.metadata,
244
245            // RaydiumLaunchlab 事件
246            DexEvent::RaydiumLaunchlabTrade(e) => &e.metadata,
247            DexEvent::RaydiumLaunchlabPoolCreate(e) => &e.metadata,
248            DexEvent::RaydiumLaunchlabMigrateAmm(e) => &e.metadata,
249
250            // Raydium CLMM 事件
251            DexEvent::RaydiumClmmSwap(e) => &e.metadata,
252            DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
253            DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
254            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
255            DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
256            DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
257            DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
258            DexEvent::RaydiumClmmLiquidityChange(e) => &e.metadata,
259            DexEvent::RaydiumClmmConfigChange(e) => &e.metadata,
260            DexEvent::RaydiumClmmCreatePersonalPosition(e) => &e.metadata,
261            DexEvent::RaydiumClmmLiquidityCalculate(e) => &e.metadata,
262            DexEvent::RaydiumClmmOpenLimitOrder(e) => &e.metadata,
263            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => &e.metadata,
264            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => &e.metadata,
265            DexEvent::RaydiumClmmSettleLimitOrder(e) => &e.metadata,
266            DexEvent::RaydiumClmmUpdateRewardInfos(e) => &e.metadata,
267            DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
268            DexEvent::RaydiumClmmAmmConfigAccount(e) => &e.metadata,
269            DexEvent::RaydiumClmmPoolStateAccount(e) => &e.metadata,
270            DexEvent::RaydiumClmmTickArrayStateAccount(e) => &e.metadata,
271
272            // Raydium CPMM 事件
273            DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
274            DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
275            DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
276            DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
277            DexEvent::RaydiumCpmmAmmConfigAccount(e) => &e.metadata,
278            DexEvent::RaydiumCpmmPoolStateAccount(e) => &e.metadata,
279            DexEvent::RaydiumCpmmCollectCreatorFee(e) => &e.metadata,
280            DexEvent::RaydiumCpmmCreatorFeeShareAccount(e) => &e.metadata,
281
282            // Raydium AMM V4 事件
283            DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
284            DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
285            DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
286            DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
287            DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
288
289            // Orca Whirlpool 事件
290            DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
291            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
292            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
293            DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
294            DexEvent::OrcaWhirlpoolAccount(e) => &e.metadata,
295            DexEvent::OrcaPositionAccount(e) => &e.metadata,
296            DexEvent::OrcaTickArrayAccount(e) => &e.metadata,
297            DexEvent::LiquidityAccountSnapshot(e) => &e.metadata,
298            DexEvent::RawAccountSnapshot(e) => &e.metadata,
299            DexEvent::OrcaFeeTierAccount(e) => &e.metadata,
300            DexEvent::OrcaWhirlpoolsConfigAccount(e) => &e.metadata,
301
302            // Meteora Pools 事件
303            DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
304            DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
305            DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
306            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
307            DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
308            DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
309
310            // Meteora DLMM 事件
311            DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
312            DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
313            DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
314            DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
315            DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
316            DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
317            DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
318            DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
319
320            // 账户事件
321            DexEvent::TokenInfo(e) => &e.metadata,
322            DexEvent::TokenAccount(e) => &e.metadata,
323            DexEvent::NonceAccount(e) => &e.metadata,
324            DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
325            DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
326
327            // 区块元数据事件
328            DexEvent::BlockMeta(e) => &e.metadata,
329
330            // 错误事件 - 返回默认元数据
331            DexEvent::Error(_) => &DEFAULT_METADATA,
332        }
333    }
334
335    /// Mutable metadata for filling shared fields (e.g. recent_blockhash). Returns None for Error variant.
336    pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
337        match self {
338            DexEvent::PumpRouteIntent(e) => Some(&mut e.metadata),
339            DexEvent::RawInstruction(e) => Some(&mut e.metadata),
340            DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
341            DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
342            DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
343            DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
344            DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
345            DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
346            DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
347            DexEvent::PumpFeesCreateFeeSharingConfig(e) => Some(&mut e.metadata),
348            DexEvent::PumpFeesInitializeFeeConfig(e) => Some(&mut e.metadata),
349            DexEvent::PumpFeesResetFeeSharingConfig(e) => Some(&mut e.metadata),
350            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => Some(&mut e.metadata),
351            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => Some(&mut e.metadata),
352            DexEvent::PumpFeesUpdateAdmin(e) => Some(&mut e.metadata),
353            DexEvent::PumpFeesUpdateFeeConfig(e) => Some(&mut e.metadata),
354            DexEvent::PumpFeesUpdateFeeShares(e) => Some(&mut e.metadata),
355            DexEvent::PumpFeesUpsertFeeTiers(e) => Some(&mut e.metadata),
356            DexEvent::PumpFunPostCompleteBuy(e) => Some(&mut e.metadata),
357            DexEvent::PumpFunSweepBondingCurveFee(e) => Some(&mut e.metadata),
358            DexEvent::PumpFunComplete(e) => Some(&mut e.metadata),
359            DexEvent::PumpSwapSweepPoolFee(e) => Some(&mut e.metadata),
360            DexEvent::PumpFunMigrateBondingCurveCreator(e) => Some(&mut e.metadata),
361            DexEvent::PumpFunGlobalAccount(e) => Some(&mut e.metadata),
362            DexEvent::PumpFunBondingCurveAccount(e) => Some(&mut e.metadata),
363            DexEvent::PumpFunFeeConfigAccount(e) => Some(&mut e.metadata),
364            DexEvent::PumpFunSharingConfigAccount(e) => Some(&mut e.metadata),
365            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
366            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
367            DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
368            DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
369            DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
370            DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
371            DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
372            DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
373            DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
374            DexEvent::MeteoraDammV2ClaimPositionFee(e) => Some(&mut e.metadata),
375            DexEvent::MeteoraDammV2ClaimReward(e) => Some(&mut e.metadata),
376            DexEvent::MeteoraDlmmClaimReward(e) => Some(&mut e.metadata),
377            DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
378            DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
379            DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
380            DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
381            DexEvent::MeteoraDammV2InitializePool(e) => Some(&mut e.metadata),
382            DexEvent::MeteoraDammV2UpdateDelegatePermission(e) => Some(&mut e.metadata),
383            DexEvent::MeteoraDammV2WithdrawDeadLiquidityReward(e) => Some(&mut e.metadata),
384            DexEvent::MeteoraDammV2WithdrawIneligibleReward(e) => Some(&mut e.metadata),
385            DexEvent::MeteoraDammV2UpdateRewardFunder(e) => Some(&mut e.metadata),
386            DexEvent::MeteoraDammV2UpdateRewardDuration(e) => Some(&mut e.metadata),
387            DexEvent::MeteoraDammV2InitializeReward(e) => Some(&mut e.metadata),
388            DexEvent::MeteoraDammV2FundReward(e) => Some(&mut e.metadata),
389            DexEvent::MeteoraDammV2CreateConfig(e) => Some(&mut e.metadata),
390            DexEvent::MeteoraDammV2CreateDynamicConfig(e) => Some(&mut e.metadata),
391            DexEvent::MeteoraDbcSwap(e) => Some(&mut e.metadata),
392            DexEvent::MeteoraDbcInitializePool(e) => Some(&mut e.metadata),
393            DexEvent::MeteoraDbcCurveComplete(e) => Some(&mut e.metadata),
394            DexEvent::RaydiumLaunchlabTrade(e) => Some(&mut e.metadata),
395            DexEvent::RaydiumLaunchlabPoolCreate(e) => Some(&mut e.metadata),
396            DexEvent::RaydiumLaunchlabMigrateAmm(e) => Some(&mut e.metadata),
397            DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
398            DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
399            DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
400            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
401            DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
402            DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
403            DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
404            DexEvent::RaydiumClmmLiquidityChange(e) => Some(&mut e.metadata),
405            DexEvent::RaydiumClmmConfigChange(e) => Some(&mut e.metadata),
406            DexEvent::RaydiumClmmCreatePersonalPosition(e) => Some(&mut e.metadata),
407            DexEvent::RaydiumClmmLiquidityCalculate(e) => Some(&mut e.metadata),
408            DexEvent::RaydiumClmmOpenLimitOrder(e) => Some(&mut e.metadata),
409            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => Some(&mut e.metadata),
410            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => Some(&mut e.metadata),
411            DexEvent::RaydiumClmmSettleLimitOrder(e) => Some(&mut e.metadata),
412            DexEvent::RaydiumClmmUpdateRewardInfos(e) => Some(&mut e.metadata),
413            DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
414            DexEvent::RaydiumClmmAmmConfigAccount(e) => Some(&mut e.metadata),
415            DexEvent::RaydiumClmmPoolStateAccount(e) => Some(&mut e.metadata),
416            DexEvent::RaydiumClmmTickArrayStateAccount(e) => Some(&mut e.metadata),
417            DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
418            DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
419            DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
420            DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
421            DexEvent::RaydiumCpmmAmmConfigAccount(e) => Some(&mut e.metadata),
422            DexEvent::RaydiumCpmmPoolStateAccount(e) => Some(&mut e.metadata),
423            DexEvent::RaydiumCpmmCollectCreatorFee(e) => Some(&mut e.metadata),
424            DexEvent::RaydiumCpmmCreatorFeeShareAccount(e) => Some(&mut e.metadata),
425            DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
426            DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
427            DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
428            DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
429            DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
430            DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
431            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
432            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
433            DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
434            DexEvent::OrcaWhirlpoolAccount(e) => Some(&mut e.metadata),
435            DexEvent::OrcaPositionAccount(e) => Some(&mut e.metadata),
436            DexEvent::OrcaTickArrayAccount(e) => Some(&mut e.metadata),
437            DexEvent::LiquidityAccountSnapshot(e) => Some(&mut e.metadata),
438            DexEvent::RawAccountSnapshot(e) => Some(&mut e.metadata),
439            DexEvent::OrcaFeeTierAccount(e) => Some(&mut e.metadata),
440            DexEvent::OrcaWhirlpoolsConfigAccount(e) => Some(&mut e.metadata),
441            DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
442            DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
443            DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
444            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
445            DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
446            DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
447            DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
448            DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
449            DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
450            DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
451            DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
452            DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
453            DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
454            DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
455            DexEvent::TokenInfo(e) => Some(&mut e.metadata),
456            DexEvent::TokenAccount(e) => Some(&mut e.metadata),
457            DexEvent::NonceAccount(e) => Some(&mut e.metadata),
458            DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
459            DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
460            DexEvent::BlockMeta(e) => Some(&mut e.metadata),
461            DexEvent::Error(_) => None,
462        }
463    }
464}