fix: expose PumpFun create quote accounts

This commit is contained in:
0xfnzero
2026-06-12 01:08:33 +08:00
parent 7131fb3aa1
commit ad166ae62e
7 changed files with 44 additions and 12 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "solana-streamer-sdk"
version = "1.5.13"
version = "1.5.14"
edition = "2021"
authors = ["William <byteblock6@gmail.com>", "sgxiang <sgxiang@gmail.com>", "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.13", default-features = false }
sol-parser-sdk = { version = "0.5.14", default-features = false }
solana-sdk = "3.0.0"
solana-client = "3.1.12"
solana-transaction-status = "3.1.12"
+9 -5
View File
@@ -124,30 +124,34 @@ Add the dependency to your `Cargo.toml`:
```toml
# Add to your Cargo.toml
solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.13" }
solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.14" }
```
### Use crates.io
```toml
# Add to your Cargo.toml
solana-streamer-sdk = "1.5.13"
solana-streamer-sdk = "1.5.14"
```
Parser backend features:
```toml
# Default: sol-parser-sdk parse-borsh backend
solana-streamer-sdk = "1.5.13"
solana-streamer-sdk = "1.5.14"
# Zero-copy parser backend for latency-sensitive bots
solana-streamer-sdk = { version = "1.5.13", default-features = false, features = ["sdk-parse-zero-copy"] }
solana-streamer-sdk = { version = "1.5.14", default-features = false, features = ["sdk-parse-zero-copy"] }
```
If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk 0.5.13+` uses the zero-copy backend.
If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk 0.5.14+` uses the zero-copy backend.
## 🔄 Migration Guide
### Upgrading to v1.5.14
Version 1.5.14 uses `sol-parser-sdk 0.5.14` from crates.io. Pump.fun canonical create events now expose `quote_mint`, `quote_vault`, and `quote_token_program` for `create_v2` quote pools, including USDC pools, across gRPC/RPC parser bridge and ShredStream-backed SDK output.
### Upgrading to v1.5.13
Version 1.5.13 uses `sol-parser-sdk 0.5.13` from crates.io. Pump.fun gRPC and ShredStream create/trade outputs now preserve real WSOL quote mints (`So11111111111111111111111111111111111111112`). The Solscan SOL sentinel (`So11111111111111111111111111111111111111111`) is used only when legacy data omits a quote mint.
+9 -5
View File
@@ -123,30 +123,34 @@ git clone https://github.com/0xfnzero/solana-streamer
```toml
# 添加到您的 Cargo.toml
solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.13" }
solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.14" }
```
### 使用 crates.io
```toml
# 添加到您的 Cargo.toml
solana-streamer-sdk = "1.5.13"
solana-streamer-sdk = "1.5.14"
```
解析后端 feature
```toml
# 默认:sol-parser-sdk parse-borsh 后端
solana-streamer-sdk = "1.5.13"
solana-streamer-sdk = "1.5.14"
# 面向低延迟 Bot 的 zero-copy 解析后端
solana-streamer-sdk = { version = "1.5.13", default-features = false, features = ["sdk-parse-zero-copy"] }
solana-streamer-sdk = { version = "1.5.14", default-features = false, features = ["sdk-parse-zero-copy"] }
```
如果同时启用 `sdk-parse-borsh``sdk-parse-zero-copy``sol-parser-sdk 0.5.13+` 会优先使用 zero-copy 后端。
如果同时启用 `sdk-parse-borsh``sdk-parse-zero-copy``sol-parser-sdk 0.5.14+` 会优先使用 zero-copy 后端。
## 🔄 迁移指南
### 升级到 v1.5.14
v1.5.14 使用 crates.io 上的 `sol-parser-sdk 0.5.14`。Pump.fun canonical create 事件现在会为 `create_v2` quote 池暴露 `quote_mint``quote_vault``quote_token_program`,包括 USDC 池;gRPC/RPC parser bridge 和 ShredStream-backed SDK 输出都会保留这些字段。
### 升级到 v1.5.13
v1.5.13 使用 crates.io 上的 `sol-parser-sdk 0.5.13`。Pump.fun gRPC 和 ShredStream create/trade 输出现在会保留真实 WSOL quote mint`So11111111111111111111111111111111111111112`)。只有 legacy 数据缺失 quote mint 时,才使用 Solscan SOL sentinel`So11111111111111111111111111111111111111111`)。
@@ -176,6 +176,8 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) {
e.token_program = cpie.token_program;
}
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
fill_pubkey(&mut e.quote_vault, cpie.quote_vault);
fill_pubkey(&mut e.quote_token_program, cpie.quote_token_program);
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
e.is_mayhem_mode |= cpie.is_mayhem_mode;
e.is_cashback_enabled |= cpie.is_cashback_enabled;
@@ -198,6 +200,8 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) {
fill_u64(&mut e.token_total_supply, cpie.token_total_supply);
fill_pubkey(&mut e.token_program, cpie.token_program);
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
fill_pubkey(&mut e.quote_vault, cpie.quote_vault);
fill_pubkey(&mut e.quote_token_program, cpie.quote_token_program);
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
e.is_mayhem_mode |= cpie.is_mayhem_mode;
e.is_cashback_enabled |= cpie.is_cashback_enabled;
@@ -237,6 +241,8 @@ pub fn merge(instruction_event: &mut DexEvent, cpi_log_event: DexEvent) {
e.token_program = cpie.token_program;
}
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
fill_pubkey(&mut e.quote_vault, cpie.quote_vault);
fill_pubkey(&mut e.quote_token_program, cpie.quote_token_program);
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
e.is_mayhem_mode |= cpie.is_mayhem_mode;
e.is_cashback_enabled |= cpie.is_cashback_enabled;
@@ -31,6 +31,10 @@ pub struct PumpFunCreateTokenEvent {
#[borsh(skip)]
pub quote_mint: Pubkey,
#[borsh(skip)]
pub quote_vault: Pubkey,
#[borsh(skip)]
pub quote_token_program: Pubkey,
#[borsh(skip)]
pub virtual_quote_reserves: u64,
/// Original PumpFun instruction name: "create" or "create_v2".
#[borsh(skip)]
@@ -93,6 +97,10 @@ pub struct PumpFunCreateV2TokenEvent {
#[borsh(skip)]
pub quote_mint: Pubkey,
#[borsh(skip)]
pub quote_vault: Pubkey,
#[borsh(skip)]
pub quote_token_program: Pubkey,
#[borsh(skip)]
pub virtual_quote_reserves: u64,
#[borsh(skip)]
pub mint_authority: Pubkey,
+6
View File
@@ -152,6 +152,8 @@ mod tests {
let global = Pubkey::new_unique();
let event_authority = Pubkey::new_unique();
let quote_mint = sol_parser_sdk::core::events::PUMPFUN_WSOL_QUOTE_MINT;
let quote_vault = Pubkey::new_unique();
let quote_token_program = Pubkey::new_unique();
let c = PbPumpCreateV2 {
metadata: EventMetadata {
signature: Signature::default(),
@@ -167,6 +169,8 @@ mod tests {
global,
event_authority,
quote_mint,
quote_vault,
quote_token_program,
is_mayhem_mode: true,
is_cashback_enabled: true,
..Default::default()
@@ -180,6 +184,8 @@ mod tests {
assert_eq!(st.global, global);
assert_eq!(st.event_authority, event_authority);
assert_eq!(st.quote_mint, quote_mint);
assert_eq!(st.quote_vault, quote_vault);
assert_eq!(st.quote_token_program, quote_token_program);
assert_eq!(st.ix_name, "create_v2");
assert!(st.is_mayhem_mode);
assert!(st.is_cashback_enabled);
@@ -53,6 +53,8 @@ pub(crate) fn pumpfun_create_token_from_parser(
is_mayhem_mode: c.is_mayhem_mode,
is_cashback_enabled: c.is_cashback_enabled,
quote_mint: normalize_pumpfun_quote_mint(c.quote_mint),
quote_vault: c.quote_vault,
quote_token_program: c.quote_token_program,
virtual_quote_reserves: c.virtual_quote_reserves,
ix_name: "create".to_string(),
..Default::default()
@@ -81,6 +83,8 @@ pub(crate) fn pumpfun_create_token_from_parser_v2(
is_mayhem_mode: c.is_mayhem_mode,
is_cashback_enabled: c.is_cashback_enabled,
quote_mint: normalize_pumpfun_quote_mint(c.quote_mint),
quote_vault: c.quote_vault,
quote_token_program: c.quote_token_program,
virtual_quote_reserves: c.virtual_quote_reserves,
ix_name: "create_v2".to_string(),
mint_authority: c.mint_authority,