1use once_cell::sync::Lazy;
2use serde::{Deserialize, Serialize};
3use solana_sdk::signature::Signature;
4use super::types::*;
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), PumpSwapTrade(PumpSwapTradeEvent), PumpSwapBuy(PumpSwapBuyEvent), PumpSwapSell(PumpSwapSellEvent), PumpSwapCreatePool(PumpSwapCreatePoolEvent), PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved), MeteoraDammV2Swap(MeteoraDammV2SwapEvent), MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent), MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent), MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent), BonkTrade(BonkTradeEvent),
37 BonkPoolCreate(BonkPoolCreateEvent),
38 BonkMigrateAmm(BonkMigrateAmmEvent),
39
40 RaydiumClmmSwap(RaydiumClmmSwapEvent),
42 RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
43 RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
44 RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
45 RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
46 RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
47 RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
48 RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
49
50 RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
52 RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
53 RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
54 RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
55
56 RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
58 RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
59 RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
60 RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
61 RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
62
63 OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
65 OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
66 OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
67 OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
68
69 MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
71 MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
72 MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
73 MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
74 MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
75 MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
76
77 MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
79 MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
80 MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
81 MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
82 MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
83 MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
84 MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
85 MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
86
87 TokenInfo(TokenInfoEvent), TokenAccount(TokenAccountEvent), NonceAccount(NonceAccountEvent), PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), PumpSwapPoolAccount(PumpSwapPoolAccountEvent), BlockMeta(BlockMetaEvent),
96
97 Error(String),
99}
100
101static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
103 signature: Signature::from([0u8; 64]),
104 slot: 0,
105 tx_index: 0,
106 block_time_us: 0,
107 grpc_recv_us: 0,
108 recent_blockhash: None,
109});
110
111impl DexEvent {
112 pub fn metadata(&self) -> &EventMetadata {
114 match self {
115 DexEvent::PumpFunCreate(e) => &e.metadata,
117 DexEvent::PumpFunCreateV2(e) => &e.metadata,
118 DexEvent::PumpFunTrade(e) => &e.metadata,
119 DexEvent::PumpFunBuy(e) => &e.metadata,
120 DexEvent::PumpFunSell(e) => &e.metadata,
121 DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
122 DexEvent::PumpFunMigrate(e) => &e.metadata,
123
124 DexEvent::PumpSwapTrade(e) => &e.metadata,
126 DexEvent::PumpSwapBuy(e) => &e.metadata,
127 DexEvent::PumpSwapSell(e) => &e.metadata,
128 DexEvent::PumpSwapCreatePool(e) => &e.metadata,
129 DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
130 DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
131
132 DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
134 DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
135 DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
136 DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
137 DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
138
139 DexEvent::BonkTrade(e) => &e.metadata,
141 DexEvent::BonkPoolCreate(e) => &e.metadata,
142 DexEvent::BonkMigrateAmm(e) => &e.metadata,
143
144 DexEvent::RaydiumClmmSwap(e) => &e.metadata,
146 DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
147 DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
148 DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
149 DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
150 DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
151 DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
152 DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
153
154 DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
156 DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
157 DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
158 DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
159
160 DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
162 DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
163 DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
164 DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
165 DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
166
167 DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
169 DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
170 DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
171 DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
172
173 DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
175 DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
176 DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
177 DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
178 DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
179 DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
180
181 DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
183 DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
184 DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
185 DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
186 DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
187 DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
188 DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
189 DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
190
191 DexEvent::TokenInfo(e) => &e.metadata,
193 DexEvent::TokenAccount(e) => &e.metadata,
194 DexEvent::NonceAccount(e) => &e.metadata,
195 DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
196 DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
197
198 DexEvent::BlockMeta(e) => &e.metadata,
200
201 DexEvent::Error(_) => &DEFAULT_METADATA,
203 }
204 }
205
206 pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
208 match self {
209 DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
210 DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
211 DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
212 DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
213 DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
214 DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
215 DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
216 DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
217 DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
218 DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
219 DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
220 DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
221 DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
222 DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
223 DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
224 DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
225 DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
226 DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
227 DexEvent::BonkTrade(e) => Some(&mut e.metadata),
228 DexEvent::BonkPoolCreate(e) => Some(&mut e.metadata),
229 DexEvent::BonkMigrateAmm(e) => Some(&mut e.metadata),
230 DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
231 DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
232 DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
233 DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
234 DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
235 DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
236 DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
237 DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
238 DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
239 DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
240 DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
241 DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
242 DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
243 DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
244 DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
245 DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
246 DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
247 DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
248 DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
249 DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
250 DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
251 DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
252 DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
253 DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
254 DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
255 DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
256 DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
257 DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
258 DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
259 DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
260 DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
261 DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
262 DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
263 DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
264 DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
265 DexEvent::TokenInfo(e) => Some(&mut e.metadata),
266 DexEvent::TokenAccount(e) => Some(&mut e.metadata),
267 DexEvent::NonceAccount(e) => Some(&mut e.metadata),
268 DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
269 DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
270 DexEvent::BlockMeta(e) => Some(&mut e.metadata),
271 DexEvent::Error(_) => None,
272 }
273 }
274}