新消息:Helius 收购 Light Protocol
推出适用于 getTransactionsForAddress 的 tokenAccount 过滤器
博客/更新

推出 gTFA 代币账户过滤器

联合创始人X 上的 Nick PennieLinkedIn 上的 Nick Pennie
阅读需 3 分钟

去年 10 月,我们发布了 getTransactionsForAddress。这是一种用于查询历史数据的新 Solana RPC 调用,将 getSignaturesForAddress 和 getTransaction 合并为一个方法。

今天,我们很高兴地宣布,getTransactionsForAddress (gTFA) 现在只需一次 RPC 调用,即可查询钱包的代币转账历史。 

新的 tokenAccounts 功能允许用户包含钱包关联代币账户的交易。此前,gTFA 及其前身 getSignaturesForAddress 都会遗漏这些交易。

过去,开发者不得不先查询 getTokenAccountsByOwner,再针对每个代币账户查询 getSignaturesForAddress。 

这种方式缓慢且成本高昂,通常需要额外执行数百次 RPC 调用。

现在,只需使用 tokenAccounts 调用一次 getTransactionsForAddress。

问题所在

在 Solana 上,你的钱包实际上并不直接持有代币。

相反,你的钱包拥有关联代币账户 (ATA),而这些代币账户负责持有你的代币。 

例如,当有人向你发送 USDC 时,USDC 会进入你的 USDC 代币账户,而不是你的主钱包地址。

这给查询钱包交易历史带来了一个大问题:

当你对钱包调用 getSignaturesForAddress 时,只能获得直接引用该钱包地址的交易。

与代币账户交互但未提及钱包的代币转账根本不会显示。

变通方案

在今天之前,开发者必须实施一个繁琐的变通方案:

  1. 调用 getTokenAccountsByOwner,获取钱包的代币账户
  2. 针对钱包本身调用 getSignaturesForAddress
  3. 针对每一个代币账户调用 getSignaturesForAddress
  4. 合并所有结果
  5. 去重(许多交易会涉及多个账户)
  6. 按时间顺序排序

这种方法存在几个问题:

1. 性能低下

一个拥有 50 个代币账户的钱包,仅为了构建完整历史记录就需要 51 次以上的 RPC 调用。专业交易者、重度 DeFi 用户或休闲 meme 币交易者可能拥有数百个代币账户。

2. 分页效率低

想获取最近的 20 笔交易?你不能简单地从每个来源获取 20 笔再合并,而是需要获取所有数据、去重、排序,最后才能取前 20 笔交易。 

如果不超量获取数据,就无法高效分页。

3. RPC 成本不断累积

每次 RPC 调用都有额外开销。当每个用户请求需要执行 100 次以上的调用时,成本会迅速上升,尤其是在大规模使用时。

解决方案

使用新的 tokenAccounts 过滤器,只需一次 RPC 请求即可获得完整的钱包历史记录:

代码
{
    "jsonrpc": "2.0",
    "id": "helius-example",
    "method": "getTransactionsForAddress",
    "params": [
        "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
        {
            "filters": {
                "tokenAccounts": "all"
            },
            "sortOrder": "asc",
            "limit": 100
        }
    ]
}

就是这样。一次调用,完整历史。

过滤选项

tokenAccounts 过滤器提供三个选项:none、balanceChanged 和 all。

none(默认)

当 tokenAccounts 过滤器设置为 none 时,交易必须引用钱包地址。

balanceChanged(推荐)

应用 balanceChanged 后,交易需要引用钱包地址,或修改该钱包所拥有的代币账户余额。

all

将 tokenAccounts 设置为 all 后,交易必须引用钱包地址或该钱包所拥有的代币账户地址。

使用场景

这项新功能对以下场景至关重要:

  • 展示完整交易历史的钱包
  • 需要追踪每次代币变动的投资组合追踪工具
  • 计算所有代币收益和亏损的税务软件
  • 展示用户活动的分析仪表板

开始使用

tokenAccounts 功能现已推出。

只需将 tokenAccounts: balanceChanged(或 all)添加到你的过滤器对象中,即可开始使用!

还没有使用 getTransactionsForAddress?

查看我们的文档和 SDK,了解更多信息并开始使用。

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新