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::{ use crate::streaming::event_parser::{
common::{ DexEvent, Protocol, common::{
filter::EventTypeFilter, high_performance_clock::elapsed_micros_since, EventMetadata, filter::EventTypeFilter, high_performance_clock::elapsed_micros_since, parse_swap_data_from_next_grpc_instructions, parse_swap_data_from_next_instructions
parse_swap_data_from_next_grpc_instructions, parse_swap_data_from_next_instructions, }, core::{
EventMetadata,
},
core::{
dispatcher::EventDispatcher, dispatcher::EventDispatcher,
global_state::{ global_state::{
add_bonk_dev_address, add_dev_address, is_bonk_dev_address_in_signature, add_bonk_dev_address, add_dev_address, is_bonk_dev_address_in_signature,
is_dev_address_in_signature, is_dev_address_in_signature,
}, },
merger_event::merge, merger_event::merge,
}, }, protocols::raydium_amm_v4::parser::RAYDIUM_AMM_V4_PROGRAM_ID
DexEvent, Protocol,
}; };
use prost_types::Timestamp; use prost_types::Timestamp;
use solana_sdk::{ use solana_sdk::{
@@ -327,11 +323,15 @@ impl EventParser {
let is_cu_program = EventDispatcher::is_compute_budget_program(&program_id); let is_cu_program = EventDispatcher::is_compute_budget_program(&program_id);
// 检查指令数据长度(至少需要 8 字节的 discriminator let disc_len = match program_id {
if !is_cu_program && instruction.data.len() < 8 { RAYDIUM_AMM_V4_PROGRAM_ID => 1,
_ => 8,
};
// 检查指令数据长度(至少需要 disc_len 字节的 discriminator
if !is_cu_program && instruction.data.len() < disc_len {
return Ok(()); return Ok(());
} }
// 创建元数据 // 创建元数据
let timestamp = block_time.unwrap_or(Timestamp { seconds: 0, nanos: 0 }); 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; let block_time_ms = timestamp.seconds * 1000 + (timestamp.nanos as i64) / 1_000_000;
@@ -366,8 +366,8 @@ impl EventParser {
}; };
// 提取 discriminator 和数据 // 提取 discriminator 和数据
let instruction_discriminator = &instruction.data[..8]; let instruction_discriminator = &instruction.data[..disc_len];
let instruction_data = &instruction.data[8..]; let instruction_data = &instruction.data[disc_len..];
// 构建账户公钥列表 // 构建账户公钥列表
let account_pubkeys: Vec<Pubkey> = instruction let account_pubkeys: Vec<Pubkey> = instruction
@@ -497,8 +497,13 @@ impl EventParser {
let is_cu_program = EventDispatcher::is_compute_budget_program(&program_id); 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 // 检查指令数据长度(至少需要 8 字节的 discriminator
if !is_cu_program && instruction.data.len() < 8 { if !is_cu_program && instruction.data.len() < disc_len {
return Ok(()); return Ok(());
} }
@@ -536,8 +541,8 @@ impl EventParser {
}; };
// 提取 discriminator 和数据 // 提取 discriminator 和数据
let instruction_discriminator = &instruction.data[..8]; let instruction_discriminator = &instruction.data[..disc_len];
let instruction_data = &instruction.data[8..]; let instruction_data = &instruction.data[disc_len..];
// 构建账户公钥列表 // 构建账户公钥列表
let account_pubkeys: Vec<Pubkey> = instruction let account_pubkeys: Vec<Pubkey> = instruction