Skip to main content
使用 Sender Max(最低小费:0.001 SOL)来处理预确认。 预确认只有在您的交易 首先抵达时才有回报——Sender Max 是最快的方法。从一开始就使用 Sender Max 来充分利用预确认。

什么是preconfSubscribe?

preconfSubscribe 是一个 Helius WebSocket 方法,流式传输 预确认 —— 在交易被收集到条目并分片之前交付的交易。它是 Helius 提供的最低延迟交易信号。一个订阅同时提供 Helius 预确认,立即发出领导者执行交易时并携带其执行状态,以及从运行 Jito 的区块组装市场客户端的验证器发出的 BAM 预确认,在验证器承诺执行交易时发出。访问需要 专业计划或更高 —— 请参阅 定价。
该流不是连续的。覆盖范围随着转发到 Helius 或运行 BAM 的股份份额而扩大,因此可以预期有些槽位没有消息——请妥善处理这些间隙。参见 覆盖范围。
preconfSubscribe 从 wss://beta.helius-rpc.com 提供服务 —— Helius Gatekeeper 端点 —— 而不是 mainnet.helius-rpc.com。使用您的 API 密钥作为查询参数进行认证。
beta 主机名指的是 Gatekeeper 的发布,而不是预确认的成熟度。预确认首先在 Gatekeeper 端点启动;随着 Helius 将流量迁移到 Gatekeeper,它将成为标准端点。

订阅

使用 preconfSubscribe 方法发送 JSON-RPC 请求。服务器响应订阅 ID,然后为每笔交易流式传输通知。传递可选的 过滤器 作为第一个 params 元素以仅接收匹配的交易;省略 params 以接收来自 Helius 和 BAM 的完整流。

订阅响应

存储 result — 这是你用来取消订阅的订阅ID。在此确认后,通知以二进制帧形式流动(见下文)。

过滤

默认情况下,preconfSubscribe 从两个来源流式传输每笔交易。要缩小流式范围,请传递过滤器对象作为 params 的第一个元素。过滤发生在服务器端,因此您只需支付并接收到您关心的交易。
每个字段都是可选的——缺少字段意味着该谓词“无约束”,因此空过滤器(或没有 params)将匹配来自两个来源的每个交易。 过滤规则:
  • 所有谓词均以 AND 连接,并按以下顺序求值:includeSource → failed → regionInclude → signatures → accountExclude → accountRequired → accountInclude → signerExclude → signerInclude → instructions。
  • 状态未知的 BAM 预确认会忽略 failed 过滤器。状态未知的 Helius 预确认不会与显式的 failed 过滤器匹配。
  • includeSource 必须是仅包含 helius 和 bam 的数组。无效值会返回 JSON-RPC 错误 -32602(无效参数)。
  • 账户是以 base58 编码的公钥。无效值会返回 JSON-RPC 错误 -32602(无效参数)。
  • 每个账户或签名者列表最多包含 10,000 个条目。signatures 最多包含 1,000 个条目。
为保持向后兼容,已弃用的 includeBam 过滤器仍然可用。 includeBam: false 等同于 includeSource: ["helius"]。includeBam: true 或 省略此字段会选择两个来源。不要同时发送 includeBam 和 includeSource。
要仅接收 Helius 预确认:

签名者和签名过滤

使用 signerInclude 匹配由特定账户签名的交易。使用 signerExclude 移除由任意所列账户签名的交易。被引用的账户不算作签名者。 当你已经知道要跟踪哪些交易时,请使用 signatures。该过滤器匹配交易的第一个签名,即 Solana RPC 方法所使用的签名。订阅后无法更改过滤器,因此如需跟踪新签名,请创建新订阅。

指令过滤

使用 instructions 按程序和指令数据匹配顶层指令。每个指令过滤器支持以下字段: 每个 memcmp 条目都接受 base58、base64 或 hex 编码。默认为 base58。当一条顶层指令满足任意指令过滤器中的所有条件时,交易即为匹配。 以下请求通过 Anchor 判别符匹配 pump.fun buy 指令:
该过滤器仅检查顶层指令。它无法匹配通过跨程序调用(CPI)所调用的指令,因为这些指令在执行前并不存在。 你最多可以提供 16 个指令过滤器,每个指令过滤器最多包含四个 memcmp 条目。每个 memcmp 值必须解码为 1–128 个字节。memcmp 的结束偏移量和 dataSize 不得超过 4,096 字节。

地址查找表(ALT)解析

账户过滤器匹配的不只是交易的静态账户密钥——Helius 会在服务器端解析 v0 地址查找表,因此 accountInclude、accountExclude 和 accountRequired 也会匹配交易通过 ALT 加载的账户。 这意味着你可以筛选交易涉及的任何账户,即使它仅出现在查找表之后,也无需维护 ALT 映射或自行解析表。只需传入账户的公钥,Helius 就会在应用过滤器之前完成解析。

区域过滤

使用 regionInclude 可仅接收来自特定区域的交易。传入一个或多个区域代码;当交易的来源区域与其中任意代码匹配时,该交易即可通过。
来源区域取决于来源。对于 Helius 预确认,它是接收交易的 Helius 区域。对于 BAM 预确认,它是发出预确认的区域 BAM 端点,而不是 Helius 接收该预确认的位置。BAM 的新加坡和达拉斯端点分别映射到 sgp 和 dal。 有效的区域代码:
设置 regionInclude 后,不带区域信息的交易会被丢弃。无法识别的区域代码会返回 JSON-RPC 错误 -32602(无效参数)。

通知有效载荷

通知以二进制 WebSocket 帧(而非 JSON)的形式传送。Helius 和 BAM 预确认采用相同的布局。每个帧都是携带单笔交易的紧凑字节布局: 有效载荷没有来源字段。不要根据 tx_index = 0 推断它来自 BAM,因为其他来源也可能报告 0。

区分两个来源

由于没有来源字段,你无法将任意消息标记为 Helius 或 BAM。status 字节提供了单向分类依据:
  • status 为 0 或 1 — 该消息是 Helius 预确认,且交易已执行。BAM 从不报告这些值。
  • status 为 2 — 来源不明确:可能是 BAM 预确认,也可能是无法获取执行状态的 Helius 预确认。
没有其他字段可以用于区分。此流不携带 BAM 的序列 ID 和捆绑包位置,因此没有可作为判断依据的 BAM 排序元数据;而且 regionInclude 是订阅过滤器而非有效载荷字段,因此无法从每条消息中读取。 如果你需要流中的每条消息都携带同类依据,请设置 includeSource: ["helius"] 或 includeSource: ["bam"]。仅含 Helius 的流包含在领导者执行时发出的预确认。
始终先读取并检查 version 字节。 当前值为 1。如果 Helius 需要更新有效载荷格式,版本号会递增——请根据版本号进行分支处理, 以便解码器在模式变更后仍能正常工作。
预确认是一种早期信号,而非保证。交易尚未 上链,仍可能被丢弃——而且 Helius 预确认的 执行状态反映的是领导者的本地结果,在 区块确认前并非最终结果。请通过标准的承诺检查确认交易已落地, 再将其视为最终结果。

解码交易

交易字节会严格按照验证者序列化的结果转发,并使用对应交易版本的标准线路编码。旧版和 v0 交易使用 bincode 生成的签名优先布局。交易 v1(SIMD-0385)使用消息优先布局,签名位于末尾,因此 bincode 无法处理 v1 有效载荷。请使用支持所有版本的解码器:
  • Rust:agave-transaction-view 可原地解析旧版、v0 和 v1 交易,无需中间副本。这是推荐选项。当前 Solana SDK 使用的兼容 bincode 的序列化器 wincode 也可以将 v1 解码为 VersionedTransaction。
  • **JavaScript / TypeScript:**请确保你的库版本支持交易 v1。较旧的 VersionedTransaction.deserialize 实现仅支持旧版和 v0。请使用 @solana/kit 8.0+ 或 @solana/web3.js v3。请参阅交易 v1 支持。

重复通知

Helius 和 BAM 预确认按来源去重,而不会跨来源去重。少量交易会同时通过这两个来源到达 Helius,因此你可能会收到两次相同的签名,并且两个副本可能报告不同的槽位。 在客户端按签名去重,并确保由交易触发的操作具有幂等性,以免第二条通知重复触发同一操作。请通过标准的承诺检查确认执行和落地情况。

示例

取消订阅

要停止接收通知,请使用 preconfSubscribe 返回的订阅 ID 调用 preconfUnsubscribe。

定价

每个槽位最低 300 积分的规则将于 2026 年 10 月 14 日生效。在此之前, Preconfirmations 按每条消息 10 积分计费,不设最低消费。
Preconfirmations 需要使用 Professional 套餐或更高等级的套餐,费用为每条消息 10 积分。每个订阅的每个槽位最低收费为 300 积分,并从你的套餐中扣除。详情请参阅积分。 最低收费仅适用于有预确认覆盖的槽位。在每个覆盖槽位中,订阅按以下两者中的较高者计费:每条已传送消息 10 积分,或 300 积分。无覆盖的槽位不收费。关于哪些槽位计入最低收费,请参阅定价。 最低收费按订阅计算,因此每个处于打开状态的 preconfSubscribe 订阅在每个覆盖槽位中至少支付 300 积分。请使用 preconfUnsubscribe 关闭不再需要的订阅。 计费按消息计算,而不是按唯一签名计算。同时由 Helius 和 BAM 传送的交易会计费两次。如果只需要 Helius 预确认,请设置 includeSource: ["helius"]。
Preconfirmations 是一款新产品,定价可能会发生变化。

相关内容

Preconfirmations Overview

了解 Preconfirmations 是什么,以及它在验证者流水线中的位置。

transactionSubscribe

使用丰富的过滤功能流式传输已达到 confirmed 承诺级别的交易。

preconfSubscribe API reference

请求参数、过滤器字段和二进制通知布局。