Skip to main content
公共测试版。 preprocessedSubscribe 可在 所有付费计划 上使用,并按 每条消息 0.1 积分 (每交易一条消息)计费。

什么是 preprocessedSubscribe?

preprocessedSubscribe 是一种 Helius WebSocket 方法,用于流式传输预处理的交易——在 Solana 交易执行前交付 在达到 processed 承诺级别之前。Helius 聚合了多个执行前的来源——主要是直接在到达验证器时解码的分片,辅以预确认信号——并将其作为单一去重的紧凑二进制消息流交付,而您的系统不需要去分片基础设施。 从预确认信号获取的交易在此馈送上到达的时间比专用的 Preconfirmations 产品要晚,该产品仍是最早接收交易的途径。 它是早期预处理的LaserStream(gRPC)产品的继承者。如果您今天通过gRPC使用预处理的交易,请切换到此方法——它通过简单的WebSocket连接以更低的延迟提供相同等级的数据,并且gRPC的传递将被弃用。
preprocessedSubscribe 是一个 尽力而为的预执行信号,而不是承诺级别。流式传输的交易可能会失败、被丢弃或落在不同的分叉上。在视为最终结果之前,请与处理或确认的流进行对账。

端点

preprocessedSubscribe 从 wss://beta.helius-rpc.com 提供服务 — Helius Gatekeeper 端点 — 而不是 mainnet.helius-rpc.com。使用您的 API 密钥作为查询参数进行身份验证:
每个 API 密钥最多可建立 10 个并发连接/订阅。

订阅

使用 preprocessedSubscribe 方法发送一个 JSON-RPC 请求。params 携带账户过滤器并且是必需的 — accountInclude 和 accountRequired 必须在它们之间至少指定一个账户(参见过滤):
服务器用包含订阅 ID 的 JSON 文本帧确认订阅:
在此确认之后,交易更新以 二进制 WebSocket 帧到达 — 参见通知有效负载。

过滤

每个订阅都通过 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/kit 8.0+ 或 @solana/web3.js v3。参见 交易 v1 支持。

示例

可用数据是什么?

每个通知都包含签署的交易、其第一个签名和其槽位号。由于交付发生在执行之前,流不包括:
  • 执行状态或错误
  • 执行前/后余额或代币余额变化
  • 日志消息或内部指令
  • 所消耗的计算单元
可以将其视为接收“提案”而不是“结果”——您可以看到发送者尝试执行的操作,但看不到实际发生的事情。在此阶段,账户和程序状态更新尚不存在;如果您需要实时账户状态,请使用 LaserStream gRPC 在 processed 承诺。

背压

流不会为缓慢的消费者无限期缓冲。如果您的客户端读取过慢且服务器端积压超过4,000条消息,Helius 会关闭连接——您会收到一个干净的 WebSocket 关闭帧。迅速处理帧:将繁重工作(如交易解码和策略逻辑)置于接收循环之外,并在断开连接后重新连接和重新订阅。

交付保证

交付是尽力而为,不保证,并且没有历史重播。客户端应:
  1. 在连接关闭后重新连接和重新订阅。
  2. 通过交易签名去重。
  3. 将槽位视为观察,而非最终结果。
  4. 当执行结果很重要时,与已处理或确认的流进行对账。

定价

preprocessedSubscribe 在所有付费计划中可用,每条消息计价为0.1积分——每交付的一笔交易对应一条消息,从您的计划中扣费。详情请参阅积分。

相关

预确认

在交易成为分片之前流式传输——最早的交易信号。

原始分片 (UDP)

通过 UDP 传输的未处理分片数据包。您需要实现去分片。

transactionSubscribe

带有丰富过滤和执行元数据的执行后交易。