feat: enhance protocol event parsers and bump to v0.3.5

- Add creator_fee support to Bonk events
- Improve PumpFun/PumpSwap event parsing
- Update documentation and common types
This commit is contained in:
ysq
2025-08-19 21:13:22 +08:00
parent 915209abd8
commit 372bb765af
11 changed files with 193 additions and 45 deletions
@@ -28,6 +28,15 @@ pub struct PumpFunCreateTokenEvent {
pub associated_bonding_curve: Pubkey,
}
pub const PUMPFUN_CREATE_TOKEN_EVENT_LOG_SIZE: usize = 257;
pub fn pumpfun_create_token_event_log_decode(data: &[u8]) -> Option<PumpFunCreateTokenEvent> {
if data.len() < PUMPFUN_CREATE_TOKEN_EVENT_LOG_SIZE {
return None;
}
borsh::from_slice::<PumpFunCreateTokenEvent>(&data[..PUMPFUN_CREATE_TOKEN_EVENT_LOG_SIZE]).ok()
}
impl_unified_event!(
PumpFunCreateTokenEvent,
mint,
@@ -108,6 +117,15 @@ pub struct PumpFunTradeEvent {
pub user_volume_accumulator: Pubkey,
}
pub const PUMPFUN_TRADE_EVENT_LOG_SIZE: usize = 250;
pub fn pumpfun_trade_event_log_decode(data: &[u8]) -> Option<PumpFunTradeEvent> {
if data.len() < PUMPFUN_TRADE_EVENT_LOG_SIZE {
return None;
}
borsh::from_slice::<PumpFunTradeEvent>(&data[..PUMPFUN_TRADE_EVENT_LOG_SIZE]).ok()
}
impl_unified_event!(
PumpFunTradeEvent,
mint,
@@ -184,6 +202,15 @@ pub struct PumpFunMigrateEvent {
pub program: Pubkey,
}
pub const PUMPFUN_MIGRATE_EVENT_LOG_SIZE: usize = 160;
pub fn pumpfun_migrate_event_log_decode(data: &[u8]) -> Option<PumpFunMigrateEvent> {
if data.len() < PUMPFUN_MIGRATE_EVENT_LOG_SIZE {
return None;
}
borsh::from_slice::<PumpFunMigrateEvent>(&data[..PUMPFUN_MIGRATE_EVENT_LOG_SIZE]).ok()
}
impl_unified_event!(
PumpFunMigrateEvent,
user,
@@ -8,7 +8,9 @@ use crate::streaming::event_parser::{
common::{EventMetadata, EventType, ProtocolType},
core::traits::{EventParser, GenericEventParseConfig, GenericEventParser, UnifiedEvent},
protocols::pumpfun::{
discriminators, PumpFunCreateTokenEvent, PumpFunMigrateEvent, PumpFunTradeEvent,
discriminators, pumpfun_create_token_event_log_decode, pumpfun_migrate_event_log_decode,
pumpfun_trade_event_log_decode, PumpFunCreateTokenEvent, PumpFunMigrateEvent,
PumpFunTradeEvent,
},
};
@@ -79,7 +81,7 @@ impl PumpFunEventParser {
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpFunMigrateEvent>(data) {
if let Some(event) = pumpfun_migrate_event_log_decode(data) {
let mut metadata = metadata;
metadata.set_id(format!("{}-{}-{}", metadata.signature, event.user, event.mint));
Some(Box::new(PumpFunMigrateEvent { metadata, ..event }))
@@ -93,7 +95,7 @@ impl PumpFunEventParser {
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpFunCreateTokenEvent>(data) {
if let Some(event) = pumpfun_create_token_event_log_decode(data) {
let mut metadata = metadata;
metadata.set_id(format!(
"{}-{}-{}-{}",
@@ -110,7 +112,7 @@ impl PumpFunEventParser {
data: &[u8],
metadata: EventMetadata,
) -> Option<Box<dyn UnifiedEvent>> {
if let Ok(event) = borsh::from_slice::<PumpFunTradeEvent>(data) {
if let Some(event) = pumpfun_trade_event_log_decode(data) {
let mut metadata = metadata;
metadata.set_id(format!(
"{}-{}-{}-{}",