跳转到主要内容
getTransaction RPC 方法允许您通过提供其签名来检索有关已确认交易的详细信息。这包括交易的槽位、区块时间、元数据(如费用、状态和余额变化)以及交易结构本身。
避免批处理以提高性能批处理归档方法会显著增加延迟。不允许超过100个请求的批处理。

常见用例

  • 交易验证: 确认交易已处理并检查其结果(成功或失败)。
  • 交易历史显示: 向用户展示他们在钱包或浏览器中的过去交易详情。
  • 审计和分析: 检查交易的具体细节,包括执行的指令、支付的费用和涉及的账户。
  • 调试失败的交易: 检查元数据中的logMessageserr字段以了解交易失败的原因。
  • 数据索引: 从交易中提取特定信息以进行链下存储和分析。

请求参数

  1. transactionSignature(字符串,必需):您想查询的base-58编码的交易签名。
  2. options(对象,可选):一个可选的配置对象,可以包括:
  • commitment(字符串,可选):指定承诺级别(例如,"finalized""confirmed")。如果未提供,则使用节点的默认承诺(通常是"finalized")。
  • encoding(字符串,可选):transaction数据的编码。常见值:
  • "json":以结构化JSON格式返回交易数据(但指令可能仍然是base64编码)。
  • "jsonParsed":返回交易数据,其中程序特定的指令被解析为人类可读的JSON结构(如果可能)。这通常是分析最有用的编码。
  • "base58":将交易数据作为base-58编码的字符串返回。
  • "base64":将交易数据作为base-64编码的字符串返回。
  • 如果Helius未指定,默认为"json",但Solana默认可能不同。最好指定此项。
  • maxSupportedTransactionVersion(数字,可选):RPC端点应处理的最大交易版本。
  • 设置为0以包括版本化交易(包括传统)。
  • 如果省略,某些节点可能只返回传统交易或在遇到版本化交易时出错。强烈建议将此设置为0以支持所有交易类型。

响应结构

如果未找到交易(例如,尚未处理或签名不正确)或未确认到指定的承诺级别,该方法返回null。否则,它返回一个包含以下字段的对象:
  • slot (u64):交易被包含在区块中的槽号。
  • blockTime (i64 | null):生成包含交易的区块时的估计Unix时间戳(自纪元以来的秒数)。如果不可用,可以是null
  • meta (object | null):包含有关交易执行的元数据的对象。如果交易在处理前失败或元数据不可用,可以是null
  • err (object | null):如果交易失败,则为错误对象,否则为null
  • fee (u64):为交易支付的lamports费用。
  • preBalances (array of u64):交易处理之前涉及账户的lamport余额。
  • postBalances (array of u64):交易处理之后涉及账户的lamport余额。
  • preTokenBalances (array of objects | null):交易之前涉及的代币账户的代币余额。
  • postTokenBalances (array of objects | null):交易之后涉及的代币账户的代币余额。
  • innerInstructions (array of objects | null):作为此交易中CPI(跨程序调用)的一部分执行的指令数组。
  • logMessages (array of string | null):由交易指令和任何内部指令发出的日志消息数组。
  • loadedAddresses (object, optional):指定为此交易从地址查找表加载的账户。包含writablereadonly的公钥数组。
  • returnData (object, optional):通过sol_set_return_datasol_get_return_data返回的交易数据。包含programId(字符串)和data(数组:[string, encoding])。
  • computeUnitsConsumed (u64, optional):此交易消耗的计算单元数。
  • transaction (object | array):交易结构本身。格式取决于encoding参数:
  • 如果encoding"jsonParsed""json":一个对象,包含message(包含accountKeysinstructionsrecentBlockhash等)和signatures(字符串数组)。
  • 如果encoding"base58""base64":一个数组[encoded_string, encoding_format_string]
  • version (“legacy” | number | undefined):交易的版本。对于旧交易,可以是"legacy",对于版本化交易,可以是一个数字(例如,0)。如果maxSupportedTransactionVersion未设置且交易是版本化的,则为undefined
示例响应(jsonParsed 编码):
{
  "jsonrpc": "2.0",
  "result": {
    "blockTime": 1635900000,
    "meta": {
      "err": null,
      "fee": 5000,
      "innerInstructions": [],
      "logMessages": [
        "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS invoke [1]",
        "Program log: Memo 'Hello, Solana!'",
        "Program Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS success"
      ],
      "postBalances": [
        499999999999994999, 
        1000000000
      ],
      "postTokenBalances": [],
      "preBalances": [
        500000000000000000, 
        1000000000
      ],
      "preTokenBalances": [],
      "rewards": [],
      "status": { "Ok": null },
      "computeUnitsConsumed": 200
    },
    "slot": 98765432,
    "transaction": {
      "message": {
        "accountKeys": [
          "SysvarRent111111111111111111111111111111111",
          "Vote111111111111111111111111111111111111111"
        ],
        "instructions": [
          {
            "parsed": {
              "type": "vote",
              "info": {
                "votePubkey": "Vote111111111111111111111111111111111111111",
                "slot": 123,
                "hash": "abc..."
              }
            },
            "program": "vote",
            "programId": "Vote111111111111111111111111111111111111111"
          }
        ],
        "recentBlockhash": "xyz..."
      },
      "signatures": [
        "sig1..."
      ]
    },
    "version": "legacy"
  },
  "id": 1
}

代码示例

# Replace <TRANSACTION_SIGNATURE> with an actual signature
curl -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getTransaction",
    "params": [
      "<TRANSACTION_SIGNATURE>",
      {
        "encoding": "jsonParsed",
        "maxSupportedTransactionVersion": 0
      }
    ]
  }' \
  <YOUR_RPC_URL>

开发者提示

  • 交易最终性: 确保您使用适当的 commitment 级别进行查询。请求尚未达到指定承诺的交易将导致 null
  • 数据量: 响应对象可能非常大,特别是对于包含许多指令或详细日志的复杂交易。在处理数据时要注意这一点。
  • jsonParsedjson 虽然 jsonParsed 非常方便,但解析支持取决于 RPC 节点对特定程序的能力。如果程序未被识别,即使使用 jsonParsed,其指令可能会回退到较少解析的格式。
  • 版本化交易: 始终在请求选项中设置 maxSupportedTransactionVersion: 0,以确保您的应用程序能够处理传统和版本化交易。否则,您可能会错过数据或遇到新交易格式的错误。
  • RPC 提供商差异: 虽然核心 API 是标准的,但某些 RPC 提供商可能提供增强的解析或附加字段。例如,Helius 提供丰富的交易解析。
本指南提供了 getTransaction RPC 方法的全面概述,使您能够获取和理解详细的 Solana 交易数据。