mirror of
https://github.com/0xfnzero/solana-streamer.git
synced 2026-08-15 09:58:05 +00:00
refactor: rename UnifiedEvent to DexEvent
This commit is contained in:
@@ -3,7 +3,7 @@ use crate::streaming::event_parser::common::filter::EventTypeFilter;
|
||||
use crate::streaming::event_parser::common::high_performance_clock::elapsed_micros_since;
|
||||
use crate::streaming::event_parser::common::EventMetadata;
|
||||
use crate::streaming::event_parser::core::parser_cache::get_account_configs;
|
||||
use crate::streaming::event_parser::core::traits::UnifiedEvent;
|
||||
use crate::streaming::event_parser::core::traits::DexEvent;
|
||||
use crate::streaming::event_parser::Protocol;
|
||||
use crate::streaming::grpc::AccountPretty;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@@ -62,7 +62,7 @@ impl AccountEventParser {
|
||||
protocols: &[Protocol],
|
||||
account: AccountPretty,
|
||||
event_type_filter: Option<&EventTypeFilter>,
|
||||
) -> Option<UnifiedEvent> {
|
||||
) -> Option<DexEvent> {
|
||||
// 直接从 parser_cache 获取配置
|
||||
let configs = get_account_configs(
|
||||
protocols,
|
||||
@@ -102,7 +102,7 @@ impl AccountEventParser {
|
||||
pub fn parse_token_account_event(
|
||||
account: &AccountPretty,
|
||||
metadata: EventMetadata,
|
||||
) -> Option<UnifiedEvent> {
|
||||
) -> Option<DexEvent> {
|
||||
let pubkey = account.pubkey;
|
||||
let executable = account.executable;
|
||||
let lamports = account.lamports;
|
||||
@@ -123,7 +123,7 @@ impl AccountEventParser {
|
||||
};
|
||||
let recv_delta = elapsed_micros_since(account.recv_us);
|
||||
event.metadata.handle_us = recv_delta;
|
||||
return Some(UnifiedEvent::TokenInfoEvent(event));
|
||||
return Some(DexEvent::TokenInfoEvent(event));
|
||||
}
|
||||
}
|
||||
// Spl Token2022 Mint
|
||||
@@ -141,7 +141,7 @@ impl AccountEventParser {
|
||||
};
|
||||
let recv_delta = elapsed_micros_since(account.recv_us);
|
||||
event.metadata.handle_us = recv_delta;
|
||||
return Some(UnifiedEvent::TokenInfoEvent(event));
|
||||
return Some(DexEvent::TokenInfoEvent(event));
|
||||
}
|
||||
}
|
||||
let amount = if account.owner.to_bytes() == spl_token_2022::ID.to_bytes() {
|
||||
@@ -164,13 +164,13 @@ impl AccountEventParser {
|
||||
};
|
||||
let recv_delta = elapsed_micros_since(account.recv_us);
|
||||
event.metadata.handle_us = recv_delta;
|
||||
Some(UnifiedEvent::TokenAccountEvent(event))
|
||||
Some(DexEvent::TokenAccountEvent(event))
|
||||
}
|
||||
|
||||
pub fn parse_nonce_account_event(
|
||||
account: &AccountPretty,
|
||||
metadata: EventMetadata,
|
||||
) -> Option<UnifiedEvent> {
|
||||
) -> Option<DexEvent> {
|
||||
if let Ok(info) = parse_nonce(&account.data) {
|
||||
match info {
|
||||
solana_account_decoder::parse_nonce::UiNonceState::Initialized(details) => {
|
||||
@@ -185,7 +185,7 @@ impl AccountEventParser {
|
||||
authority: details.authority,
|
||||
};
|
||||
event.metadata.handle_us = elapsed_micros_since(account.recv_us);
|
||||
return Some(UnifiedEvent::NonceAccountEvent(event));
|
||||
return Some(DexEvent::NonceAccountEvent(event));
|
||||
}
|
||||
solana_account_decoder::parse_nonce::UiNonceState::Uninitialized => {}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::streaming::event_parser::common::high_performance_clock::elapsed_micros_since;
|
||||
use crate::streaming::event_parser::core::traits::UnifiedEvent;
|
||||
use crate::streaming::event_parser::core::traits::DexEvent;
|
||||
use crate::streaming::event_parser::protocols::block::block_meta_event::BlockMetaEvent;
|
||||
|
||||
pub struct CommonEventParser {}
|
||||
@@ -10,9 +10,9 @@ impl CommonEventParser {
|
||||
block_hash: String,
|
||||
block_time_ms: i64,
|
||||
recv_us: i64,
|
||||
) -> UnifiedEvent {
|
||||
) -> DexEvent {
|
||||
let mut block_meta_event = BlockMetaEvent::new(slot, block_hash, block_time_ms, recv_us);
|
||||
block_meta_event.metadata.handle_us = elapsed_micros_since(recv_us);
|
||||
UnifiedEvent::BlockMetaEvent(block_meta_event)
|
||||
DexEvent::BlockMetaEvent(block_meta_event)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,12 +12,13 @@ use crate::streaming::{
|
||||
add_bonk_dev_address, add_dev_address, is_bonk_dev_address_in_signature,
|
||||
is_dev_address_in_signature,
|
||||
},
|
||||
merger_event::merge,
|
||||
parser_cache::{
|
||||
build_account_pubkeys_with_cache, get_global_instruction_configs,
|
||||
get_global_program_ids, GenericEventParseConfig,
|
||||
},
|
||||
},
|
||||
Protocol, UnifiedEvent,
|
||||
Protocol, DexEvent,
|
||||
},
|
||||
};
|
||||
use prost_types::Timestamp;
|
||||
@@ -47,7 +48,7 @@ impl EventParser {
|
||||
inner_instructions: &[yellowstone_grpc_proto::prelude::InnerInstructions],
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 获取交易的指令和账户
|
||||
let mut accounts = accounts.to_vec();
|
||||
@@ -137,7 +138,7 @@ impl EventParser {
|
||||
inner_instructions: &[InnerInstructions],
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 获取交易的指令和账户
|
||||
let compiled_instructions = transaction.message.instructions();
|
||||
@@ -217,10 +218,10 @@ impl EventParser {
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
inner_instructions: &[InnerInstructions],
|
||||
callback: Arc<dyn Fn(UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn Fn(DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 创建适配器回调,将所有权回调转换为引用回调
|
||||
let adapter_callback = Arc::new(move |event: &UnifiedEvent| {
|
||||
let adapter_callback = Arc::new(move |event: &DexEvent| {
|
||||
callback(event.clone());
|
||||
});
|
||||
Self::parse_versioned_transaction(
|
||||
@@ -251,7 +252,7 @@ impl EventParser {
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
inner_instructions: &[InnerInstructions],
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
let accounts: Vec<Pubkey> = versioned_tx.message.static_account_keys().to_vec();
|
||||
Self::parse_instruction_events_from_versioned_transaction(
|
||||
@@ -282,10 +283,10 @@ impl EventParser {
|
||||
recv_us: i64,
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
callback: Arc<dyn Fn(UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn Fn(DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 创建适配器回调,将所有权回调转换为引用回调
|
||||
let adapter_callback = Arc::new(move |event: &UnifiedEvent| {
|
||||
let adapter_callback = Arc::new(move |event: &DexEvent| {
|
||||
callback(event.clone());
|
||||
});
|
||||
// 调用原始方法
|
||||
@@ -314,7 +315,7 @@ impl EventParser {
|
||||
recv_us: i64,
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
if let Some(transition) = grpc_tx.transaction {
|
||||
if let Some(message) = &transition.message {
|
||||
@@ -381,7 +382,7 @@ impl EventParser {
|
||||
event_type_filter: Option<&EventTypeFilter>,
|
||||
signature: Signature,
|
||||
transaction: EncodedConfirmedTransactionWithStatusMeta,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
let versioned_tx = match transaction.transaction.transaction.decode() {
|
||||
Some(tx) => tx,
|
||||
@@ -502,7 +503,7 @@ impl EventParser {
|
||||
outer_index: i64,
|
||||
inner_index: Option<i64>,
|
||||
transaction_index: Option<u64>,
|
||||
) -> Option<UnifiedEvent> {
|
||||
) -> Option<DexEvent> {
|
||||
if let Some(parser) = config.inner_instruction_parser {
|
||||
let timestamp = block_time.unwrap_or(Timestamp { seconds: 0, nanos: 0 });
|
||||
let block_time_ms = timestamp.seconds * 1000 + (timestamp.nanos as i64) / 1_000_000;
|
||||
@@ -538,7 +539,7 @@ impl EventParser {
|
||||
outer_index: i64,
|
||||
inner_index: Option<i64>,
|
||||
transaction_index: Option<u64>,
|
||||
) -> Option<UnifiedEvent> {
|
||||
) -> Option<DexEvent> {
|
||||
if let Some(parser) = config.instruction_parser {
|
||||
let timestamp = block_time.unwrap_or(Timestamp { seconds: 0, nanos: 0 });
|
||||
let block_time_ms = timestamp.seconds * 1000 + (timestamp.nanos as i64) / 1_000_000;
|
||||
@@ -573,7 +574,7 @@ impl EventParser {
|
||||
inner_index: Option<i64>,
|
||||
transaction_index: Option<u64>,
|
||||
config: &GenericEventParseConfig,
|
||||
) -> Vec<UnifiedEvent> {
|
||||
) -> Vec<DexEvent> {
|
||||
// Use SIMD-optimized data validation with correct discriminator length
|
||||
let discriminator_len = config.inner_instruction_discriminator.len();
|
||||
if !SimdUtils::validate_instruction_data_simd(
|
||||
@@ -622,7 +623,7 @@ impl EventParser {
|
||||
inner_index: Option<i64>,
|
||||
transaction_index: Option<u64>,
|
||||
config: &GenericEventParseConfig,
|
||||
) -> Vec<UnifiedEvent> {
|
||||
) -> Vec<DexEvent> {
|
||||
// Use SIMD-optimized data validation with correct discriminator length
|
||||
let discriminator_len = config.inner_instruction_discriminator.len();
|
||||
if !SimdUtils::validate_instruction_data_simd(
|
||||
@@ -675,7 +676,7 @@ impl EventParser {
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
inner_instructions: Option<&InnerInstructions>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 添加边界检查以防止越界访问
|
||||
let program_id_index = instruction.program_id_index as usize;
|
||||
@@ -734,7 +735,7 @@ impl EventParser {
|
||||
|
||||
for (_disc, config, mut event) in all_results {
|
||||
// 阻塞处理:原有的同步逻辑
|
||||
let mut inner_instruction_event: Option<UnifiedEvent> = None;
|
||||
let mut inner_instruction_event: Option<DexEvent> = None;
|
||||
if inner_instructions.is_some() {
|
||||
let inner_instructions_ref = inner_instructions.unwrap();
|
||||
|
||||
@@ -790,7 +791,7 @@ impl EventParser {
|
||||
|
||||
// 合并事件
|
||||
if let Some(inner_instruction_event) = inner_instruction_event {
|
||||
// event.merge(&*inner_instruction_event);
|
||||
merge(&mut event, inner_instruction_event);
|
||||
}
|
||||
// 设置处理时间(使用高性能时钟)
|
||||
event.metadata_mut().handle_us = elapsed_micros_since(recv_us);
|
||||
@@ -817,7 +818,7 @@ impl EventParser {
|
||||
bot_wallet: Option<Pubkey>,
|
||||
transaction_index: Option<u64>,
|
||||
inner_instructions: Option<&yellowstone_grpc_proto::prelude::InnerInstructions>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a UnifiedEvent) + Send + Sync>,
|
||||
callback: Arc<dyn for<'a> Fn(&'a DexEvent) + Send + Sync>,
|
||||
) -> anyhow::Result<()> {
|
||||
// 添加边界检查以防止越界访问
|
||||
let program_id_index = instruction.program_id_index as usize;
|
||||
@@ -876,7 +877,7 @@ impl EventParser {
|
||||
|
||||
for (_disc, config, mut event) in all_results {
|
||||
// 阻塞处理:原有的同步逻辑
|
||||
let mut inner_instruction_event: Option<UnifiedEvent> = None;
|
||||
let mut inner_instruction_event: Option<DexEvent> = None;
|
||||
if inner_instructions.is_some() {
|
||||
let inner_instructions_ref = inner_instructions.unwrap();
|
||||
|
||||
@@ -932,7 +933,7 @@ impl EventParser {
|
||||
|
||||
// 合并事件
|
||||
if let Some(inner_instruction_event) = inner_instruction_event {
|
||||
// event.merge(&*inner_instruction_event);
|
||||
merge(&mut event, inner_instruction_event);
|
||||
}
|
||||
// 设置处理时间(使用高性能时钟)
|
||||
event.metadata_mut().handle_us = elapsed_micros_since(recv_us);
|
||||
@@ -950,18 +951,18 @@ impl EventParser {
|
||||
get_global_program_ids(protocols, event_type_filter).contains(program_id)
|
||||
}
|
||||
|
||||
fn process_event(mut event: UnifiedEvent, bot_wallet: Option<Pubkey>) -> UnifiedEvent {
|
||||
fn process_event(event: DexEvent, bot_wallet: Option<Pubkey>) -> DexEvent {
|
||||
let signature = event.metadata().signature; // Copy the signature to avoid borrowing issues
|
||||
match event {
|
||||
UnifiedEvent::PumpFunCreateTokenEvent(token_info) => {
|
||||
DexEvent::PumpFunCreateTokenEvent(token_info) => {
|
||||
add_dev_address(&signature, token_info.user);
|
||||
if token_info.creator != Pubkey::default() && token_info.creator != token_info.user
|
||||
{
|
||||
add_dev_address(&signature, token_info.creator);
|
||||
}
|
||||
UnifiedEvent::PumpFunCreateTokenEvent(token_info)
|
||||
DexEvent::PumpFunCreateTokenEvent(token_info)
|
||||
}
|
||||
UnifiedEvent::PumpFunTradeEvent(mut trade_info) => {
|
||||
DexEvent::PumpFunTradeEvent(mut trade_info) => {
|
||||
if is_dev_address_in_signature(&signature, &trade_info.user)
|
||||
|| is_dev_address_in_signature(&signature, &trade_info.creator)
|
||||
{
|
||||
@@ -985,31 +986,31 @@ impl EventParser {
|
||||
trade_info.sol_amount
|
||||
};
|
||||
}
|
||||
UnifiedEvent::PumpFunTradeEvent(trade_info)
|
||||
DexEvent::PumpFunTradeEvent(trade_info)
|
||||
}
|
||||
UnifiedEvent::PumpSwapBuyEvent(mut trade_info) => {
|
||||
DexEvent::PumpSwapBuyEvent(mut trade_info) => {
|
||||
if trade_info.metadata.swap_data.is_some() {
|
||||
trade_info.metadata.swap_data.as_mut().unwrap().from_amount =
|
||||
trade_info.user_quote_amount_in;
|
||||
trade_info.metadata.swap_data.as_mut().unwrap().to_amount =
|
||||
trade_info.base_amount_out;
|
||||
}
|
||||
UnifiedEvent::PumpSwapBuyEvent(trade_info)
|
||||
DexEvent::PumpSwapBuyEvent(trade_info)
|
||||
}
|
||||
UnifiedEvent::PumpSwapSellEvent(mut trade_info) => {
|
||||
DexEvent::PumpSwapSellEvent(mut trade_info) => {
|
||||
if trade_info.metadata.swap_data.is_some() {
|
||||
trade_info.metadata.swap_data.as_mut().unwrap().from_amount =
|
||||
trade_info.base_amount_in;
|
||||
trade_info.metadata.swap_data.as_mut().unwrap().to_amount =
|
||||
trade_info.user_quote_amount_out;
|
||||
}
|
||||
UnifiedEvent::PumpSwapSellEvent(trade_info)
|
||||
DexEvent::PumpSwapSellEvent(trade_info)
|
||||
}
|
||||
UnifiedEvent::BonkPoolCreateEvent(pool_info) => {
|
||||
DexEvent::BonkPoolCreateEvent(pool_info) => {
|
||||
add_bonk_dev_address(&signature, pool_info.creator);
|
||||
UnifiedEvent::BonkPoolCreateEvent(pool_info)
|
||||
DexEvent::BonkPoolCreateEvent(pool_info)
|
||||
}
|
||||
UnifiedEvent::BonkTradeEvent(mut trade_info) => {
|
||||
DexEvent::BonkTradeEvent(mut trade_info) => {
|
||||
if is_bonk_dev_address_in_signature(&signature, &trade_info.payer) {
|
||||
trade_info.is_dev_create_token_trade = true;
|
||||
} else if Some(trade_info.payer) == bot_wallet {
|
||||
@@ -1017,7 +1018,7 @@ impl EventParser {
|
||||
} else {
|
||||
trade_info.is_dev_create_token_trade = false;
|
||||
}
|
||||
UnifiedEvent::BonkTradeEvent(trade_info)
|
||||
DexEvent::BonkTradeEvent(trade_info)
|
||||
}
|
||||
_ => event,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
use crate::streaming::event_parser::DexEvent;
|
||||
|
||||
pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) {
|
||||
match instruction_event {
|
||||
// PumpFun events
|
||||
DexEvent::PumpFunTradeEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpFunTradeEvent(cpie) => {
|
||||
e.mint = cpie.mint;
|
||||
e.sol_amount = cpie.sol_amount;
|
||||
e.token_amount = cpie.token_amount;
|
||||
e.is_buy = cpie.is_buy;
|
||||
e.user = cpie.user;
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.virtual_sol_reserves = cpie.virtual_sol_reserves;
|
||||
e.virtual_token_reserves = cpie.virtual_token_reserves;
|
||||
e.real_sol_reserves = cpie.real_sol_reserves;
|
||||
e.real_token_reserves = cpie.real_token_reserves;
|
||||
e.fee_recipient = cpie.fee_recipient;
|
||||
e.fee_basis_points = cpie.fee_basis_points;
|
||||
e.fee = cpie.fee;
|
||||
e.creator = cpie.creator;
|
||||
e.creator_fee_basis_points = cpie.creator_fee_basis_points;
|
||||
e.creator_fee = cpie.creator_fee;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpFunCreateTokenEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpFunCreateTokenEvent(cpie) => {
|
||||
e.mint = cpie.mint;
|
||||
e.bonding_curve = cpie.bonding_curve;
|
||||
e.user = cpie.user;
|
||||
e.creator = cpie.creator;
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.virtual_token_reserves = cpie.virtual_token_reserves;
|
||||
e.virtual_sol_reserves = cpie.virtual_sol_reserves;
|
||||
e.real_token_reserves = cpie.real_token_reserves;
|
||||
e.token_total_supply = cpie.token_total_supply;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpFunMigrateEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpFunMigrateEvent(cpie) => {
|
||||
e.user = cpie.user;
|
||||
e.mint = cpie.mint;
|
||||
e.mint_amount = cpie.mint_amount;
|
||||
e.sol_amount = cpie.sol_amount;
|
||||
e.pool_migration_fee = cpie.pool_migration_fee;
|
||||
e.bonding_curve = cpie.bonding_curve;
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.pool = cpie.pool;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
|
||||
// Bonk events
|
||||
DexEvent::BonkTradeEvent(e) => match cpi_log_event {
|
||||
DexEvent::BonkTradeEvent(cpie) => {
|
||||
e.pool_state = cpie.pool_state;
|
||||
e.total_base_sell = cpie.total_base_sell;
|
||||
e.virtual_base = cpie.virtual_base;
|
||||
e.virtual_quote = cpie.virtual_quote;
|
||||
e.real_base_before = cpie.real_base_before;
|
||||
e.real_quote_before = cpie.real_quote_before;
|
||||
e.real_base_after = cpie.real_base_after;
|
||||
e.real_quote_after = cpie.real_quote_after;
|
||||
e.amount_in = cpie.amount_in;
|
||||
e.amount_out = cpie.amount_out;
|
||||
e.protocol_fee = cpie.protocol_fee;
|
||||
e.platform_fee = cpie.platform_fee;
|
||||
e.creator_fee = cpie.creator_fee;
|
||||
e.share_fee = cpie.share_fee;
|
||||
e.trade_direction = cpie.trade_direction;
|
||||
e.pool_status = cpie.pool_status;
|
||||
e.exact_in = cpie.exact_in;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::BonkPoolCreateEvent(e) => match cpi_log_event {
|
||||
DexEvent::BonkPoolCreateEvent(cpie) => {
|
||||
e.pool_state = cpie.pool_state;
|
||||
e.creator = cpie.creator;
|
||||
e.config = cpie.config;
|
||||
e.base_mint_param = cpie.base_mint_param;
|
||||
e.curve_param = cpie.curve_param;
|
||||
e.vesting_param = cpie.vesting_param;
|
||||
e.amm_fee_on = cpie.amm_fee_on;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::BonkMigrateToAmmEvent(e) => match cpi_log_event {
|
||||
DexEvent::BonkMigrateToAmmEvent(cpie) => {
|
||||
e.base_lot_size = cpie.base_lot_size;
|
||||
e.quote_lot_size = cpie.quote_lot_size;
|
||||
e.market_vault_signer_nonce = cpie.market_vault_signer_nonce;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
|
||||
// PumpSwap events
|
||||
DexEvent::PumpSwapBuyEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpSwapBuyEvent(cpie) => {
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.base_amount_out = cpie.base_amount_out;
|
||||
e.max_quote_amount_in = cpie.max_quote_amount_in;
|
||||
e.user_base_token_reserves = cpie.user_base_token_reserves;
|
||||
e.user_quote_token_reserves = cpie.user_quote_token_reserves;
|
||||
e.pool_base_token_reserves = cpie.pool_base_token_reserves;
|
||||
e.pool_quote_token_reserves = cpie.pool_quote_token_reserves;
|
||||
e.quote_amount_in = cpie.quote_amount_in;
|
||||
e.lp_fee_basis_points = cpie.lp_fee_basis_points;
|
||||
e.lp_fee = cpie.lp_fee;
|
||||
e.protocol_fee_basis_points = cpie.protocol_fee_basis_points;
|
||||
e.protocol_fee = cpie.protocol_fee;
|
||||
e.quote_amount_in_with_lp_fee = cpie.quote_amount_in_with_lp_fee;
|
||||
e.user_quote_amount_in = cpie.user_quote_amount_in;
|
||||
e.pool = cpie.pool;
|
||||
e.user = cpie.user;
|
||||
e.user_base_token_account = cpie.user_base_token_account;
|
||||
e.user_quote_token_account = cpie.user_quote_token_account;
|
||||
e.protocol_fee_recipient = cpie.protocol_fee_recipient;
|
||||
e.protocol_fee_recipient_token_account = cpie.protocol_fee_recipient_token_account;
|
||||
e.coin_creator = cpie.coin_creator;
|
||||
e.coin_creator_fee_basis_points = cpie.coin_creator_fee_basis_points;
|
||||
e.coin_creator_fee = cpie.coin_creator_fee;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpSwapSellEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpSwapSellEvent(cpie) => {
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.base_amount_in = cpie.base_amount_in;
|
||||
e.min_quote_amount_out = cpie.min_quote_amount_out;
|
||||
e.user_base_token_reserves = cpie.user_base_token_reserves;
|
||||
e.user_quote_token_reserves = cpie.user_quote_token_reserves;
|
||||
e.pool_base_token_reserves = cpie.pool_base_token_reserves;
|
||||
e.pool_quote_token_reserves = cpie.pool_quote_token_reserves;
|
||||
e.quote_amount_out = cpie.quote_amount_out;
|
||||
e.lp_fee_basis_points = cpie.lp_fee_basis_points;
|
||||
e.lp_fee = cpie.lp_fee;
|
||||
e.protocol_fee_basis_points = cpie.protocol_fee_basis_points;
|
||||
e.protocol_fee = cpie.protocol_fee;
|
||||
e.quote_amount_out_without_lp_fee = cpie.quote_amount_out_without_lp_fee;
|
||||
e.user_quote_amount_out = cpie.user_quote_amount_out;
|
||||
e.pool = cpie.pool;
|
||||
e.user = cpie.user;
|
||||
e.user_base_token_account = cpie.user_base_token_account;
|
||||
e.user_quote_token_account = cpie.user_quote_token_account;
|
||||
e.protocol_fee_recipient = cpie.protocol_fee_recipient;
|
||||
e.protocol_fee_recipient_token_account = cpie.protocol_fee_recipient_token_account;
|
||||
e.coin_creator = cpie.coin_creator;
|
||||
e.coin_creator_fee_basis_points = cpie.coin_creator_fee_basis_points;
|
||||
e.coin_creator_fee = cpie.coin_creator_fee;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpSwapCreatePoolEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpSwapCreatePoolEvent(cpie) => {
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.index = cpie.index;
|
||||
e.creator = cpie.creator;
|
||||
e.base_mint = cpie.base_mint;
|
||||
e.quote_mint = cpie.quote_mint;
|
||||
e.base_mint_decimals = cpie.base_mint_decimals;
|
||||
e.quote_mint_decimals = cpie.quote_mint_decimals;
|
||||
e.base_amount_in = cpie.base_amount_in;
|
||||
e.quote_amount_in = cpie.quote_amount_in;
|
||||
e.pool_base_amount = cpie.pool_base_amount;
|
||||
e.pool_quote_amount = cpie.pool_quote_amount;
|
||||
e.minimum_liquidity = cpie.minimum_liquidity;
|
||||
e.initial_liquidity = cpie.initial_liquidity;
|
||||
e.lp_token_amount_out = cpie.lp_token_amount_out;
|
||||
e.pool_bump = cpie.pool_bump;
|
||||
e.pool = cpie.pool;
|
||||
e.lp_mint = cpie.lp_mint;
|
||||
e.user_base_token_account = cpie.user_base_token_account;
|
||||
e.user_quote_token_account = cpie.user_quote_token_account;
|
||||
e.coin_creator = cpie.coin_creator;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpSwapDepositEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpSwapDepositEvent(cpie) => {
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.lp_token_amount_out = cpie.lp_token_amount_out;
|
||||
e.max_base_amount_in = cpie.max_base_amount_in;
|
||||
e.max_quote_amount_in = cpie.max_quote_amount_in;
|
||||
e.user_base_token_reserves = cpie.user_base_token_reserves;
|
||||
e.user_quote_token_reserves = cpie.user_quote_token_reserves;
|
||||
e.pool_base_token_reserves = cpie.pool_base_token_reserves;
|
||||
e.pool_quote_token_reserves = cpie.pool_quote_token_reserves;
|
||||
e.base_amount_in = cpie.base_amount_in;
|
||||
e.quote_amount_in = cpie.quote_amount_in;
|
||||
e.lp_mint_supply = cpie.lp_mint_supply;
|
||||
e.pool = cpie.pool;
|
||||
e.user = cpie.user;
|
||||
e.user_base_token_account = cpie.user_base_token_account;
|
||||
e.user_quote_token_account = cpie.user_quote_token_account;
|
||||
e.user_pool_token_account = cpie.user_pool_token_account;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
DexEvent::PumpSwapWithdrawEvent(e) => match cpi_log_event {
|
||||
DexEvent::PumpSwapWithdrawEvent(cpie) => {
|
||||
e.timestamp = cpie.timestamp;
|
||||
e.lp_token_amount_in = cpie.lp_token_amount_in;
|
||||
e.min_base_amount_out = cpie.min_base_amount_out;
|
||||
e.min_quote_amount_out = cpie.min_quote_amount_out;
|
||||
e.user_base_token_reserves = cpie.user_base_token_reserves;
|
||||
e.user_quote_token_reserves = cpie.user_quote_token_reserves;
|
||||
e.pool_base_token_reserves = cpie.pool_base_token_reserves;
|
||||
e.pool_quote_token_reserves = cpie.pool_quote_token_reserves;
|
||||
e.base_amount_out = cpie.base_amount_out;
|
||||
e.quote_amount_out = cpie.quote_amount_out;
|
||||
e.lp_mint_supply = cpie.lp_mint_supply;
|
||||
e.pool = cpie.pool;
|
||||
e.user = cpie.user;
|
||||
e.user_base_token_account = cpie.user_base_token_account;
|
||||
e.user_quote_token_account = cpie.user_quote_token_account;
|
||||
e.user_pool_token_account = cpie.user_pool_token_account;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,11 @@ pub mod common_event_parser;
|
||||
pub mod global_state;
|
||||
pub mod parser_cache;
|
||||
pub mod traits;
|
||||
pub use traits::UnifiedEvent;
|
||||
pub use traits::DexEvent;
|
||||
pub use parser_cache::{
|
||||
AccountEventParseConfig, AccountEventParserFn, GenericEventParseConfig,
|
||||
InnerInstructionEventParser, InstructionEventParser, get_account_configs,
|
||||
};
|
||||
|
||||
pub mod event_parser;
|
||||
pub mod merger_event;
|
||||
@@ -21,7 +21,7 @@ use crate::streaming::{
|
||||
raydium_clmm::parser::RAYDIUM_CLMM_PROGRAM_ID,
|
||||
raydium_cpmm::parser::RAYDIUM_CPMM_PROGRAM_ID,
|
||||
},
|
||||
Protocol, UnifiedEvent,
|
||||
Protocol, DexEvent,
|
||||
},
|
||||
grpc::AccountPretty,
|
||||
};
|
||||
@@ -39,13 +39,13 @@ use std::{
|
||||
///
|
||||
/// 用于解析内联指令(Inner Instruction)生成的事件
|
||||
pub type InnerInstructionEventParser =
|
||||
fn(data: &[u8], metadata: EventMetadata) -> Option<UnifiedEvent>;
|
||||
fn(data: &[u8], metadata: EventMetadata) -> Option<DexEvent>;
|
||||
|
||||
/// 指令事件解析器函数类型
|
||||
///
|
||||
/// 用于解析普通指令(Instruction)生成的事件,需要账户信息
|
||||
pub type InstructionEventParser =
|
||||
fn(data: &[u8], accounts: &[Pubkey], metadata: EventMetadata) -> Option<UnifiedEvent>;
|
||||
fn(data: &[u8], accounts: &[Pubkey], metadata: EventMetadata) -> Option<DexEvent>;
|
||||
|
||||
/// 指令事件解析器配置
|
||||
///
|
||||
@@ -327,9 +327,6 @@ impl Default for AccountPubkeyCache {
|
||||
}
|
||||
}
|
||||
|
||||
/// 线程局部账户公钥缓存
|
||||
///
|
||||
/// 每个线程独立维护一个缓存实例,避免锁竞争
|
||||
thread_local! {
|
||||
static THREAD_LOCAL_ACCOUNT_CACHE: std::cell::RefCell<AccountPubkeyCache> =
|
||||
std::cell::RefCell::new(AccountPubkeyCache::new());
|
||||
@@ -365,7 +362,7 @@ pub fn build_account_pubkeys_with_cache(
|
||||
///
|
||||
/// 用于解析账户状态变更生成的事件
|
||||
pub type AccountEventParserFn =
|
||||
fn(account: &AccountPretty, metadata: EventMetadata) -> Option<UnifiedEvent>;
|
||||
fn(account: &AccountPretty, metadata: EventMetadata) -> Option<DexEvent>;
|
||||
|
||||
/// 账户事件解析器配置
|
||||
///
|
||||
|
||||
@@ -14,7 +14,7 @@ use std::fmt::Debug;
|
||||
|
||||
/// Unified Event Enum - Replaces the trait-based approach with a type-safe enum
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
||||
pub enum UnifiedEvent {
|
||||
pub enum DexEvent {
|
||||
// Bonk events
|
||||
BonkTradeEvent(BonkTradeEvent),
|
||||
BonkPoolCreateEvent(BonkPoolCreateEvent),
|
||||
@@ -76,106 +76,106 @@ pub enum UnifiedEvent {
|
||||
BlockMetaEvent(BlockMetaEvent),
|
||||
}
|
||||
|
||||
impl UnifiedEvent {
|
||||
impl DexEvent {
|
||||
pub fn metadata(&self) -> &EventMetadata {
|
||||
match self {
|
||||
UnifiedEvent::BonkTradeEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkPoolCreateEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkMigrateToAmmEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkMigrateToCpswapEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkPoolStateAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkGlobalConfigAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BonkPlatformConfigAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpFunCreateTokenEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpFunTradeEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpFunMigrateEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpFunBondingCurveAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpFunGlobalAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapBuyEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapSellEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapCreatePoolEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapDepositEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapWithdrawEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapGlobalConfigAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::PumpSwapPoolAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4SwapEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4DepositEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4WithdrawEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4Initialize2Event(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmSwapEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmSwapV2Event(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmClosePositionEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmCreatePoolEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmOpenPositionV2Event(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmAmmConfigAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmPoolStateAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmSwapEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmDepositEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmWithdrawEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmInitializeEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmPoolStateAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::TokenAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::NonceAccountEvent(e) => &e.metadata,
|
||||
UnifiedEvent::TokenInfoEvent(e) => &e.metadata,
|
||||
UnifiedEvent::BlockMetaEvent(e) => &e.metadata,
|
||||
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::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::TokenAccountEvent(e) => &e.metadata,
|
||||
DexEvent::NonceAccountEvent(e) => &e.metadata,
|
||||
DexEvent::TokenInfoEvent(e) => &e.metadata,
|
||||
DexEvent::BlockMetaEvent(e) => &e.metadata,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn metadata_mut(&mut self) -> &mut EventMetadata {
|
||||
match self {
|
||||
UnifiedEvent::BonkTradeEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkPoolCreateEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkMigrateToAmmEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkMigrateToCpswapEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkPoolStateAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkGlobalConfigAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BonkPlatformConfigAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpFunCreateTokenEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpFunTradeEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpFunMigrateEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpFunBondingCurveAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpFunGlobalAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapBuyEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapSellEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapCreatePoolEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapDepositEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapWithdrawEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapGlobalConfigAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::PumpSwapPoolAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4SwapEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4DepositEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4WithdrawEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4Initialize2Event(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmSwapEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmSwapV2Event(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmClosePositionEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmCreatePoolEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmOpenPositionV2Event(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmAmmConfigAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmPoolStateAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmSwapEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmDepositEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmWithdrawEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmInitializeEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::RaydiumCpmmPoolStateAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::TokenAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::NonceAccountEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::TokenInfoEvent(e) => &mut e.metadata,
|
||||
UnifiedEvent::BlockMetaEvent(e) => &mut e.metadata,
|
||||
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::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::TokenAccountEvent(e) => &mut e.metadata,
|
||||
DexEvent::NonceAccountEvent(e) => &mut e.metadata,
|
||||
DexEvent::TokenInfoEvent(e) => &mut e.metadata,
|
||||
DexEvent::BlockMetaEvent(e) => &mut e.metadata,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user