mirror of
https://github.com/0xfnzero/solana-streamer.git
synced 2026-08-21 04:48:07 +00:00
fix: expose PumpFun create quote accounts
This commit is contained in:
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-streamer-sdk"
|
name = "solana-streamer-sdk"
|
||||||
version = "1.5.13"
|
version = "1.5.14"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["William <byteblock6@gmail.com>", "sgxiang <sgxiang@gmail.com>", "wei <1415121722@qq.com>"]
|
authors = ["William <byteblock6@gmail.com>", "sgxiang <sgxiang@gmail.com>", "wei <1415121722@qq.com>"]
|
||||||
repository = "https://github.com/0xfnzero/solana-streamer"
|
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"]
|
sdk-ultra-perf = ["sol-parser-sdk/ultra-perf"]
|
||||||
|
|
||||||
[dependencies]
|
[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-sdk = "3.0.0"
|
||||||
solana-client = "3.1.12"
|
solana-client = "3.1.12"
|
||||||
solana-transaction-status = "3.1.12"
|
solana-transaction-status = "3.1.12"
|
||||||
|
|||||||
@@ -124,30 +124,34 @@ Add the dependency to your `Cargo.toml`:
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
# Add to your Cargo.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
|
### Use crates.io
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# Add to your Cargo.toml
|
# Add to your Cargo.toml
|
||||||
solana-streamer-sdk = "1.5.13"
|
solana-streamer-sdk = "1.5.14"
|
||||||
```
|
```
|
||||||
|
|
||||||
Parser backend features:
|
Parser backend features:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# Default: sol-parser-sdk parse-borsh backend
|
# 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
|
# 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
|
## 🔄 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
|
### 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.
|
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
@@ -123,30 +123,34 @@ git clone https://github.com/0xfnzero/solana-streamer
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
# 添加到您的 Cargo.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
|
### 使用 crates.io
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# 添加到您的 Cargo.toml
|
# 添加到您的 Cargo.toml
|
||||||
solana-streamer-sdk = "1.5.13"
|
solana-streamer-sdk = "1.5.14"
|
||||||
```
|
```
|
||||||
|
|
||||||
解析后端 feature:
|
解析后端 feature:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# 默认:sol-parser-sdk parse-borsh 后端
|
# 默认:sol-parser-sdk parse-borsh 后端
|
||||||
solana-streamer-sdk = "1.5.13"
|
solana-streamer-sdk = "1.5.14"
|
||||||
|
|
||||||
# 面向低延迟 Bot 的 zero-copy 解析后端
|
# 面向低延迟 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
|
||||||
|
|
||||||
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`)。
|
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;
|
e.token_program = cpie.token_program;
|
||||||
}
|
}
|
||||||
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
|
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);
|
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
|
||||||
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
||||||
e.is_cashback_enabled |= cpie.is_cashback_enabled;
|
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_u64(&mut e.token_total_supply, cpie.token_total_supply);
|
||||||
fill_pubkey(&mut e.token_program, cpie.token_program);
|
fill_pubkey(&mut e.token_program, cpie.token_program);
|
||||||
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
|
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);
|
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
|
||||||
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
||||||
e.is_cashback_enabled |= cpie.is_cashback_enabled;
|
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;
|
e.token_program = cpie.token_program;
|
||||||
}
|
}
|
||||||
fill_pumpfun_quote_mint(&mut e.quote_mint, cpie.quote_mint);
|
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);
|
fill_u64(&mut e.virtual_quote_reserves, cpie.virtual_quote_reserves);
|
||||||
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
e.is_mayhem_mode |= cpie.is_mayhem_mode;
|
||||||
e.is_cashback_enabled |= cpie.is_cashback_enabled;
|
e.is_cashback_enabled |= cpie.is_cashback_enabled;
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ pub struct PumpFunCreateTokenEvent {
|
|||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
pub quote_mint: Pubkey,
|
pub quote_mint: Pubkey,
|
||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
|
pub quote_vault: Pubkey,
|
||||||
|
#[borsh(skip)]
|
||||||
|
pub quote_token_program: Pubkey,
|
||||||
|
#[borsh(skip)]
|
||||||
pub virtual_quote_reserves: u64,
|
pub virtual_quote_reserves: u64,
|
||||||
/// Original PumpFun instruction name: "create" or "create_v2".
|
/// Original PumpFun instruction name: "create" or "create_v2".
|
||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
@@ -93,6 +97,10 @@ pub struct PumpFunCreateV2TokenEvent {
|
|||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
pub quote_mint: Pubkey,
|
pub quote_mint: Pubkey,
|
||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
|
pub quote_vault: Pubkey,
|
||||||
|
#[borsh(skip)]
|
||||||
|
pub quote_token_program: Pubkey,
|
||||||
|
#[borsh(skip)]
|
||||||
pub virtual_quote_reserves: u64,
|
pub virtual_quote_reserves: u64,
|
||||||
#[borsh(skip)]
|
#[borsh(skip)]
|
||||||
pub mint_authority: Pubkey,
|
pub mint_authority: Pubkey,
|
||||||
|
|||||||
@@ -152,6 +152,8 @@ mod tests {
|
|||||||
let global = Pubkey::new_unique();
|
let global = Pubkey::new_unique();
|
||||||
let event_authority = Pubkey::new_unique();
|
let event_authority = Pubkey::new_unique();
|
||||||
let quote_mint = sol_parser_sdk::core::events::PUMPFUN_WSOL_QUOTE_MINT;
|
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 {
|
let c = PbPumpCreateV2 {
|
||||||
metadata: EventMetadata {
|
metadata: EventMetadata {
|
||||||
signature: Signature::default(),
|
signature: Signature::default(),
|
||||||
@@ -167,6 +169,8 @@ mod tests {
|
|||||||
global,
|
global,
|
||||||
event_authority,
|
event_authority,
|
||||||
quote_mint,
|
quote_mint,
|
||||||
|
quote_vault,
|
||||||
|
quote_token_program,
|
||||||
is_mayhem_mode: true,
|
is_mayhem_mode: true,
|
||||||
is_cashback_enabled: true,
|
is_cashback_enabled: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@@ -180,6 +184,8 @@ mod tests {
|
|||||||
assert_eq!(st.global, global);
|
assert_eq!(st.global, global);
|
||||||
assert_eq!(st.event_authority, event_authority);
|
assert_eq!(st.event_authority, event_authority);
|
||||||
assert_eq!(st.quote_mint, quote_mint);
|
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_eq!(st.ix_name, "create_v2");
|
||||||
assert!(st.is_mayhem_mode);
|
assert!(st.is_mayhem_mode);
|
||||||
assert!(st.is_cashback_enabled);
|
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_mayhem_mode: c.is_mayhem_mode,
|
||||||
is_cashback_enabled: c.is_cashback_enabled,
|
is_cashback_enabled: c.is_cashback_enabled,
|
||||||
quote_mint: normalize_pumpfun_quote_mint(c.quote_mint),
|
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,
|
virtual_quote_reserves: c.virtual_quote_reserves,
|
||||||
ix_name: "create".to_string(),
|
ix_name: "create".to_string(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@@ -81,6 +83,8 @@ pub(crate) fn pumpfun_create_token_from_parser_v2(
|
|||||||
is_mayhem_mode: c.is_mayhem_mode,
|
is_mayhem_mode: c.is_mayhem_mode,
|
||||||
is_cashback_enabled: c.is_cashback_enabled,
|
is_cashback_enabled: c.is_cashback_enabled,
|
||||||
quote_mint: normalize_pumpfun_quote_mint(c.quote_mint),
|
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,
|
virtual_quote_reserves: c.virtual_quote_reserves,
|
||||||
ix_name: "create_v2".to_string(),
|
ix_name: "create_v2".to_string(),
|
||||||
mint_authority: c.mint_authority,
|
mint_authority: c.mint_authority,
|
||||||
|
|||||||
Reference in New Issue
Block a user