公共测试版。
preprocessedSubscribe 可在 所有付费计划 上使用,并按 每条消息 0.1 积分 (每交易一条消息)计费。什么是 preprocessedSubscribe?
preprocessedSubscribe 是一种 Helius WebSocket 方法,用于流式传输预处理的交易——在 Solana 交易执行前交付 在达到 processed 承诺级别之前。Helius 聚合了多个执行前的来源——主要是直接在到达验证器时解码的分片,辅以预确认信号——并将其作为单一去重的紧凑二进制消息流交付,而您的系统不需要去分片基础设施。
从预确认信号获取的交易在此馈送上到达的时间比专用的 Preconfirmations 产品要晚,该产品仍是最早接收交易的途径。
它是早期预处理的LaserStream(gRPC)产品的继承者。如果您今天通过gRPC使用预处理的交易,请切换到此方法——它通过简单的WebSocket连接以更低的延迟提供相同等级的数据,并且gRPC的传递将被弃用。
端点
preprocessedSubscribe 从 wss://beta.helius-rpc.com 提供服务 — Helius Gatekeeper 端点 — 而不是 mainnet.helius-rpc.com。使用您的 API 密钥作为查询参数进行身份验证:
订阅
使用preprocessedSubscribe 方法发送一个 JSON-RPC 请求。params 携带账户过滤器并且是必需的 — accountInclude 和 accountRequired 必须在它们之间至少指定一个账户(参见过滤):
过滤
每个订阅都通过params 中的账户过滤器进行范围限定。过滤发生在服务器端,因此您只会收到您关心的交易:
过滤规则:
- 三个过滤器以 AND 逻辑组合。
accountInclude和accountRequired必须在它们之间指定 至少一个账户 — 没有没有过滤的完整流。- 账户是 base58 编码的公钥。每个列表最多接受 5,000 个地址。
地址查找表(ALT)解析
账户过滤器不仅匹配交易的静态账户键 — Helius 在服务器端解析 地址查找表,因此accountInclude、accountExclude 和 accountRequired 也匹配交易通过 ALT 加载的账户。只需传递账户的公钥;无需自行维护 ALT 映射或解析表。
通知有效负载
通知以 二进制 WebSocket 帧(而非 JSON)交付。每个帧以打包的字节布局携带一个交易:
按顺序读取固定的73字节前缀,然后解码剩余字节以读取指令、账户和地址表查询。签名包含在前缀中,因此您可以识别和去重交易,而无需解码整个交易体。
始终首先读取和检查
version 字节。如果 Helius 需要更新有效负载格式,版本将递增 — 进行分支以便您的解码器在模式更改时保持工作。
解码交易
交易字节按网络上观察到的方式转发,采用交易版本的标准线编码。Legacy 和 v0 交易使用bincode 产生的签名优先布局。交易 v1 (SIMD-0385) 使用消息优先布局,签名在末尾,因此 bincode 在 v1 负载上失败。使用能够处理每个版本的解码器:
- Rust:
agave-transaction-view在原地解析传统、v0 和 v1 交易,无需中间复制。这是推荐选项。wincode,当前 Solana SDK 使用的 bincode 兼容序列化器,也会将 v1 解码为VersionedTransaction。 - JavaScript / TypeScript: 确保您的库版本支持交易 v1。旧的
VersionedTransaction.deserialize实现仅处理传统和 v0。使用@solana/kit8.0+ 或@solana/web3.jsv3。参见 交易 v1 支持。
示例
可用数据是什么?
每个通知都包含签署的交易、其第一个签名和其槽位号。由于交付发生在执行之前,流不包括:- 执行状态或错误
- 执行前/后余额或代币余额变化
- 日志消息或内部指令
- 所消耗的计算单元
processed 承诺。
背压
流不会为缓慢的消费者无限期缓冲。如果您的客户端读取过慢且服务器端积压超过4,000条消息,Helius 会关闭连接——您会收到一个干净的 WebSocket 关闭帧。迅速处理帧:将繁重工作(如交易解码和策略逻辑)置于接收循环之外,并在断开连接后重新连接和重新订阅。交付保证
交付是尽力而为,不保证,并且没有历史重播。客户端应:- 在连接关闭后重新连接和重新订阅。
- 通过交易签名去重。
- 将槽位视为观察,而非最终结果。
- 当执行结果很重要时,与已处理或确认的流进行对账。
定价
preprocessedSubscribe 在所有付费计划中可用,每条消息计价为0.1积分——每交付的一笔交易对应一条消息,从您的计划中扣费。详情请参阅积分。
相关
预确认
在交易成为分片之前流式传输——最早的交易信号。
原始分片 (UDP)
通过 UDP 传输的未处理分片数据包。您需要实现去分片。
transactionSubscribe
带有丰富过滤和执行元数据的执行后交易。