Solana RPC 方法的常见 JSON 数据结构
各种 Solana RPC 方法将以结构化的 JSON 对象形式返回更复杂的响应,其中包含特定的键值。
这些常见的 JSON 数据结构包括:
交易
交易与其他区块链上的交易有很大不同。请务必查看交易结构解析以了解 Solana 上的交易。
JSON
交易的 JSON 结构定义如下:
message: <object>
- 定义交易的内容。accountKeys: <array[string]>
- 交易中使用的 base-58 编码公钥列表,包括指令和签名所需的公钥。第一个message.header.numRequiredSignatures
公钥必须对交易进行签名。header: <object>
- 详细说明交易所需的账户类型和签名。numRequiredSignatures: <number>
- 使交易有效所需的签名总数。这些签名必须与numRequiredSignatures
的第一个message.accountKeys
匹配。numReadonlySignedAccounts: <number>
- 签名密钥的最后numReadonlySignedAccounts
是只读账户。程序可以在单个 PoH 条目中处理加载只读账户的多个交易,但不允许对 lamports 进行借记或贷记,也不能修改账户数据。目标为相同读写账户的交易将按顺序评估。numReadonlyUnsignedAccounts: <number>
- 未签名密钥的最后numReadonlyUnsignedAccounts
是只读账户。
recentBlockhash: <string>
- 最近区块的 base-58 编码哈希,用于防止交易重复并为交易提供生命周期。instructions: <array[object]>
- 按顺序执行并在全部成功时以原子交易提交的程序指令列表。programIdIndex: <number>
- 指向message.accountKeys
数组中执行此指令的程序账户的索引。accounts: <array[number]>
- 指向message.accountKeys
数组中传递给程序的账户的有序索引列表。data: <string>
- 以 base-58 字符串编码的程序输入数据。
addressTableLookups: <array[object]|undefined>
- 交易使用的地址表查找列表,用于从链上地址查找表动态加载地址。如果maxSupportedTransactionVersion
未设置,则未定义。accountKey: <string>
- 地址查找表账户的 base-58 编码公钥。writableIndexes: <array[number]>
- 用于从查找表加载可写账户地址的索引列表。readonlyIndexes: <array[number]>
- 用于从查找表加载只读账户地址的索引列表。
signatures: <array[string]>
- 应用于交易的 base-58 编码签名列表。列表的长度始终为message.header.numRequiredSignatures
且不为空。索引i
处的签名对应于message.accountKeys
中索引i
处的公钥。第一个签名用作 交易 ID。
JSON 解析
交易的 JSON 解析结构与常规 JSON 格式类似,但增加了账户和指令信息的解析:
message: <object>
- 定义交易的内容。accountKeys: <array[object]>
- 交易使用的账户信息列表。pubkey: <string>
- 账户的 base-58 编码公钥。signer: <boolean>
- 指示账户是否为必需的交易签名者。writable: <boolean>
- 指示账户是否可写。source: <string>
- 账户的来源(交易或查找表)。
recentBlockhash: <string>
- 用于防止交易重复并为交易设定生命周期的账本中最近区块的 base-58 编码哈希。instructions: <array[object]>
- 已解析的程序指令列表。program: <string>
- 被调用程序的名称。programId: <string>
- 程序的 base-58 编码公钥。stackHeight: <number|null>
- 指令的堆栈高度。parsed: <object>
- 程序特定的已解析数据。type: <string>
- 指令的类型(例如,“转账”)。info: <object>
- 特定于程序和指令类型的已解析指令信息。
signatures: <array[string]>
- 应用于交易的 base-58 编码签名列表。
交易状态元数据
err: <object|null>
- 如果交易失败则显示错误信息,如果交易成功则为 null。 TransactionError 定义fee: <u64>
- 此交易收取的费用,以 u64 整数表示preBalances: <array>
- 交易处理前的 u64 账户余额数组postBalances: <array>
- 交易处理后的 u64 账户余额数组innerInstructions: <array|null>
- 内部指令列表,或null
如果在此交易期间未启用内部指令记录preTokenBalances: <array|undefined>
- 代币余额列表,显示交易处理前的代币余额,或如果在此交易期间尚未启用代币余额记录则省略postTokenBalances: <array|undefined>
- 代币余额列表,显示交易处理后的代币余额,或如果在此交易期间尚未启用代币余额记录则省略logMessages: <array|null>
- 字符串日志消息数组,或null
如果在此交易期间未启用日志消息记录rewards: <array|null>
- 交易级别的奖励;包含以下字段的 JSON 对象数组:pubkey: <string>
- 接收奖励的账户的 base-58 编码公钥字符串lamports: <i64>
- 账户获得或扣除的奖励 lamports 数量,以 i64 表示postBalance: <u64>
- 应用奖励后账户的 lamports 余额rewardType: <string|undefined>
- 奖励类型:“fee”、“rent”、“voting”、“staking”commission: <u8|undefined>
- 奖励记入时的投票账户佣金,仅适用于投票和质押奖励
- 已弃用:
status: <object>
- 交易状态"Ok": <null>
- 交易成功"Err": <ERR>
- 交易因 TransactionError 失败
loadedAddresses: <object|undefined>
- 从地址查找表加载的交易地址。如果maxSupportedTransactionVersion
未在请求参数中设置,或jsonParsed
编码在请求参数中设置,则未定义。writable: <array[string]>
- 可写加载账户的 base-58 编码地址的有序列表readonly: <array[string]>
- 只读加载账户的 base-58 编码地址的有序列表
returnData: <object|undefined>
- 交易中指令生成的最新返回数据,包含以下字段:programId: <string>
- 生成返回数据的程序,作为 base-58 编码的 Pubkeydata: <[string, encoding]>
- 返回数据本身,作为 base-64 编码的二进制数据
computeUnitsConsumed: <u64|undefined>
- 交易消耗的 计算单元数量version: <"legacy"|number|undefined>
- 交易版本。如果maxSupportedTransactionVersion
未在请求参数中设置,则未定义。signatures: <array>
- 如果请求了交易详细信息的“签名”,则显示;一个签名字符串数组,对应区块中的交易顺序
内部指令
Solana 运行时会记录在交易处理过程中调用的跨程序指令,并将其提供出来,以便更透明地了解每个交易指令在链上执行的内容。被调用的指令按来源交易指令分组,并按处理顺序列出。
内部指令的 JSON 结构定义为以下结构的对象列表:
index: number
- 内部指令来源的交易指令索引instructions: <array[object]>
- 在单个交易指令期间调用的内部程序指令的有序列表。programIdIndex: <number>
- 指向message.accountKeys
数组的索引,指示执行此指令的程序账户。accounts: <array[number]>
- 指向message.accountKeys
数组的有序索引列表,指示传递给程序的账户。data: <string>
- 以 base-58 字符串编码的程序输入数据。
代币余额
代币余额的 JSON 结构定义为以下结构的对象列表:
accountIndex: <number>
- 提供代币余额的账户索引。mint: <string>
- 代币铸造的公钥。owner: <string|undefined>
- 代币余额所有者的公钥。programId: <string|undefined>
- 拥有该账户的 Token Program 的公钥。uiTokenAmount: <object>
-amount: <string>
- 忽略小数点的代币原始数量(字符串形式)。decimals: <number>
- 为代币铸造配置的小数位数。uiAmount: <number|null>
- 考虑小数位的代币数量(浮点数形式)。已弃用uiAmountString: <string>
- 考虑小数位的代币数量(字符串形式)。
Is this page helpful?