跳转到主要内容

什么是transactionSubscribe?

transactionSubscribe WebSocket方法(为标准Solana WebSocket API的Helius扩展)支持实时交易事件。 要使用它,请提供TransactionSubscribeFilter,且可选地包含TransactionSubscribeOptions进行进一步定制。 transactionSubscribe 位于与标准 Solana 订阅方法相同的统一 wss://mainnet.helius-rpc.comwss://devnet.helius-rpc.com 端点

TransactionSubscribeFilter

  • vote:布尔标志,用于包含/排除与投票相关的交易
  • failed:布尔标志,用于包含/排除失败的交易
  • signature:根据其签名过滤特定交易的更新
  • accountInclude:要接收交易更新的账户列表。仅需一个账户包含在交易更新中(例如,账户 1 或 2)。
  • accountExclude:要从交易更新中排除的账户列表
  • accountRequired:交易必须包括所有指定的账户才能包含在更新中(例如,账户 1 和 2)。
  • tokenAccounts:选择加入关联代币账户 (ATA) 扩展 (balanceChanged, all, 或 none)。参见下文的监视钱包,包括代币转账
您可以在accountInclude, accountExcludeaccountRequired数组中包含最多50,000个地址。

TransactionSubscribeOptions(可选)

  • commitment:获取数据的承诺级别(processed, confirmedfinalized
  • encoding:返回数据的编码格式(base58, base64jsonParsed
  • transactionDetails:返回数据的详细级别(full, signatures, accountsnone
  • showRewards:布尔标志,指示是否应在更新中包含奖励数据
  • maxSupportedTransactionVersion:指定您想接收更新的最高版本交易。要获取遗留和v0交易,请将值设置为0
maxSupportedTransactionVersion 是必需的,用于返回给定交易的账户和完整级别详细信息(即,transactionDetails: "accounts" | "full")。

交易订阅示例

在此示例中,我们订阅包含 Raydium 账户 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 的交易。 当发生包含 675k...1Mp8 账户的交易,并出现在交易的 accountKeys 中时,我们将收到一个 WSS 通知。 根据订阅选项,交易通知将在 processed 承诺级别,jsonParsed 编码,full 交易详情下发送,并会显示奖励。

示例通知

监视钱包,包括代币转账

当您使用 accountInclude 监视钱包时,只匹配钱包公钥直接出现在账户密钥中的交易。一个常见的情况没有匹配到:当有人向钱包发送 SPL 代币(例如 USDC)时,转账涉及的是钱包的关联代币账户 (ATA),而不是钱包公钥—因此简单的 accountInclude: [wallet] 订阅从未看到它。 设置 tokenAccounts 字段以扩展匹配,使被监视的账户也匹配其拥有代币余额的交易:
  • balanceChanged:当钱包拥有的代币余额在交易中变更(或其代币账户被关闭)时匹配。用于“告诉我何时资金实际移动”。这是更窄、低量的最常见选择。
  • all:匹配任何引用钱包拥有的代币余额的交易,即使未更改。流量更大。
  • none:不扩展。与省略字段相同(默认)。
匹配基于所有者:它捕获钱包拥有的任何代币账户,包括非规范账户,而不仅仅是派生的 ATA 地址。无效值会返回 JSON-RPC 错误 -32602。省略 tokenAccounts 的订阅行为与之前完全相同。有关 ATA 扩展工作原理的协议无关概述(以及 gRPC 上的相同字段),请参阅代币账户 (ATA) 过滤

监控新的Jupiter DCA

Jupiter DCA,或称为定期定额投资,是在Solana上安排定期交易的一种方式。由于这些计划的买/卖订单是在链上记录的,交易者可以使用transactionSubscribe方法和getAsset来监听新订单。

示例通知

监控新的pump.fun代币

示例通知

管理订阅

订阅ID

transactionSubscribe成功时,服务器会在result字段中返回一个订阅ID。这是每个来自该订阅的通知中出现的params.subscription中的相同号码:
存储响应中的订阅ID。取消订阅时需要它。

取消订阅

要停止接收通知,请使用订阅ID调用transactionUnsubscribe。同一连接上的每个transactionSubscribe调用都会创建一个具有自己ID的独立订阅,因此请确保在重新订阅之前取消订阅以避免接收重复通知。
在此示例中,我们订阅了Raydium交易,从服务器的响应中获取订阅ID,然后使用该ID取消订阅。在调用transactionUnsubscribe后,短时间内可能仍会有一些传输中的消息到达。这是预期行为。