feat(api): Upgrade to v0.1.5 with improved event subscription API

This update includes the following improvements:
- Version upgraded to 0.1.5
- Added subscribe_events_v2 API with more granular account filtering
- Marked original subscribe_events API as deprecated
- Fixed bug
This commit is contained in:
ysq
2025-07-26 17:11:28 +08:00
parent 961864a39e
commit 2e864dd14e
13 changed files with 392 additions and 77 deletions
@@ -421,9 +421,15 @@ impl EventParser for BonkEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_inner_instruction(inner_instruction, signature, slot, block_time)
self.inner.parse_events_from_inner_instruction(
inner_instruction,
signature,
slot,
block_time,
index,
)
}
fn parse_events_from_instruction(
@@ -433,9 +439,16 @@ impl EventParser for BonkEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_instruction(instruction, accounts, signature, slot, block_time)
self.inner.parse_events_from_instruction(
instruction,
accounts,
signature,
slot,
block_time,
index,
)
}
fn should_handle(&self, program_id: &Pubkey) -> bool {
@@ -226,9 +226,15 @@ impl EventParser for PumpFunEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_inner_instruction(inner_instruction, signature, slot, block_time)
self.inner.parse_events_from_inner_instruction(
inner_instruction,
signature,
slot,
block_time,
index,
)
}
fn parse_events_from_instruction(
@@ -238,9 +244,16 @@ impl EventParser for PumpFunEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_instruction(instruction, accounts, signature, slot, block_time)
self.inner.parse_events_from_instruction(
instruction,
accounts,
signature,
slot,
block_time,
index,
)
}
fn should_handle(&self, program_id: &Pubkey) -> bool {
@@ -3,7 +3,7 @@ use solana_sdk::{instruction::CompiledInstruction, pubkey::Pubkey};
use solana_transaction_status::UiCompiledInstruction;
use crate::streaming::event_parser::{
common::{EventMetadata, EventType, ProtocolType, read_u64_le},
common::{read_u64_le, EventMetadata, EventType, ProtocolType},
core::traits::{EventParser, GenericEventParseConfig, GenericEventParser, UnifiedEvent},
protocols::pumpswap::{
discriminators, PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent,
@@ -67,7 +67,10 @@ impl PumpSwapEventParser {
}
/// 解析买入日志事件
fn parse_buy_inner_instruction(data: &[u8], metadata: EventMetadata) -> Option<Box<dyn UnifiedEvent>> {
fn parse_buy_inner_instruction(
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpSwapBuyEvent>(data) {
let mut metadata = metadata;
metadata.set_id(format!(
@@ -84,7 +87,10 @@ impl PumpSwapEventParser {
}
/// 解析卖出日志事件
fn parse_sell_inner_instruction(data: &[u8], metadata: EventMetadata) -> Option<Box<dyn UnifiedEvent>> {
fn parse_sell_inner_instruction(
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpSwapSellEvent>(data) {
let mut metadata = metadata;
metadata.set_id(format!(
@@ -121,7 +127,10 @@ impl PumpSwapEventParser {
}
/// 解析存款日志事件
fn parse_deposit_inner_instruction(data: &[u8], metadata: EventMetadata) -> Option<Box<dyn UnifiedEvent>> {
fn parse_deposit_inner_instruction(
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpSwapDepositEvent>(data) {
let mut metadata = metadata;
metadata.set_id(format!(
@@ -138,7 +147,10 @@ impl PumpSwapEventParser {
}
/// 解析提款日志事件
fn parse_withdraw_inner_instruction(data: &[u8], metadata: EventMetadata) -> Option<Box<dyn UnifiedEvent>> {
fn parse_withdraw_inner_instruction(
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpSwapWithdrawEvent>(data) {
let mut metadata = metadata;
metadata.set_id(format!(
@@ -362,9 +374,15 @@ impl EventParser for PumpSwapEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_inner_instruction(inner_instruction, signature, slot, block_time)
self.inner.parse_events_from_inner_instruction(
inner_instruction,
signature,
slot,
block_time,
index,
)
}
fn parse_events_from_instruction(
@@ -374,9 +392,16 @@ impl EventParser for PumpSwapEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_instruction(instruction, accounts, signature, slot, block_time)
self.inner.parse_events_from_instruction(
instruction,
accounts,
signature,
slot,
block_time,
index,
)
}
fn should_handle(&self, program_id: &Pubkey) -> bool {
@@ -146,9 +146,15 @@ impl EventParser for RaydiumClmmEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_inner_instruction(inner_instruction, signature, slot, block_time)
self.inner.parse_events_from_inner_instruction(
inner_instruction,
signature,
slot,
block_time,
index,
)
}
fn parse_events_from_instruction(
@@ -158,9 +164,16 @@ impl EventParser for RaydiumClmmEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_instruction(instruction, accounts, signature, slot, block_time)
self.inner.parse_events_from_instruction(
instruction,
accounts,
signature,
slot,
block_time,
index,
)
}
fn should_handle(&self, program_id: &Pubkey) -> bool {
@@ -135,9 +135,15 @@ impl EventParser for RaydiumCpmmEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_inner_instruction(inner_instruction, signature, slot, block_time)
self.inner.parse_events_from_inner_instruction(
inner_instruction,
signature,
slot,
block_time,
index,
)
}
fn parse_events_from_instruction(
@@ -147,9 +153,16 @@ impl EventParser for RaydiumCpmmEventParser {
signature: &str,
slot: u64,
block_time: Option<Timestamp>,
index: String,
) -> Vec<Box<dyn UnifiedEvent>> {
self.inner
.parse_events_from_instruction(instruction, accounts, signature, slot, block_time)
self.inner.parse_events_from_instruction(
instruction,
accounts,
signature,
slot,
block_time,
index,
)
}
fn should_handle(&self, program_id: &Pubkey) -> bool {