概述
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账户的转账、铸造和销毁
请求参数
要查询交易历史记录的账户的Base-58编码公钥
返回的交易详细级别:
signatures: 基本签名信息(更快)full: 完整交易数据(消除对getTransaction调用的需要,支持最大限制为1000)
结果的排序顺序:
desc: 最新优先(默认)asc: 最早优先(按时间顺序,非常适合历史分析)
返回的最大交易数:
- 当
transactionDetails: "signatures"时最多到1000 - 当
transactionDetails: "full"时最多到1000
上一次响应的分页token(格式:
"slot:position")承诺级别:
finalized或confirmed。不支持processed承诺。用于缩小结果的高级过滤选项。
使用比较运算符过滤slot编号:
gte, gt, lte, lt示例:{ "slot": { "gte": 1000, "lte": 2000 } }使用比较运算符按Unix时间戳过滤:
gte, gt, lte, lt, eq示例:{ "blockTime": { "gte": 1640995200, "lte": 1641081600 } }使用比较运算符按交易签名过滤:
gte, gt, lte, lt示例:{ "signature": { "lt": "SIGNATURE_STRING" } }按交易成功/失败状态过滤:
succeeded:仅成功交易failed:仅失败交易any:成功和失败(默认)
{ "status": "succeeded" }对相关代币账户的交易进行过滤:
none: 仅返回引用提供地址的交易(默认)balanceChanged: 返回引用提供地址或修改由提供地址持有的代币账户余额的交易(推荐)all: 返回引用提供地址或任何由提供地址持有的代币账户的交易
{ "tokenAccounts": "balanceChanged" }过滤符合对应方、方向、铸造或原始金额范围的代币转账参与地址的交易。所有字段都是可选的,并以AND语义组合。示例:
{ "tokenTransfer": { "direction": "in", "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } }对方地址。匹配另一方为此地址的转账。
根据相对于查询地址的转账方向进行过滤:
in: 查询地址接收的转账out: 查询地址发送的转账any: 入站和出站的转账
用于过滤的代币铸造。
使用区块链上的原始金额进行比较,而不是UI或调整后的小数金额。支持
gt, gte, lt, 和 lte。用于交易数据的编码格式(仅在
transactionDetails: "full" 时适用)。与 getTransaction API 相同。选项:json, jsonParsed, base64, base58设置要返回的最大交易版本。如果省略,则仅返回传统交易。设置为
0 可包含所有版本的交易。请求可以评估的最小槽位
计量
成功的响应将根据返回内容进行计量:响应
响应结构取决于transactionDetails。签名模式返回轻量级签名记录;完整模式返回完整的交易和元数据对象。
- 签名响应
- 完整交易响应
响应字段
transactionIndex字段仅适用于getTransactionsForAddress。其他类似端点如getSignaturesForAddress,getTransaction和getTransactions不包含此字段。
过滤器
可以对slot,blockTime和signature使用比较运算符,加上特殊的status,tokenAccounts和tokenTransfer过滤器。组合多个过滤器会将结果缩小到它们的交集。
比较运算符
这些运算符像数据库查询一样工作,使您能够精确控制数据范围。枚举过滤器
组合过滤器示例:
关联代币账户
在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 与其他顶级过滤器(slot、blockTime、status 和 tokenAccounts)一起组成;最终结果是交集。
示例
基于时间的分析
生成月度交易报告:代币铸造创建
查找特定代币的铸造创建交易:资金交易
查找谁为特定地址提供资金:代币转账
通过tokenTransfer 过滤以隔离特定的代币移动。
USDC 流入某个地址:
分页
当您的交易超过限制时,使用响应中的paginationToken获取下一页。该令牌是一个简单的字符串,格式为"slot:position",指示API从何处继续。
使用每个响应中的分页令牌获取下一页:
多个地址
您不能在单个请求中查询多个地址。每个地址查询都算作单独的API请求,并相应计量。要获取多个地址的交易,在相同时间或插槽窗口内查询每个地址,然后合并和排序:最佳实践
性能。 当不需要完整交易数据时,使用transactionDetails: "signatures"。使用合理的页面大小以获得更好的响应时间,并通过时间范围或特定插槽进行筛选,以实现更有针对性的查询。
过滤。 从宽泛的过滤器开始,然后逐步缩小范围。使用基于时间的过滤器进行分析和报告工作流,并组合多个过滤器以进行精确查询,针对特定交易类型或时间段。
分页。 在您需要稍后恢复大型查询时存储分页令牌。监控分页深度以进行性能规划,并在需要按时间顺序重放历史事件时使用升序。
错误处理。 使用指数退避优雅地处理速率限制。在发出请求之前验证地址,并在适当情况下缓存结果以减少API使用。
限制和边界情况
一小部分地址会路由到旧的归档,限于槽扫描备用,或者返回为空。在槽111,491,819之前进行Token账户发现也需要解决方法。展开下面的部分以获取完整的详细信息。不支持和特别路由的地址
不支持和特别路由的地址
**路由到旧归档。**这些地址的请求被路由到我们的旧归档系统。
**槽扫描备用。**这些地址的请求被转发到我们的新归档系统,并通过逐槽扫描方式进行查询(最多100个槽)。但是,这些数据未被索引。
**返回为空(
is_reserved_address)。**请求被转发到我们的新归档系统,但数据未被索引,查询结果为空。解决方法:历史令牌账户发现(在槽位111,491,819之前)
解决方法:历史令牌账户发现(在槽位111,491,819之前)
对于在槽位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历史数据方法。