公开测试版。 预处理交易是 Helius Shred Delivery 产品系列的一部分。对于任何专业版计划或更高级别的用户均可使用,以1 MB 20 个积分的速度计费。通常情况下,预处理交易比
processed 确认级别提前 ~8 毫秒 到达,但代价是执行元数据(参见下面的 权衡)。processed 确认级别提前约 8 毫秒。
本指南解释了何时使用预处理交易、可用的数据以及如何使用 LaserStream SDK 订阅它们(该 SDK 也通过相同的 gRPC 连接提供预处理交易)。
预处理交易在生命周期中的位置
在 Solana 的架构中,交易在完全处理之前需要经过几个阶段:- 分片接收 → 验证器接收交易分片(数据碎片)。← Helius 的 原始分片 (UDP) 在此处传递。
- 分片解码 → 分片被解码为原始交易。← 在此处可用的预处理交易。
- 交易执行 → 交易由运行时执行。
- 元数据生成 → 计算前后余额、日志和错误信息。
- 确认 → 交易达到处理/确认/最终状态。← LaserStream gRPC 和 LaserStream WebSocket 在此处传递。
尽力交付保证
预处理交易交付是尽力而为的,不是保证的。我们目标是99.99%的交付率,但一些交易可能会在以下情况下丢失:- 基础设施更新和重新部署
- 网络问题或验证者连接问题
- 解码或处理shred的边缘情况
可用数据是什么?
预处理交易包含完整的交易消息,但缺乏执行元数据:可用数据
- ✅ 交易签名 - 唯一的交易标识符
- ✅ 账户密钥 - 交易引用的所有账户
- ✅ 指令 - 完整的指令数据和程序调用
- ✅ 最近的区块哈希 - 交易到期参考
- ✅ 签名 - 所有交易签名
- ✅ 是否为投票交易 - 是否这是投票交易
- ✅ 槽位号码 - 包含此交易的槽位
缺失数据
- ❌ 交易元数据 - 代币余额变化、前/后余额、交易状态
- ❌ 交易错误 - 我们无法判断交易是否失败
- ❌ 内部指令 - 不包括跨程序调用(CPIs)
- ❌ 日志信息 - 程序在执行过程中生成的日志
- ❌ 消耗的计算单元 - 执行指标不可用
SDK支持和版本要求
所有LaserStream SDK都支持预处理交易订阅:JavaScript/TypeScript
版本 0.2.8 或更高
Rust
版本 0.1.5 或更高
Go
版本 0.1.0 或更高
实现示例
JavaScript/TypeScript
JavaScript SDK 提供了一个专用的subscribePreprocessed 函数,具备自动重连功能:
Rust
Rust SDK 提供原生性能:Go
Go SDK 提供惯用的 Go 接口:订阅结构和过滤
请求结构
预处理订阅请求遵循与标准订阅类似的结构,但具有一组集中的过滤器:响应结构
更新包含完整的交易消息和基本元数据:transaction.transaction 字段包含完整的 Solana 交易结构,包括:
- 消息 - 帐户密钥、指令、最近的区块哈希
- 签名 - 所有交易签名
- 地址表查找 - 用于版本化交易
meta字段包含执行结果。