refactor: streaming core optimization and code deduplication

- Remove 'wide' and 'simd_utils.rs', rely on compiler auto-vectorization.
- Deduplicate swap parsing in 'types.rs' and 'merger_event.rs' using generic traits and local macros.
- Improve signature cleanup in 'global_state.rs' to avoid large heap allocations.
- Replace manual metadata accessors in 'traits.rs' with a macro for all variants.
- Remove unused types (ParseResult, ProtocolInfo) and legacy commented code.
- Fix Clippy lints (is_empty, copied) and restore missing trait imports.
This commit is contained in:
Estereg
2026-03-07 07:16:30 +00:00
parent 0c369e23a8
commit 6493f9d922
9 changed files with 301 additions and 929 deletions
@@ -49,16 +49,11 @@ impl GlobalState {
return; // Another thread is cleaning up
}
// Collect signatures to remove (random selection for simplicity)
let mut signatures_to_remove: Vec<Signature> = self.signature_data.iter()
// Collect only the batch we need to remove (avoid allocating full list)
let signatures_to_remove: Vec<Signature> = self.signature_data.iter()
.take(CLEANUP_BATCH_SIZE)
.map(|entry| *entry.key())
.collect();
if signatures_to_remove.len() <= MAX_SIGNATURES {
return; // Race condition, already cleaned up
}
signatures_to_remove.truncate(CLEANUP_BATCH_SIZE);
// Remove old signatures atomically
for signature in signatures_to_remove {
+80 -116
View File
@@ -90,122 +90,86 @@ pub enum DexEvent {
SetComputeUnitPriceEvent(SetComputeUnitPriceEvent),
}
impl DexEvent {
pub fn metadata(&self) -> &EventMetadata {
match self {
DexEvent::BonkTradeEvent(e) => &e.metadata,
DexEvent::BonkPoolCreateEvent(e) => &e.metadata,
DexEvent::BonkMigrateToAmmEvent(e) => &e.metadata,
DexEvent::BonkMigrateToCpswapEvent(e) => &e.metadata,
DexEvent::BonkPoolStateAccountEvent(e) => &e.metadata,
DexEvent::BonkGlobalConfigAccountEvent(e) => &e.metadata,
DexEvent::BonkPlatformConfigAccountEvent(e) => &e.metadata,
DexEvent::PumpFunCreateTokenEvent(e) => &e.metadata,
DexEvent::PumpFunCreateV2TokenEvent(e) => &e.metadata,
DexEvent::PumpFunTradeEvent(e) => &e.metadata,
DexEvent::PumpFunMigrateEvent(e) => &e.metadata,
DexEvent::PumpFunBondingCurveAccountEvent(e) => &e.metadata,
DexEvent::PumpFunGlobalAccountEvent(e) => &e.metadata,
DexEvent::PumpSwapBuyEvent(e) => &e.metadata,
DexEvent::PumpSwapSellEvent(e) => &e.metadata,
DexEvent::PumpSwapCreatePoolEvent(e) => &e.metadata,
DexEvent::PumpSwapDepositEvent(e) => &e.metadata,
DexEvent::PumpSwapWithdrawEvent(e) => &e.metadata,
DexEvent::PumpSwapGlobalConfigAccountEvent(e) => &e.metadata,
DexEvent::PumpSwapPoolAccountEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4SwapEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4DepositEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4WithdrawEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4Initialize2Event(e) => &e.metadata,
DexEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmSwapEvent(e) => &e.metadata,
DexEvent::RaydiumClmmSwapV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmClosePositionEvent(e) => &e.metadata,
DexEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmCreatePoolEvent(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPositionV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmInitializeEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmPoolStateAccountEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2SwapEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2Swap2Event(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &e.metadata,
DexEvent::TokenAccountEvent(e) => &e.metadata,
DexEvent::NonceAccountEvent(e) => &e.metadata,
DexEvent::TokenInfoEvent(e) => &e.metadata,
DexEvent::BlockMetaEvent(e) => &e.metadata,
DexEvent::SetComputeUnitLimitEvent(e) => &e.metadata,
DexEvent::SetComputeUnitPriceEvent(e) => &e.metadata,
}
}
/// Macro to generate metadata accessors for all DexEvent variants
macro_rules! impl_dex_event_metadata {
($($variant:ident),* $(,)?) => {
impl DexEvent {
pub fn metadata(&self) -> &EventMetadata {
match self {
$(DexEvent::$variant(e) => &e.metadata,)*
}
}
pub fn metadata_mut(&mut self) -> &mut EventMetadata {
match self {
DexEvent::BonkTradeEvent(e) => &mut e.metadata,
DexEvent::BonkPoolCreateEvent(e) => &mut e.metadata,
DexEvent::BonkMigrateToAmmEvent(e) => &mut e.metadata,
DexEvent::BonkMigrateToCpswapEvent(e) => &mut e.metadata,
DexEvent::BonkPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::BonkGlobalConfigAccountEvent(e) => &mut e.metadata,
DexEvent::BonkPlatformConfigAccountEvent(e) => &mut e.metadata,
DexEvent::PumpFunCreateTokenEvent(e) => &mut e.metadata,
DexEvent::PumpFunCreateV2TokenEvent(e) => &mut e.metadata,
DexEvent::PumpFunTradeEvent(e) => &mut e.metadata,
DexEvent::PumpFunMigrateEvent(e) => &mut e.metadata,
DexEvent::PumpFunBondingCurveAccountEvent(e) => &mut e.metadata,
DexEvent::PumpFunGlobalAccountEvent(e) => &mut e.metadata,
DexEvent::PumpSwapBuyEvent(e) => &mut e.metadata,
DexEvent::PumpSwapSellEvent(e) => &mut e.metadata,
DexEvent::PumpSwapCreatePoolEvent(e) => &mut e.metadata,
DexEvent::PumpSwapDepositEvent(e) => &mut e.metadata,
DexEvent::PumpSwapWithdrawEvent(e) => &mut e.metadata,
DexEvent::PumpSwapGlobalConfigAccountEvent(e) => &mut e.metadata,
DexEvent::PumpSwapPoolAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4SwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4DepositEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4WithdrawEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4Initialize2Event(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmSwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmSwapV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmClosePositionEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmCreatePoolEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmOpenPositionV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmInitializeEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2SwapEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2Swap2Event(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &mut e.metadata,
DexEvent::TokenAccountEvent(e) => &mut e.metadata,
DexEvent::NonceAccountEvent(e) => &mut e.metadata,
DexEvent::TokenInfoEvent(e) => &mut e.metadata,
DexEvent::BlockMetaEvent(e) => &mut e.metadata,
DexEvent::SetComputeUnitLimitEvent(e) => &mut e.metadata,
DexEvent::SetComputeUnitPriceEvent(e) => &mut e.metadata,
pub fn metadata_mut(&mut self) -> &mut EventMetadata {
match self {
$(DexEvent::$variant(e) => &mut e.metadata,)*
}
}
}
}
};
}
impl_dex_event_metadata!(
// Bonk events
BonkTradeEvent,
BonkPoolCreateEvent,
BonkMigrateToAmmEvent,
BonkMigrateToCpswapEvent,
BonkPoolStateAccountEvent,
BonkGlobalConfigAccountEvent,
BonkPlatformConfigAccountEvent,
// PumpFun events
PumpFunCreateTokenEvent,
PumpFunCreateV2TokenEvent,
PumpFunTradeEvent,
PumpFunMigrateEvent,
PumpFunBondingCurveAccountEvent,
PumpFunGlobalAccountEvent,
// PumpSwap events
PumpSwapBuyEvent,
PumpSwapSellEvent,
PumpSwapCreatePoolEvent,
PumpSwapDepositEvent,
PumpSwapWithdrawEvent,
PumpSwapGlobalConfigAccountEvent,
PumpSwapPoolAccountEvent,
// Raydium AMM V4 events
RaydiumAmmV4SwapEvent,
RaydiumAmmV4DepositEvent,
RaydiumAmmV4WithdrawEvent,
RaydiumAmmV4WithdrawPnlEvent,
RaydiumAmmV4Initialize2Event,
RaydiumAmmV4AmmInfoAccountEvent,
// Raydium CLMM events
RaydiumClmmSwapEvent,
RaydiumClmmSwapV2Event,
RaydiumClmmClosePositionEvent,
RaydiumClmmIncreaseLiquidityV2Event,
RaydiumClmmDecreaseLiquidityV2Event,
RaydiumClmmCreatePoolEvent,
RaydiumClmmOpenPositionWithToken22NftEvent,
RaydiumClmmOpenPositionV2Event,
RaydiumClmmAmmConfigAccountEvent,
RaydiumClmmPoolStateAccountEvent,
RaydiumClmmTickArrayStateAccountEvent,
// Raydium CPMM events
RaydiumCpmmSwapEvent,
RaydiumCpmmDepositEvent,
RaydiumCpmmWithdrawEvent,
RaydiumCpmmInitializeEvent,
RaydiumCpmmAmmConfigAccountEvent,
RaydiumCpmmPoolStateAccountEvent,
// Meteora DAMM v2 events
MeteoraDammV2SwapEvent,
MeteoraDammV2Swap2Event,
MeteoraDammV2InitializePoolEvent,
MeteoraDammV2InitializeCustomizablePoolEvent,
MeteoraDammV2InitializePoolWithDynamicConfigEvent,
// Common events
TokenAccountEvent,
NonceAccountEvent,
TokenInfoEvent,
BlockMetaEvent,
SetComputeUnitLimitEvent,
SetComputeUnitPriceEvent,
);