跳转到主要内容

概述

getTransactionsForAddress 是一个 Helius 独有的 RPC 方法,返回地址的交易历史,具有高级过滤、灵活排序和高效分页功能。它不是标准 Solana RPC 的一部分。 getSignaturesForAddress 不同,它仅返回签名并跳过关联的代币账户,getTransactionsForAddress 可以在一次调用中返回完整的交易数据,包括钱包的关联代币账户 (ATA) 活动。这使得它成为回填、索引和分析的最快路径。 此方法每次调用最多返回1000个完整交易。

灵活排序

按时间顺序排序(最旧的在前)或反序(最新的在前)。

高级过滤

按时间范围、槽位、签名、状态和代币转移进行过滤。

完整交易数据

在一次调用中获取完整的交易详情,无需后续 getTransaction。

代币账户

包括地址的关联代币账户的交易。

使用场景

在需要以下情况时使用 getTransactionsForAddress
  • 完整的钱包代币历史,包括关联的代币账户
  • 用于索引器或数据管道的快速单次调用回填
  • 基于时间或槽位的交易分析和报告
  • 状态过滤仅保留成功或失败的交易
  • 按时间顺序的历史重演(最旧的排序)
  • 代币发布分析:首次铸造交易和早期持有者
  • 钱包资金历史和对方发现
  • 特定时间段的合规性和审计报告
对于解析的、仅转账历史(付款、余额调整),请改用 getTransfersByAddress

网络支持

快速开始

1

获取你的API密钥

Helius仪表板获取你的API密钥。
2

使用高级功能查询

获取在两个日期之间的钱包的所有成功交易,按时间顺序排序:
3

了解参数

这个例子展示了关键功能:
  • transactionDetails: 设置为'full'以在一次调用中获取完整交易数据
  • sortOrder: 使用'asc'按时间顺序(最早的优先)或'desc'按最新顺序
  • filters.blockTime: 使用gte(大于或等于)和lte(小于或等于)设置时间范围
  • filters.status: 仅过滤为'succeeded''failed'的交易
  • filters.tokenAccounts: 包括相关token账户的转账、铸造和销毁

请求参数

address
string
必填
要查询交易历史记录的账户的Base-58编码公钥
transactionDetails
string
默认值:"signatures"
返回的交易详细级别:
  • signatures: 基本签名信息(更快)
  • full: 完整交易数据(消除对getTransaction调用的需要,支持最大限制为1000)
sortOrder
string
默认值:"desc"
结果的排序顺序:
  • desc: 最新优先(默认)
  • asc: 最早优先(按时间顺序,非常适合历史分析)
limit
number
默认值:"1000"
返回的最大交易数:
  • transactionDetails: "signatures"时最多到1000
  • transactionDetails: "full"时最多到1000
paginationToken
string
上一次响应的分页token(格式:"slot:position"
commitment
string
默认值:"finalized"
承诺级别:finalizedconfirmed。不支持processed承诺。
filters
object
用于缩小结果的高级过滤选项。
filters.slot
object
使用比较运算符过滤slot编号:gte, gt, lte, lt示例:{ "slot": { "gte": 1000, "lte": 2000 } }
filters.blockTime
object
使用比较运算符按Unix时间戳过滤:gte, gt, lte, lt, eq示例:{ "blockTime": { "gte": 1640995200, "lte": 1641081600 } }
filters.signature
object
使用比较运算符按交易签名过滤:gte, gt, lte, lt示例:{ "signature": { "lt": "SIGNATURE_STRING" } }
filters.status
string
按交易成功/失败状态过滤:
  • succeeded:仅成功交易
  • failed:仅失败交易
  • any:成功和失败(默认)
示例:{ "status": "succeeded" }
filters.tokenAccounts
string
默认值:"none"
对相关代币账户的交易进行过滤:
  • none: 仅返回引用提供地址的交易(默认)
  • balanceChanged: 返回引用提供地址或修改由提供地址持有的代币账户余额的交易(推荐)
  • all: 返回引用提供地址或任何由提供地址持有的代币账户的交易
示例: { "tokenAccounts": "balanceChanged" }
filters.tokenTransfer
object
过滤符合对应方、方向、铸造或原始金额范围的代币转账参与地址的交易。所有字段都是可选的,并以AND语义组合。示例: { "tokenTransfer": { "direction": "in", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } }
filters.tokenTransfer.with
string
对方地址。匹配另一方为此地址的转账。
filters.tokenTransfer.direction
string
默认值:"any"
根据相对于查询地址的转账方向进行过滤:
  • in: 查询地址接收的转账
  • out: 查询地址发送的转账
  • any: 入站和出站的转账
filters.tokenTransfer.mint
string
用于过滤的代币铸造。
filters.tokenTransfer.amount
object
使用区块链上的原始金额进行比较,而不是UI或调整后的小数金额。支持 gt, gte, lt, 和 lte
encoding
string
用于交易数据的编码格式(仅在 transactionDetails: "full" 时适用)。与 getTransaction API 相同。选项:json, jsonParsed, base64, base58
maxSupportedTransactionVersion
number
设置要返回的最大交易版本。如果省略,则仅返回传统交易。设置为 0 可包含所有版本的交易。
minContextSlot
number
请求可以评估的最小槽位

计量

成功的响应将根据返回内容进行计量:

响应

响应结构取决于transactionDetails。签名模式返回轻量级签名记录;完整模式返回完整的交易和元数据对象。

响应字段

transactionIndex字段仅适用于getTransactionsForAddress。其他类似端点如getSignaturesForAddressgetTransactiongetTransactions不包含此字段。

过滤器

可以对slotblockTimesignature使用比较运算符,加上特殊的statustokenAccountstokenTransfer过滤器。组合多个过滤器会将结果缩小到它们的交集。

比较运算符

这些运算符像数据库查询一样工作,使您能够精确控制数据范围。

枚举过滤器

组合过滤器示例:

关联代币账户

在Solana上,钱包不会直接持有代币。相反,钱包拥有代币账户,这些代币账户持有代币。当有人给您发送USDC时,它会进入您的USDC代币账户,而不是您的主要钱包地址。 此方法很独特,因为它可以查询完整的代币历史,包括钱包的关联代币账户(ATAs)。本机RPC方法如getSignaturesForAddress不包括ATAs。 tokenAccounts 过滤器控制此行为:
  • none(默认):仅返回直接引用钱包地址的交易。当您只关心直接的钱包交互时使用。
  • balanceChanged(推荐):返回引用钱包地址或修改由钱包拥有的代币账户余额的交易。这样可以过滤掉垃圾邮件和不相关的操作,如费用收集或委托,呈现出意义明确的钱包活动视图。
  • all:返回引用钱包地址或任何由钱包拥有的代币账户的所有交易。
tokenAccounts 过滤器不支持2022年12月之前的交易。它依赖于在 Solana 的槽位111,491,819上引入的代币传输元数据。要覆盖更早的活动,请参阅历史代币账户解决方法

代币传输过滤器

tokenTransfer 过滤器将结果缩小到查询地址参与的符合特定条件的代币转移交易:特定的交易对手、代币铸造、方向或金额范围。 使用此工具回答以下问题:
  • 这个钱包什么时候从特定的交易对手接收到 USDC?
  • 显示每个超过1000个代币的转出交易。
  • 这个钱包何时与此特定的铸造代币接触过?
过滤器是请求配置的 filters 对象中的可选字段:
tokenTransfer 中的所有字段都是可选的。组合多个字段被视为 AND。 金额范围运算符: 您可以组合金额运算符,例如 { "gte": 1000000, "lte": 5000000 } 表示一个封闭范围。tokenTransfer 与其他顶级过滤器(slotblockTimestatustokenAccounts)一起组成;最终结果是交集。

示例

基于时间的分析

生成月度交易报告:
分析过程:

代币铸造创建

查找特定代币的铸造创建交易:
对于流动性池创建,查询池地址:
找到代币铸造或流动性池创建的确切时刻,包括创建者地址和初始参数。

资金交易

查找谁为特定地址提供资金:
然后分析交易数据以找到 SOL 转账:
最初的几笔交易通常揭示资金来源,并可帮助识别相关地址或资金模式。

代币转账

通过 tokenTransfer 过滤以隔离特定的代币移动。 USDC 流入某个地址:
针对特定交易对手的大额转出:
结合插槽范围和状态:

分页

当您的交易超过限制时,使用响应中的paginationToken获取下一页。该令牌是一个简单的字符串,格式为"slot:position",指示API从何处继续。 使用每个响应中的分页令牌获取下一页:

多个地址

您不能在单个请求中查询多个地址。每个地址查询都算作单独的API请求,并相应计量。要获取多个地址的交易,在相同时间或插槽窗口内查询每个地址,然后合并和排序:
对于更大的历史扫描,逐步通过时间或插槽窗口(例如一次1000个插槽)进行迭代,并重复此模式。

最佳实践

性能。 当不需要完整交易数据时,使用transactionDetails: "signatures"。使用合理的页面大小以获得更好的响应时间,并通过时间范围或特定插槽进行筛选,以实现更有针对性的查询。 过滤。 从宽泛的过滤器开始,然后逐步缩小范围。使用基于时间的过滤器进行分析和报告工作流,并组合多个过滤器以进行精确查询,针对特定交易类型或时间段。 分页。 在您需要稍后恢复大型查询时存储分页令牌。监控分页深度以进行性能规划,并在需要按时间顺序重放历史事件时使用升序。 错误处理。 使用指数退避优雅地处理速率限制。在发出请求之前验证地址,并在适当情况下缓存结果以减少API使用。

限制和边界情况

一小部分地址会路由到旧的归档,限于槽扫描备用,或者返回为空。在槽111,491,819之前进行Token账户发现也需要解决方法。展开下面的部分以获取完整的详细信息。
**路由到旧归档。**这些地址的请求被路由到我们的旧归档系统。**槽扫描备用。**这些地址的请求被转发到我们的新归档系统,并通过逐槽扫描方式进行查询(最多100个槽)。但是,这些数据未被索引。**返回为空(is_reserved_address)。**请求被转发到我们的新归档系统,但数据未被索引,查询结果为空。
对于在槽位111,491,819之前有令牌账户活动的地址,由于令牌余额元数据中的owner字段尚不存在,tokenAccounts过滤器无法确定归属。为了获得完整的结果,您可以手动通过解析早期交易指令发现这些令牌账户,然后为每个账户并行查询getTransactionsForAddress

这与getSignaturesForAddress有何不同?

如果您熟悉标准的getSignaturesForAddress方法,getTransactionsForAddress将多步骤工作流缩减为单个调用,并增加了过滤、排序和令牌账户支持。

一次调用获取完整交易

使用getSignaturesForAddress,您需要两个步骤:
使用getTransactionsForAddress,只需一次调用:

一次调用获取令牌历史

使用getSignaturesForAddress,您需要先调用getTokenAccountsByOwner,然后查询每个令牌账户:
使用getTransactionsForAddress,您只需设置filters.tokenAccounts

其他功能

按时间顺序排序

使用sortOrder: 'asc'从最早到最新排序交易。

基于时间过滤

使用blockTime过滤器按时间范围过滤。

状态过滤

使用status过滤器仅获取成功或失败的交易。

更简单的分页

使用paginationToken代替复杂的before/until签名。

下一步

索引指南

使用getTransactionsForAddress备份和同步Solana索引。

getTransfersByAddress

解析后,仅限转账的历史记录,用于支付和对账。

API参考

getTransactionsForAddress的完整请求和响应模式。

历史数据概览

比较所有Solana历史数据方法。