什么是预处理交易?
在Solana的体系结构中,交易在完全处理之前需要经过多个阶段:- Shred 接收 → 验证者接收交易碎片(数据片段)
- Shred 解码 → 将碎片解码为原始交易 ← 预处理交易在这里可用
- 交易执行 → 由运行时执行交易
- 元数据生成 → 计算前/后余额、日志和错误信息
- 承诺 → 交易达到已处理/确认/最终状态
尽力交付保证
预处理交易交付是尽力而为,没有保证。我们的目标是99.99%的交付率,但在以下情况下,某些交易可能会丢失:- 基础设施更新和重新部署
- 网络问题或验证者连接问题
- 碎片解码或处理中的边缘情况
可用数据是什么?
预处理交易包括完整的交易消息,但缺少执行元数据:可用数据
- ✅ 交易签名 - 唯一的交易标识符
- ✅ 账户密钥 - 交易引用的所有账户
- ✅ 指令 - 完整的指令数据和程序调用
- ✅ 最近区块哈希 - 交易过期参考
- ✅ 签名 - 所有交易签名
- ✅ 是否为投票交易 - 是否是投票交易
- ✅ 槽位号 - 该交易所在的槽位
数据缺失
- ❌ 交易元数据 - 代币余额变动、前/后余额、交易状态
- ❌ 交易错误 - 我们无法确定交易是否失败
- ❌ 内部指令 - 不包括跨程序调用(CPI)
- ❌ 日志消息 - 程序执行期间生成的日志
- ❌ 消耗的计算单元 - 执行指标不可用
SDK 支持和版本要求
所有 LaserStream SDK 均支持预处理交易订阅:实施示例
JavaScript/TypeScript
JavaScript SDK 提供了具有自动重新连接的专用subscribePreprocessed 函数:
Rust
Rust SDK 提供本机性能:Go
Go SDK 提供惯用的 Go 接口:订阅结构和过滤
请求结构
预处理订阅请求的结构类似于标准订阅,但具有重点过滤器集:响应结构
更新包含完整的交易消息和基本元数据:transaction.transaction 字段包含完整的 Solana 交易结构,包括:
- 消息 - 账户密钥、指令、最近的区块哈希
- 签名 - 所有交易签名
- 地址表查找 - 用于版本化交易
meta 字段。