RPC方法允许您通过提供其签名来检索已确认交易的详细信息。这包括交易的插槽、区块时间、元数据(如费用、状态和余额变化),以及交易结构本身。
避免批处理以提高性能批处理归档方法会显著增加延迟。不允许超过100个请求的批处理。
常见用例
- 交易验证: 确认交易已被处理并检查其结果(成功或失败)。
- 交易历史显示: 在钱包或浏览器中向用户显示其过去交易的详细信息。
- 审计和分析: 检查交易的细节,包括执行的指令、支付的费用和涉及的账户。
- 调试失败交易: 检查元数据中的
logMessages 和 err 字段以了解交易失败的原因。
- 数据索引: 从交易中提取特定信息以进行链下存储和分析。
请求参数
-
transactionSignature (字符串,必需):您想要查询的base-58编码交易签名。
-
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):指定从地址查找表为该交易加载的账户。包含writable和readonly的公钥数组。
returnData (object, optional):通过sol_set_return_data和sol_get_return_data返回的交易数据。包含programId(字符串)和data(数组:[string, encoding])。
computeUnitsConsumed (u64, optional):该交易消耗的计算单元数量。
transaction (object | array):交易结构本身。格式取决于encoding参数:
- 如果
encoding是"jsonParsed"或"json":一个包含message(包含accountKeys, instructions, recentBlockhash等)和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。
- **数据量:**响应对象可能非常大,特别是对于包含许多指令或详细日志的复杂交易。在处理数据时请注意这一点。
- **
jsonParsed vs. json:**虽然 jsonParsed 非常方便,但解析支持取决于 RPC 节点对特定程序的能力。如果程序未被识别,其指令可能会在使用 jsonParsed 时回退到较少解析的格式。
- **版本化交易:**始终在请求选项中设置
maxSupportedTransactionVersion: 0,确保您的应用程序可以处理传统和版本化交易。否则,您可能会错过数据或遇到较新交易格式的错误。
- **RPC 提供者差异:**虽然核心 API 是标准的,但某些 RPC 提供者可能提供增强的解析或附加字段。例如,Helius 提供丰富的交易解析。
本指南提供了 getTransaction RPC 方法的全面概述,帮助您获取和了解详细的 Solana 交易数据。