Skip to main content
开始订阅预确认——在收集到条目并转换成碎片之前传递的交易。这是 Helius 提供的最低延迟的交易信号。一个订阅同时流式传输 Helius 预确认和 BAM 预确认;设定 includeBam: false 仅接收 Helius 预确认。

端点

preconfSubscribe 从 Helius Gatekeeper 端点提供服务:
  • wss://beta.helius-rpc.com/?api-key=<API_KEY>
beta 主机名指的是 Gatekeeper 投放,而不是预确认的成熟程度——随着流量迁移到 Gatekeeper,它将成为标准端点。
流不是连续的。覆盖范围随网络股份转发至 Helius 或运行 BAM 的份额而变化,因此预期有不带消息的槽位——优雅地处理这些间隙。参见覆盖范围

授权

string
必填
您的 Helius API 密钥,作为 api-key 查询参数传递。需要专业计划或更高级别。

正文

array
可选。省略 params 可接收来自 Helius 和 BAM 的每个预定交易。要缩小流的范围,请将过滤对象作为第一个元素传递——过滤在服务器端进行,因此您只需为您关心的交易付费并接收它们。
无效的账户值或未识别的地区代码返回 JSON-RPC 错误 -32602(无效参数)。 账户过滤器匹配的不仅仅是交易的静态账户密钥——Helius 在服务器端解析 v0 地址查找表,所以 accountIncludeaccountExcludeaccountRequired 也匹配通过 ALT 加载的账户。

地区代码

对于 Helius 预确认,地区是 Helius 吸收交易的位置。对于 BAM 预确认,它是发出预确认的区域 BAM 端点,而不是 Helius 吸收的位置。BAM 的新加坡和达拉斯端点映射到 sgpdal

响应

integer
订阅 ID(用于取消订阅)

通知

在 JSON 确认后,通知以二进制 WebSocket 帧传递(不是 JSON)。Helius 和 BAM 预确认共享相同的布局。每个帧是一个打包的字节布局,承载一个计划交易: 负载没有源字段。不要从 tx_index = 0status = 2 推断 BAM 来源,因为 Helius 预确认可能携带相同的值。
只有 Helius 预确认携带执行状态。 Helius 预确认在验证器提供时报告 0(失败)或 1(成功),在不可用时报告 2。BAM 预确认始终 报告 2(未知),因此单靠 status 无法判断 BAM 来源的 交易是否成功。如果您的策略取决于执行状态,请设置 includeBam: false 或在链上确认结果。
请务必首先读取和检查 version 字节。 当前为 1。如果 Helius 需要更新负载格式,版本将递增——请根据版本进行分支,以便您的解码器在架构更改时继续工作。
预确认是早期信号,而非保证。交易尚未上链,可能仍会失败或被丢弃。在将其视为最终之前,请通过标准承诺检查确认着陆。

解码交易

交易字节将按照验证器序列化它们的方式直接转发,以交易版本的标准线编码进行。遗留和 v0 交易使用 bincode 生成的签名优先布局。交易 v1(SIMD-0385)使用消息优先布局,签名在末尾,因此 bincode 在 v1 负载上会失败。 使用能处理每个版本的解码器。在 Rust 中,agave-transaction-view 可在原地解析遗留、v0 和 v1 交易,是推荐的选项;wincode 结合当前的 Solana SDK VersionedTransaction 也有效。在 JavaScript 中,请确保库版本支持交易 v1。参见 指南以获取 Rust 示例。

重复通知

Helius 和 BAM 预确认按来源去重,而不是跨来源去重。小部分交易会同时通过 Helius 到达,因此您可能会接收到相同的签名两次,而且两个副本可能会报告不同的槽位。在客户端按签名去重,并使交易触发的操作幂等。参见 指南

定价

预确认需要 专业计划或更高,费用为 每条消息 10 个积分——每个流式传输的交易一条消息。查看 积分 了解详情。 计费是按消息,而不是按唯一签名。由 Helius 和 BAM 传递的交易会计数两次。如果只需 Helius 预确认,请设置 includeBam: false

相关

Preconfirmations Overview

什么是预确认以及它们在验证器管道中的位置。

preconfUnsubscribe

停止通过其 ID 进行的订阅。