Skip to main content
transactionSubscribe WebSocket方法上的tokenAccounts筛选器允许订阅匹配**钱包拥有的关联代币账户(ATA)**的活动,而不仅仅是钱包的公钥直接出现的交易。gRPC上也提供相同的筛选器 —— 参见代币账户(ATA)筛选的gRPC版本。

问题:普通账户筛选器错过了传入的代币转账

当你使用accountInclude: [wallet]监视一个钱包时,你只能匹配到该钱包公钥出现在交易账号密钥中的交易。一种常见情况被忽略:当有人向钱包发送SPL代币(例如USDC)时,转账接触到的是钱包的关联代币账户(ATA) —— 一个单独的程序派生地址 —— 而不是钱包的公钥本身。 因此,普通的accountInclude: [wallet]订阅从未看到传入的代币转账。你必须预先列举出钱包拥有的每个ATA并将其添加到筛选器中 —— 但ATA是在需求时创建的(每个铸币一个),所以你无法提前知道完整的集合。

tokenAccounts扩展如何工作

在订阅上设置tokenAccounts以扩展匹配,使得accountInclude钱包匹配到涉及其拥有的代币账户的交易。匹配是基于所有者的:LaserStream在匹配时解析由你accountInclude地址拥有的代币账户,因此可以捕捉到钱包拥有的任何代币账户 —— 包括非规范的 —— 不仅仅是派生的ATA地址。你永远不必自己列举ATAs。 省略tokenAccounts的订阅行为完全如前,因此可以安全地添加到现有筛选器中。

扩展模式

tokenAccounts接受三个字符串值之一: "balanceChanged"开始。它在捕获实际资金移动时的体积仅为"all"的一小部分。

transactionSubscribe中使用它

tokenAccounts是Helius对标准Solana WebSocket API的扩展。无效的值会返回JSON-RPC错误-32602Invalid tokenAccounts value '<x>', expected one of: none, balanceChanged, all

读取匹配内容

一旦交易通过ATA扩展匹配,钱包的代币移动存在于交易的meta.postTokenBalancesmeta.preTokenBalances中。通过owner筛选这些条目以隔离你的钱包实际拥有的余额,然后对比相同accountIndex上的preTokenBalancespostTokenBalances以查看每个铸币移动了多少。上面的示例显示了筛选步骤。

相关

transactionSubscribe

每个transactionSubscribe筛选器和选项,包括tokenAccounts

代币账户筛选(gRPC)

LaserStream gRPC交易筛选中的相同tokenAccounts扩展。

notifyOn筛选

跳过accountSubscribeprogramSubscribe上的无操作账户更新。

WebSocket快速入门

连接到LaserStream WebSocket并流式传输你的第一个事件。