Skip to main content
通过提供签名,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 端点应处理的最大交易版本。
      • 设置为 1 以包括旧版、v0 和 v1 交易。
      • 如果省略或设置低于交易的版本,请求将因 JSON-RPC 错误 -32015Transaction version (1) is not supported by the requesting client)而失败。始终将此设置为 1。参见交易 v1 支持

响应结构

如果找不到交易(例如,尚未处理或签名不正确)或未确认到指定的承诺级别,则方法返回 null。否则,它返回包含以下字段的对象:
  • slot(u64):包含交易的区块的槽位号。
  • blockTime(i64 | null):生成包含交易的区块时的估计 Unix 时间戳(自纪元以来的秒数)。如果不可用,可以是 null
  • meta(对象 | null):包含交易执行元数据的对象。如果交易在处理前失败或元数据不可用,可以是 null
    • err(对象 | null):如果交易失败,则为错误对象,否则为 null
    • fee(u64):交易支付的 lamports 费用。
    • preBalances(u64 数组):交易处理之前涉及账户的 lamport 余额。
    • postBalances(u64 数组):交易处理之后涉及账户的 lamport 余额。
    • preTokenBalances(对象数组 | null):交易之前涉及的 token 账户的 token 余额。
    • postTokenBalances(对象数组 | null):交易之后涉及的 token 账户的 token 余额。
    • innerInstructions(对象数组 | null):作为本交易中 CPI(跨程序调用)一部分执行的指令数组。
    • logMessages(字符串数组 | null):交易指令和任何内部指令发出的日志消息数组。
    • loadedAddresses(对象,可选):指定为此交易从地址查找表加载的账户。包含 PUBLIC_writablereadonly 公钥数组。
    • returnData(对象,可选):通过 sol_set_return_datasol_get_return_data 返回的数据。包含 programId(字符串)和 data(数组:[string, encoding])。
    • computeUnitsConsumed(u64,可选):此交易消耗的计算单元数。
  • transaction(对象或数组):交易结构本身。格式取决于 encoding 参数:
    • 如果 encoding"jsonParsed""json":包含 message(包含 accountKeysinstructionsrecentBlockhash 等)和 signatures(字符串数组)的对象。
    • 如果 encoding"base58""base64":一个数组 [encoded_string, encoding_format_string]
  • version(“legacy” | 数字 | 未定义):交易的版本。对于较旧的交易,可以是 "legacy",对于版本化交易,则为一个数字(01)。如果 maxSupportedTransactionVersion 未设置且交易已版本化,则为 undefined。v1 交易还在其 message 中具有 transactionConfig 对象,内含计算预算(computeUnitLimitheapSizeloadedAccountsDataSizeLimitpriorityFee),替代计算预算程序指令。其 priorityFee 是 lamports 的总费用,而不是每计算单元的微 lamports。
示例响应(jsonParsed 编码):

代码示例

开发者提示

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