Release parser SDK bridge updates

This commit is contained in:
0xfnzero
2026-05-25 01:48:41 +08:00
parent 45ab6eb061
commit aaa10a69f7
8 changed files with 86 additions and 25 deletions
@@ -253,6 +253,7 @@ fn push_streamer_event_sdk_grpc_types(t: &EventType, out: &mut Vec<SdkGrpcEventT
St::TokenAccount | St::TokenInfo => out.push(Sdk::TokenAccount),
St::NonceAccount => out.push(Sdk::NonceAccount),
St::AccountPumpFunGlobal => out.push(Sdk::AccountPumpFunGlobal),
St::AccountPumpFunBondingCurve => out.push(Sdk::AccountPumpFunBondingCurve),
St::AccountPumpSwapGlobalConfig => out.push(Sdk::AccountPumpSwapGlobalConfig),
St::AccountPumpSwapPool => out.push(Sdk::AccountPumpSwapPool),
_ => return false,
+19 -7
View File
@@ -101,6 +101,9 @@ fn streamer_account_event_to_sdk_types(t: &EventType) -> Vec<SdkGrpcEventType> {
EventType::TokenAccount | EventType::TokenInfo => vec![SdkGrpcEventType::TokenAccount],
EventType::NonceAccount => vec![SdkGrpcEventType::NonceAccount],
EventType::AccountPumpFunGlobal => vec![SdkGrpcEventType::AccountPumpFunGlobal],
EventType::AccountPumpFunBondingCurve => {
vec![SdkGrpcEventType::AccountPumpFunBondingCurve]
}
EventType::AccountPumpSwapGlobalConfig => {
vec![SdkGrpcEventType::AccountPumpSwapGlobalConfig]
}
@@ -121,13 +124,22 @@ fn dedup_sdk_grpc_event_types(v: &mut Vec<SdkGrpcEventType>) {
}
fn normalize_account_event(event: &mut DexEvent, account: &AccountPretty) {
if let DexEvent::PumpFunGlobalAccountEvent(e) = event {
e.executable = account.executable;
e.lamports = account.lamports;
e.owner = account.owner;
e.rent_epoch = account.rent_epoch;
if let Some(flag) = account.data.get(PUMPFUN_GLOBAL_CASHBACK_OFFSET) {
e.global.is_cashback_enabled = *flag != 0;
match event {
DexEvent::PumpFunGlobalAccountEvent(e) => {
e.executable = account.executable;
e.lamports = account.lamports;
e.owner = account.owner;
e.rent_epoch = account.rent_epoch;
if let Some(flag) = account.data.get(PUMPFUN_GLOBAL_CASHBACK_OFFSET) {
e.global.is_cashback_enabled = *flag != 0;
}
}
DexEvent::PumpFunBondingCurveAccountEvent(e) => {
e.executable = account.executable;
e.lamports = account.lamports;
e.owner = account.owner;
e.rent_epoch = account.rent_epoch;
}
_ => {}
}
}
@@ -215,6 +215,23 @@ pub(crate) fn convert_parser_event(
);
Some(DexEvent::PumpFunGlobalAccountEvent(pumpfun_global_account_from_parser(e, meta)))
}
PbDexEvent::PumpFunBondingCurveAccount(e) => {
let meta = adapt_pm(
e.metadata.clone(),
bt,
recv_wall_us,
ProtocolType::PumpFun,
EventType::AccountPumpFunBondingCurve,
pump_program(),
);
Some(DexEvent::PumpFunBondingCurveAccountEvent(
pumpfun_bonding_curve_account_from_parser(e, meta),
))
}
PbDexEvent::PumpFunFeeConfigAccount(_)
| PbDexEvent::PumpFunSharingConfigAccount(_)
| PbDexEvent::PumpFunGlobalVolumeAccumulatorAccount(_)
| PbDexEvent::PumpFunUserVolumeAccumulatorAccount(_) => None,
PbDexEvent::PumpSwapTrade(t) => pumpswap_trade_from_parser(t, bt, recv_wall_us),
PbDexEvent::PumpSwapBuy(b) => {
+4
View File
@@ -77,6 +77,8 @@ mod tests {
t.program = Pubkey::new_unique();
t.global_volume_accumulator = Pubkey::new_unique();
t.user_volume_accumulator = Pubkey::new_unique();
t.associated_creator_vault = Pubkey::new_unique();
t.sharing_config = Pubkey::new_unique();
t.fee_config = Pubkey::new_unique();
t.fee_program = Pubkey::new_unique();
t.quote_mint = Pubkey::new_unique();
@@ -108,6 +110,8 @@ mod tests {
assert_ne!(st.program, Pubkey::default());
assert_ne!(st.global_volume_accumulator, Pubkey::default());
assert_ne!(st.user_volume_accumulator, Pubkey::default());
assert_ne!(st.associated_creator_vault, Pubkey::default());
assert_ne!(st.sharing_config, Pubkey::default());
assert_ne!(st.fee_config, Pubkey::default());
assert_ne!(st.fee_program, Pubkey::default());
assert_ne!(st.quote_mint, Pubkey::default());
@@ -7,10 +7,11 @@ use crate::streaming::event_parser::protocols::pumpfun::events::{
PumpFeesRevokeFeeSharingAuthorityEvent, PumpFeesShareholder,
PumpFeesTransferFeeSharingAuthorityEvent, PumpFeesUpdateAdminEvent,
PumpFeesUpdateFeeConfigEvent, PumpFeesUpdateFeeSharesEvent, PumpFeesUpsertFeeTiersEvent,
PumpFunCreateTokenEvent, PumpFunCreateV2TokenEvent, PumpFunGlobalAccountEvent,
PumpFunMigrateBondingCurveCreatorEvent, PumpFunMigrateEvent, PumpFunTradeEvent,
PumpFunBondingCurveAccountEvent, PumpFunCreateTokenEvent, PumpFunCreateV2TokenEvent,
PumpFunGlobalAccountEvent, PumpFunMigrateBondingCurveCreatorEvent, PumpFunMigrateEvent,
PumpFunTradeEvent,
};
use crate::streaming::event_parser::protocols::pumpfun::types::Global;
use crate::streaming::event_parser::protocols::pumpfun::types::{BondingCurve, Global};
use crate::streaming::event_parser::protocols::pumpswap::events::{
PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent, PumpSwapSellEvent,
PumpSwapWithdrawEvent,
@@ -332,6 +333,32 @@ pub(crate) fn pumpfun_global_account_from_parser(
}
}
pub(crate) fn pumpfun_bonding_curve_account_from_parser(
e: sol_parser_sdk::core::events::PumpFunBondingCurveAccountEvent,
meta: EventMetadata,
) -> PumpFunBondingCurveAccountEvent {
PumpFunBondingCurveAccountEvent {
metadata: meta,
pubkey: e.pubkey,
executable: false,
lamports: 0,
owner: pump_program(),
rent_epoch: 0,
bonding_curve: BondingCurve {
virtual_token_reserves: e.bonding_curve.virtual_token_reserves,
// Streamer keeps the historical SOL field names; SDK v0.4.15 uses quote reserves.
virtual_sol_reserves: e.bonding_curve.virtual_quote_reserves,
real_token_reserves: e.bonding_curve.real_token_reserves,
real_sol_reserves: e.bonding_curve.real_quote_reserves,
token_total_supply: e.bonding_curve.token_total_supply,
complete: e.bonding_curve.complete,
creator: e.bonding_curve.creator,
is_mayhem_mode: e.bonding_curve.is_mayhem_mode,
is_cashback_coin: e.bonding_curve.is_cashback_coin,
},
}
}
pub(crate) fn pumpswap_buy_full_from_parser(
b: sol_parser_sdk::core::events::PumpSwapBuyEvent,
meta: EventMetadata,