1use super::types::*;
2use once_cell::sync::Lazy;
3use serde::{Deserialize, Serialize};
4use solana_sdk::signature::Signature;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum DexEvent {
11 PumpFunCreate(PumpFunCreateTokenEvent), PumpFunCreateV2(PumpFunCreateV2TokenEvent), PumpFunTrade(PumpFunTradeEvent), PumpFunBuy(PumpFunTradeEvent), PumpFunSell(PumpFunTradeEvent), PumpFunBuyExactSolIn(PumpFunTradeEvent), PumpFunMigrate(PumpFunMigrateEvent), 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 PumpFunMigrateBondingCurveCreator(PumpFunMigrateBondingCurveCreatorEvent),
31 PumpFunGlobalAccount(PumpFunGlobalAccountEvent), PumpSwapTrade(PumpSwapTradeEvent), PumpSwapBuy(PumpSwapBuyEvent), PumpSwapSell(PumpSwapSellEvent), PumpSwapCreatePool(PumpSwapCreatePoolEvent), PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved), MeteoraDammV2Swap(MeteoraDammV2SwapEvent), MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent), MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent), MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent), BonkTrade(BonkTradeEvent),
48 BonkPoolCreate(BonkPoolCreateEvent),
49 BonkMigrateAmm(BonkMigrateAmmEvent),
50
51 RaydiumClmmSwap(RaydiumClmmSwapEvent),
53 RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
54 RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
55 RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
56 RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
57 RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
58 RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
59 RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
60
61 RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
63 RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
64 RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
65 RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
66
67 RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
69 RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
70 RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
71 RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
72 RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
73
74 OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
76 OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
77 OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
78 OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
79
80 MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
82 MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
83 MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
84 MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
85 MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
86 MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
87
88 MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
90 MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
91 MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
92 MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
93 MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
94 MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
95 MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
96 MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
97
98 TokenInfo(TokenInfoEvent), TokenAccount(TokenAccountEvent), NonceAccount(NonceAccountEvent), PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), PumpSwapPoolAccount(PumpSwapPoolAccountEvent), BlockMeta(BlockMetaEvent),
107
108 Error(String),
110}
111
112static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
114 signature: Signature::from([0u8; 64]),
115 slot: 0,
116 tx_index: 0,
117 block_time_us: 0,
118 grpc_recv_us: 0,
119 recent_blockhash: None,
120});
121
122impl DexEvent {
123 pub fn metadata(&self) -> &EventMetadata {
125 match self {
126 DexEvent::PumpFunCreate(e) => &e.metadata,
128 DexEvent::PumpFunCreateV2(e) => &e.metadata,
129 DexEvent::PumpFunTrade(e) => &e.metadata,
130 DexEvent::PumpFunBuy(e) => &e.metadata,
131 DexEvent::PumpFunSell(e) => &e.metadata,
132 DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
133 DexEvent::PumpFunMigrate(e) => &e.metadata,
134 DexEvent::PumpFeesCreateFeeSharingConfig(e) => &e.metadata,
135 DexEvent::PumpFeesInitializeFeeConfig(e) => &e.metadata,
136 DexEvent::PumpFeesResetFeeSharingConfig(e) => &e.metadata,
137 DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => &e.metadata,
138 DexEvent::PumpFeesTransferFeeSharingAuthority(e) => &e.metadata,
139 DexEvent::PumpFeesUpdateAdmin(e) => &e.metadata,
140 DexEvent::PumpFeesUpdateFeeConfig(e) => &e.metadata,
141 DexEvent::PumpFeesUpdateFeeShares(e) => &e.metadata,
142 DexEvent::PumpFeesUpsertFeeTiers(e) => &e.metadata,
143 DexEvent::PumpFunMigrateBondingCurveCreator(e) => &e.metadata,
144 DexEvent::PumpFunGlobalAccount(e) => &e.metadata,
145
146 DexEvent::PumpSwapTrade(e) => &e.metadata,
148 DexEvent::PumpSwapBuy(e) => &e.metadata,
149 DexEvent::PumpSwapSell(e) => &e.metadata,
150 DexEvent::PumpSwapCreatePool(e) => &e.metadata,
151 DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
152 DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
153
154 DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
156 DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
157 DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
158 DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
159 DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
160
161 DexEvent::BonkTrade(e) => &e.metadata,
163 DexEvent::BonkPoolCreate(e) => &e.metadata,
164 DexEvent::BonkMigrateAmm(e) => &e.metadata,
165
166 DexEvent::RaydiumClmmSwap(e) => &e.metadata,
168 DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
169 DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
170 DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
171 DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
172 DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
173 DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
174 DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
175
176 DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
178 DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
179 DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
180 DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
181
182 DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
184 DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
185 DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
186 DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
187 DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
188
189 DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
191 DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
192 DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
193 DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
194
195 DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
197 DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
198 DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
199 DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
200 DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
201 DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
202
203 DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
205 DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
206 DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
207 DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
208 DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
209 DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
210 DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
211 DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
212
213 DexEvent::TokenInfo(e) => &e.metadata,
215 DexEvent::TokenAccount(e) => &e.metadata,
216 DexEvent::NonceAccount(e) => &e.metadata,
217 DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
218 DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
219
220 DexEvent::BlockMeta(e) => &e.metadata,
222
223 DexEvent::Error(_) => &DEFAULT_METADATA,
225 }
226 }
227
228 pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
230 match self {
231 DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
232 DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
233 DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
234 DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
235 DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
236 DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
237 DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
238 DexEvent::PumpFeesCreateFeeSharingConfig(e) => Some(&mut e.metadata),
239 DexEvent::PumpFeesInitializeFeeConfig(e) => Some(&mut e.metadata),
240 DexEvent::PumpFeesResetFeeSharingConfig(e) => Some(&mut e.metadata),
241 DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => Some(&mut e.metadata),
242 DexEvent::PumpFeesTransferFeeSharingAuthority(e) => Some(&mut e.metadata),
243 DexEvent::PumpFeesUpdateAdmin(e) => Some(&mut e.metadata),
244 DexEvent::PumpFeesUpdateFeeConfig(e) => Some(&mut e.metadata),
245 DexEvent::PumpFeesUpdateFeeShares(e) => Some(&mut e.metadata),
246 DexEvent::PumpFeesUpsertFeeTiers(e) => Some(&mut e.metadata),
247 DexEvent::PumpFunMigrateBondingCurveCreator(e) => Some(&mut e.metadata),
248 DexEvent::PumpFunGlobalAccount(e) => Some(&mut e.metadata),
249 DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
250 DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
251 DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
252 DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
253 DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
254 DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
255 DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
256 DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
257 DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
258 DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
259 DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
260 DexEvent::BonkTrade(e) => Some(&mut e.metadata),
261 DexEvent::BonkPoolCreate(e) => Some(&mut e.metadata),
262 DexEvent::BonkMigrateAmm(e) => Some(&mut e.metadata),
263 DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
264 DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
265 DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
266 DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
267 DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
268 DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
269 DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
270 DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
271 DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
272 DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
273 DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
274 DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
275 DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
276 DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
277 DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
278 DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
279 DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
280 DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
281 DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
282 DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
283 DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
284 DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
285 DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
286 DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
287 DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
288 DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
289 DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
290 DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
291 DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
292 DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
293 DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
294 DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
295 DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
296 DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
297 DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
298 DexEvent::TokenInfo(e) => Some(&mut e.metadata),
299 DexEvent::TokenAccount(e) => Some(&mut e.metadata),
300 DexEvent::NonceAccount(e) => Some(&mut e.metadata),
301 DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
302 DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
303 DexEvent::BlockMeta(e) => Some(&mut e.metadata),
304 DexEvent::Error(_) => None,
305 }
306 }
307}