getSignaturesForAddress RPC 方法允许您检索涉及特定账户地址的已确认交易签名列表。这对于获取账户的交易历史非常有用。签名按时间倒序返回(最新的在前)。

常见用例

  • 账户交易历史: 显示用户钱包的过去交易。对于更高级的交易历史解析,考虑使用 Helius 的增强交易 API
  • 活动审计: 审查与特定智能合约或账户相关的所有交易。
  • 特定交易查找: 如果只知道涉及的地址,通过遍历账户历史查找特定交易。
  • 数据索引: 构建本地化的交易索引以加快查询和分析。

请求参数

  1. address (string):(必需)要检索交易签名的账户的 base-58 编码公钥。
  2. options (object,可选):一个可选的配置对象,包含以下字段:
    • limit (number,可选):要返回的最大签名数。默认是 1000,最大允许是 1000。
    • before (string,可选):一个 base-58 编码的交易签名。如果提供,查询将从此签名之前开始搜索交易。
    • until (string,可选):一个 base-58 编码的交易签名。如果提供,查询将搜索到达此签名为止的交易(不包括此签名)。
    • commitment (string,可选):指定用于查询的承诺级别。支持的值是 finalizedconfirmedprocessed。如果省略,则使用 RPC 节点的默认承诺(通常是 finalized)。
    • minContextSlot (number,可选):请求可以评估的最小槽位。这不是对历史交易的过滤,而是为节点的上下文设置最小槽位。

响应结构

JSON-RPC 响应的 result 字段是一个签名信息对象的数组。每个对象具有以下结构:
  • signature (string): base-58 编码的交易签名。
  • slot (u64): 交易被处理的槽位。
  • err (object | null): 如果交易失败则为错误对象,成功则为 null
  • memo (string | null): 交易相关的备忘录(如果有)。
  • blockTime (i64 | null): 包含交易的区块的估计生产时间,以 Unix 时间戳表示(自纪元以来的秒数)。如果不可用则为 null
  • confirmationStatus (string | null): 交易的确认状态(例如,processed, confirmed, finalized)。如果不可用(例如,对于较旧的 Helius 响应)则为 null

示例

1. 获取地址的最新签名

此示例获取给定地址的最近(最多 1000 个)交易签名。
# Replace <api-key> with your Helius API key
# Replace SYSTEM_PROGRAM_ID with the address you want to query
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSignaturesForAddress",
    "params": [
      "11111111111111111111111111111111" 
    ]
  }'

2. 获取有限制的签名

此示例获取指定数量的地址的最近交易签名。
# Replace <api-key> with your Helius API key
# Replace TARGET_ACCOUNT_ADDRESS with the address you want to query
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSignaturesForAddress",
    "params": [
      "TARGET_ACCOUNT_ADDRESS",
      {
        "limit": 5 
      }
    ]
  }'

3. 分页获取交易历史

此示例演示如何使用 before 参数分批获取交易历史。
# Initial request (get the latest 2)
# Replace <api-key> with your Helius API key
# Replace TARGET_ACCOUNT_ADDRESS with the address you want to query
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSignaturesForAddress",
    "params": [
      "TARGET_ACCOUNT_ADDRESS",
      { "limit": 2 }
    ]
  }'

# Suppose the last signature from the above response was LAST_SIGNATURE_FROM_PREVIOUS_BATCH
# Fetch the next 2 transactions before that one
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSignaturesForAddress",
    "params": [
      "TARGET_ACCOUNT_ADDRESS",
      { 
        "limit": 2,
        "before": "LAST_SIGNATURE_FROM_PREVIOUS_BATCH" 
      }
    ]
  }'

开发者提示

  • 分页: 要获取活跃账户的完整交易历史,您可能需要进行多次请求,使用上一个批次中接收到的最后一个签名和 limit 参数。
  • 速率限制: 在获取大量交易历史时,请注意 RPC 节点的速率限制。
  • 顺序: 签名总是从最新到最旧返回。
  • limit 参数: limit 参数可以在 1 到 1000 之间。如果未指定,默认为 1000。
  • until 参数: 此参数可用于在达到已知的较旧签名时停止获取签名,这在您只需要某个点之前的交易时很有用。
  • minContextSlot 此参数不筛选历史交易。它指定 RPC 节点在评估请求时应使用的最小槽位。如果节点的状态早于此槽位,可能会返回错误。
  • 交易详情: 此方法仅返回签名和基本信息。要获取完整的交易详情,您需要对每个签名使用 getTransaction 方法。
通过使用getSignaturesForAddress及其分页选项,您可以有效地检索和管理任何 Solana 地址的交易历史。