diff --git a/Cargo.toml b/Cargo.toml index 980b817..9d20d6d 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer-sdk" -version = "1.5.11" +version = "1.5.12" edition = "2021" authors = ["William ", "sgxiang ", "wei <1415121722@qq.com>"] repository = "https://github.com/0xfnzero/solana-streamer" @@ -21,7 +21,7 @@ sdk-perf-stats = ["sol-parser-sdk/perf-stats"] sdk-ultra-perf = ["sol-parser-sdk/ultra-perf"] [dependencies] -sol-parser-sdk = { version = "0.5.11", default-features = false } +sol-parser-sdk = { version = "0.5.12", default-features = false } solana-sdk = "3.0.0" solana-client = "3.1.12" solana-transaction-status = "3.1.12" diff --git a/src/streaming/event_parser/core/merger_event.rs b/src/streaming/event_parser/core/merger_event.rs index 356218e..f5bf3c1 100644 --- a/src/streaming/event_parser/core/merger_event.rs +++ b/src/streaming/event_parser/core/merger_event.rs @@ -1,10 +1,22 @@ #![allow(clippy::single_match)] use crate::streaming::event_parser::DexEvent; +use sol_parser_sdk::core::events::normalize_pumpfun_quote_mint as normalize_sdk_pumpfun_quote_mint; use solana_sdk::{pubkey, pubkey::Pubkey}; const PUMPFUN_SOLSCAN_SOL_QUOTE_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111111"); +const PUMPFUN_WSOL_QUOTE_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111112"); + +#[inline] +fn normalize_pumpfun_quote_mint(quote_mint: Pubkey) -> Pubkey { + let quote_mint = normalize_sdk_pumpfun_quote_mint(quote_mint); + if quote_mint == PUMPFUN_WSOL_QUOTE_MINT { + PUMPFUN_SOLSCAN_SOL_QUOTE_MINT + } else { + quote_mint + } +} #[inline] fn fill_pubkey(to: &mut Pubkey, from: Pubkey) { @@ -13,15 +25,6 @@ fn fill_pubkey(to: &mut Pubkey, from: Pubkey) { } } -#[inline] -fn normalize_pumpfun_quote_mint(quote_mint: Pubkey) -> Pubkey { - if quote_mint == Pubkey::default() { - PUMPFUN_SOLSCAN_SOL_QUOTE_MINT - } else { - quote_mint - } -} - #[inline] fn fill_pumpfun_quote_mint(to: &mut Pubkey, from: Pubkey) { let from = normalize_pumpfun_quote_mint(from); @@ -927,4 +930,25 @@ mod tests { _ => panic!("expected PumpFunTradeEvent"), } } + + #[test] + fn pumpfun_merge_treats_wsol_quote_as_sol_sentinel() { + let mut instruction_event = DexEvent::PumpFunTradeEvent(PumpFunTradeEvent { + quote_mint: PUMPFUN_SOLSCAN_SOL_QUOTE_MINT, + ..Default::default() + }); + let cpi_log_event = DexEvent::PumpFunTradeEvent(PumpFunTradeEvent { + quote_mint: PUMPFUN_WSOL_QUOTE_MINT, + ..Default::default() + }); + + merge(&mut instruction_event, cpi_log_event); + + match instruction_event { + DexEvent::PumpFunTradeEvent(t) => { + assert_eq!(t.quote_mint, PUMPFUN_SOLSCAN_SOL_QUOTE_MINT) + } + _ => panic!("expected PumpFunTradeEvent"), + } + } } diff --git a/src/streaming/parser_sdk_bridge/pump_pumpswap.rs b/src/streaming/parser_sdk_bridge/pump_pumpswap.rs index b2c32f4..73d7a48 100644 --- a/src/streaming/parser_sdk_bridge/pump_pumpswap.rs +++ b/src/streaming/parser_sdk_bridge/pump_pumpswap.rs @@ -20,6 +20,7 @@ use crate::streaming::event_parser::protocols::pumpswap::events::{ }; use crate::streaming::event_parser::DexEvent; use prost_types::Timestamp; +use sol_parser_sdk::core::events::normalize_pumpfun_quote_mint as normalize_sdk_pumpfun_quote_mint; use solana_sdk::{pubkey, pubkey::Pubkey}; use super::adapt::adapt_pm; @@ -27,10 +28,12 @@ use super::program_ids::{pump_program, pumpswap_program}; const PUMPFUN_SOLSCAN_SOL_QUOTE_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111111"); +const PUMPFUN_WSOL_QUOTE_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111112"); #[inline] fn normalize_pumpfun_quote_mint(quote_mint: Pubkey) -> Pubkey { - if quote_mint == Pubkey::default() { + let quote_mint = normalize_sdk_pumpfun_quote_mint(quote_mint); + if quote_mint == PUMPFUN_WSOL_QUOTE_MINT { PUMPFUN_SOLSCAN_SOL_QUOTE_MINT } else { quote_mint @@ -858,4 +861,25 @@ mod tests { _ => panic!("expected PumpFunTradeEvent"), } } + + #[test] + fn pumpfun_wsol_quote_mint_uses_solscan_sol_sentinel() { + let ev = pumpfun_trade_from_parser_with_event_type( + sol_parser_sdk::core::events::PumpFunTradeEvent { + is_buy: true, + quote_mint: PUMPFUN_WSOL_QUOTE_MINT, + ..Default::default() + }, + None, + 0, + EventType::PumpFunBuy, + ); + + match ev { + DexEvent::PumpFunTradeEvent(t) => { + assert_eq!(t.quote_mint.to_string(), "So11111111111111111111111111111111111111111"); + } + _ => panic!("expected PumpFunTradeEvent"), + } + } }