Merge commit '9d415cf9500f11d48596768e37cbb9334c298633'

This commit is contained in:
ysq
2025-11-19 21:07:31 +08:00
+21 -16
View File
@@ -1,18 +1,14 @@
use crate::streaming::event_parser::{
common::{
filter::EventTypeFilter, high_performance_clock::elapsed_micros_since,
parse_swap_data_from_next_grpc_instructions, parse_swap_data_from_next_instructions,
EventMetadata,
},
core::{
DexEvent, Protocol, common::{
EventMetadata, filter::EventTypeFilter, high_performance_clock::elapsed_micros_since, parse_swap_data_from_next_grpc_instructions, parse_swap_data_from_next_instructions
}, core::{
dispatcher::EventDispatcher,
global_state::{
add_bonk_dev_address, add_dev_address, is_bonk_dev_address_in_signature,
is_dev_address_in_signature,
},
merger_event::merge,
},
DexEvent, Protocol,
}, protocols::raydium_amm_v4::parser::RAYDIUM_AMM_V4_PROGRAM_ID
};
use prost_types::Timestamp;
use solana_sdk::{
@@ -327,11 +323,15 @@ impl EventParser {
let is_cu_program = EventDispatcher::is_compute_budget_program(&program_id);
// 检查指令数据长度(至少需要 8 字节的 discriminator
if !is_cu_program && instruction.data.len() < 8 {
let disc_len = match program_id {
RAYDIUM_AMM_V4_PROGRAM_ID => 1,
_ => 8,
};
// 检查指令数据长度(至少需要 disc_len 字节的 discriminator
if !is_cu_program && instruction.data.len() < disc_len {
return Ok(());
}
// 创建元数据
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;
@@ -366,8 +366,8 @@ impl EventParser {
};
// 提取 discriminator 和数据
let instruction_discriminator = &instruction.data[..8];
let instruction_data = &instruction.data[8..];
let instruction_discriminator = &instruction.data[..disc_len];
let instruction_data = &instruction.data[disc_len..];
// 构建账户公钥列表
let account_pubkeys: Vec<Pubkey> = instruction
@@ -497,8 +497,13 @@ impl EventParser {
let is_cu_program = EventDispatcher::is_compute_budget_program(&program_id);
let disc_len = match program_id {
RAYDIUM_AMM_V4_PROGRAM_ID => 1,
_ => 8,
};
// 检查指令数据长度(至少需要 8 字节的 discriminator
if !is_cu_program && instruction.data.len() < 8 {
if !is_cu_program && instruction.data.len() < disc_len {
return Ok(());
}
@@ -536,8 +541,8 @@ impl EventParser {
};
// 提取 discriminator 和数据
let instruction_discriminator = &instruction.data[..8];
let instruction_data = &instruction.data[8..];
let instruction_discriminator = &instruction.data[..disc_len];
let instruction_data = &instruction.data[disc_len..];
// 构建账户公钥列表
let account_pubkeys: Vec<Pubkey> = instruction