diff --git a/Cargo.toml b/Cargo.toml index abf0292..c062ab6 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-streamer-sdk" -version = "1.5.0" +version = "1.5.1" edition = "2021" authors = ["William ", "sgxiang ", "wei <1415121722@qq.com>"] repository = "https://github.com/0xfnzero/solana-streamer" @@ -15,13 +15,13 @@ crate-type = ["cdylib", "rlib"] [features] default = ["sdk-parse-borsh"] sdk-parse-borsh = ["sol-parser-sdk/parse-borsh"] -# If both parser backend features are enabled, sol-parser-sdk 0.5.0+ uses zero-copy. +# If both parser backend features are enabled, sol-parser-sdk 0.5.1+ uses zero-copy. sdk-parse-zero-copy = ["sol-parser-sdk/parse-zero-copy"] sdk-perf-stats = ["sol-parser-sdk/perf-stats"] sdk-ultra-perf = ["sol-parser-sdk/ultra-perf"] [dependencies] -sol-parser-sdk = { version = "0.5.0", default-features = false } +sol-parser-sdk = { version = "0.5.1", default-features = false } solana-sdk = "3.0.0" solana-client = "3.1.12" solana-transaction-status = "3.1.12" diff --git a/README.md b/README.md index 832ae0d..5c26760 100755 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ - **Real-time Event Streaming**: Subscribe to live trading events from multiple Solana DEX protocols - **SDK-backed Parser Core**: Transaction, RPC, account, and ShredStream parsing are backed by `sol-parser-sdk` - **Yellowstone gRPC Support**: High-performance event subscription using Yellowstone gRPC -- **ShredStream Support**: Alternative event streaming using ShredStream protocol +- **ShredStream Support**: Alternative event streaming using ShredStream protocol; ALT-loaded accounts are parsed best-effort with default account placeholders - **Unified Event Interface**: Consistent event handling across all supported protocols ### Multi-Protocol Support @@ -123,30 +123,34 @@ Add the dependency to your `Cargo.toml`: ```toml # Add to your Cargo.toml -solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.0" } +solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.1" } ``` ### Use crates.io ```toml # Add to your Cargo.toml -solana-streamer-sdk = "1.5.0" +solana-streamer-sdk = "1.5.1" ``` Parser backend features: ```toml # Default: sol-parser-sdk parse-borsh backend -solana-streamer-sdk = "1.5.0" +solana-streamer-sdk = "1.5.1" # Zero-copy parser backend for latency-sensitive bots -solana-streamer-sdk = { version = "1.5.0", default-features = false, features = ["sdk-parse-zero-copy"] } +solana-streamer-sdk = { version = "1.5.1", 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.0+` uses the zero-copy backend. +If both `sdk-parse-borsh` and `sdk-parse-zero-copy` are enabled, `sol-parser-sdk 0.5.1+` uses the zero-copy backend. ## 🔄 Migration Guide +### Upgrading to v1.5.1 + +Version 1.5.1 uses `sol-parser-sdk 0.5.1` from crates.io. It improves ShredStream ALT handling by parsing outer instructions best-effort with default placeholders for ALT-loaded accounts, adds dropped-event queue observability, and keeps CPI/inner-only events documented as a ShredStream limitation. + ### Upgrading to v1.5.0 Version 1.5.0 uses `sol-parser-sdk 0.5.0`, wires Raydium CLMM account parsing through the SDK bridge, and reduces ordered-buffer allocation/move overhead in low-latency delivery paths. `sol-parser-sdk 0.4.19` and `solana-streamer-sdk 1.4.14` were superseded because adding public parser event variants belongs in the 0.5 line. diff --git a/README_CN.md b/README_CN.md index 45a56d2..4b6cad0 100644 --- a/README_CN.md +++ b/README_CN.md @@ -69,7 +69,7 @@ - **实时事件流**: 订阅多个 Solana DEX 协议的实时交易事件 - **SDK 底层解析核心**: 交易、RPC、账户和 ShredStream 解析都优先复用 `sol-parser-sdk` - **Yellowstone gRPC 支持**: 使用 Yellowstone gRPC 进行高性能事件订阅 -- **ShredStream 支持**: 使用 ShredStream 协议进行替代事件流传输 +- **ShredStream 支持**: 使用 ShredStream 协议进行替代事件流传输;ALT-loaded 账户会以默认账户占位并尽量解析外层事件 - **统一事件接口**: 在所有支持的协议中保持一致的事件处理 ### 多协议支持 @@ -122,30 +122,34 @@ git clone https://github.com/0xfnzero/solana-streamer ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.0" } +solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.1" } ``` ### 使用 crates.io ```toml # 添加到您的 Cargo.toml -solana-streamer-sdk = "1.5.0" +solana-streamer-sdk = "1.5.1" ``` 解析后端 feature: ```toml # 默认:sol-parser-sdk parse-borsh 后端 -solana-streamer-sdk = "1.5.0" +solana-streamer-sdk = "1.5.1" # 面向低延迟 Bot 的 zero-copy 解析后端 -solana-streamer-sdk = { version = "1.5.0", default-features = false, features = ["sdk-parse-zero-copy"] } +solana-streamer-sdk = { version = "1.5.1", default-features = false, features = ["sdk-parse-zero-copy"] } ``` -如果同时启用 `sdk-parse-borsh` 和 `sdk-parse-zero-copy`,`sol-parser-sdk 0.5.0+` 会优先使用 zero-copy 后端。 +如果同时启用 `sdk-parse-borsh` 和 `sdk-parse-zero-copy`,`sol-parser-sdk 0.5.1+` 会优先使用 zero-copy 后端。 ## 🔄 迁移指南 +### 升级到 v1.5.1 + +v1.5.1 使用 crates.io 上的 `sol-parser-sdk 0.5.1`。该版本改进 ShredStream 的 ALT 处理:ALT-loaded 账户会以默认账户占位,外层指令按 data/discriminator 尽量解析;同时增加队列满时的 dropped event 可观测性,并明确 CPI/inner-only 事件仍是 ShredStream 的固有限制。 + ### 升级到 v1.5.0 v1.5.0 使用 `sol-parser-sdk 0.5.0`,打通 Raydium CLMM 账户解析的 SDK bridge,并降低有序缓冲低延迟投递路径中的分配和搬移开销。`sol-parser-sdk 0.4.19` 和 `solana-streamer-sdk 1.4.14` 已由 v1.5.0 取代,因为新增公开 parser event variant 应放到 0.5 版本线。 diff --git a/docs/SHREDSTREAM_LIMITATIONS.md b/docs/SHREDSTREAM_LIMITATIONS.md index 35bfef0..91137c3 100644 --- a/docs/SHREDSTREAM_LIMITATIONS.md +++ b/docs/SHREDSTREAM_LIMITATIONS.md @@ -23,8 +23,9 @@ ShredStream 路径仍为下面的原始交易解析限制,不使用上述日 ### 2.1 使用 Address Lookup Tables (ALT) 的交易 -- **现象**:指令中的账户索引指向「static + loaded」的完整列表,shred 只传入 static,越界索引会被填成 `Pubkey::default()`(11111...)。 -- **影响协议/指令**:所有依赖「按索引取账户」的指令,在交易使用 ALT 时都可能出现错误或默认账户。 +- **现象**:指令中的账户索引指向「static + loaded」的完整列表,shred 只传入 static。当前 ShredStream 路径会尽量解析外层指令;若某个指令账户来自 ALT-loaded keys,会以 `Pubkey::default()`(11111...)占位。 +- **影响协议/指令**:所有依赖「按索引取账户」的指令,在交易使用 ALT 时都可能出现错误或默认账户;能靠指令 data / discriminator 识别的事件会 best-effort 产出。 +- **program id 也来自 ALT 时**:无法从 shred 恢复真实程序 ID,会按启用的协议/filter 进行 discriminator-only best-effort 解析。若不同协议 discriminator 碰撞,建议使用窄 filter 降低误判或多候选输出风险。 - **典型表现**: - **PumpFun**:Create / CreateV2 的 token_program、global、event_authority 等为 11111...;Buy/Sell 的 creator_vault、token_program 等可能错误。 - **PumpSwap / Bonk / Raydium / Meteora**:依赖高索引账户的指令同样可能得到错误或 default 账户。 @@ -58,7 +59,7 @@ ShredStream 路径仍为下面的原始交易解析限制,不使用上述日 ## 3. 使用建议 - 需要**完整、正确**的账户与 log 字段(reserves、timestamp、amounts、swap_data 等)时,使用 **gRPC 订阅**。 -- Shredstream 更适合:对延迟更敏感、可接受「仅指令层 + 部分字段缺失/默认」的场景,或确认交易**未使用 ALT** 时的账户解析。 +- Shredstream 更适合:对延迟更敏感、可接受「仅指令层 + 部分字段缺失/默认」的场景;使用 ALT 的交易会 best-effort 解析,但 ALT-loaded 账户字段可能为 default。 ## 4. 各事件 Shred 路径字段完整性