确认语义
区分广播响应、交易打包、执行收据、已固化区块和索引数据延迟,避免把中间状态当作最终结果。
TRON API 会在不同阶段返回不同类型的数据。集成时应先判断当前拿到的是广播调用结果、交易本体、执行收据、已固化状态,还是索引服务数据。不要把中间状态当作最终结果。
前置阅读
状态语义速查
| 你看到的结果 | 代表什么 | 不代表什么 | 下一步 |
|---|---|---|---|
BroadcastTransaction 返回 result: true | 本次广播调用未返回错误 | 不表示交易仍保留在 Pending Pool,也不表示已经传播、打包、执行成功或固化 | 保留原 txID,继续查询交易状态 |
/wallet/gettransactionbyid 返回交易对象 | FullNode 当前可以查询到交易本体 | 不表示交易已经固化;交易本体也不能代替 receipt 提供完整的执行详情 | 通过 /walletsolidity/gettransactionbyid 确认交易是否已固化;智能合约交易还需查询已固化 receipt |
/wallet/gettransactioninfobyid 返回 receipt | FullNode 当前可以查询到该交易的执行信息 | 不表示该执行结果已经固化 | 通过 /walletsolidity/gettransactioninfobyid 查询已固化 receipt |
/walletsolidity/gettransactionbyid 返回交易对象 | 交易本体已经进入固化主链 | 不包含完整的执行收据信息 | 对于智能合约交易,继续通过 /walletsolidity/gettransactioninfobyid 查询已固化 receipt |
/walletsolidity/gettransactioninfobyid 返回 receipt | 已查询到该交易的固化执行收据 | 不表示交易执行一定成功,receipt 中仍可能记录失败结果 | 根据 receipt 中的执行状态和业务所需字段判断交易结果 |
/walletsolidity/gettransactionbyid 返回空对象 | 当前查询未找到已固化的交易本体 | 不能仅凭一次空响应证明交易从未上链 | 继续查询原 txID;需要确认原交易未上链时,参见交易安全重播与替换流程 |
/walletsolidity/gettransactioninfobyid 返回空对象 | 当前查询未找到已固化 receipt | 不表示交易本体一定不存在 | 先通过 /walletsolidity/gettransactionbyid 查询交易本体;如果交易已经固化,继续查询 receipt |
| TronGrid 返回历史交易或 Event | 索引服务已经处理到对应数据 | 不等同于节点原生状态,结果可能受分页、限流或索引延迟影响 | 对关键交易使用 /walletsolidity 接口复核固化状态和执行结果 |
广播响应不等于交易确认
广播接口用于报告本次调用是否返回错误。result: true 不证明节点仍保留或已传播该交易,也不证明交易已打包、执行成功或固化。
常见错误是把下面的响应直接当作最终成功:
{ "result": true, "txid": "..." }正确流程是继续查询同一 txID,并按目的选择接口:
- 用 GetTransactionById 查询 FullNode 当前是否能找到交易本体;该结果仅用于观察最新状态。
- 需要确认交易已进入固化主链时,用
/walletsolidity/gettransactionbyid查询已固化的交易本体。 - 需要判断智能合约执行结果,或查看手续费、Energy、Event 和内部交易时,用 GetTransactionInfoById(固化查询) 查询已固化 receipt。
如果 GetTransactionById 已返回交易本体,而 GetTransactionInfoById 暂时返回空对象,不能根据空 receipt 否定交易本体已经存在;receipt 仅用于查看执行详情。
交易本体不等于执行收据
交易本体描述“请求方提交了什么”,执行收据描述“链上实际执行后发生了什么”。
| 数据类型 | 推荐接口 | 包含内容 |
|---|---|---|
| 交易本体 | GetTransactionById | raw_data、签名、合约调用参数 |
| 执行收据 | GetTransactionInfoById | 手续费、Energy 消耗、合约执行状态、Event、内部交易 |
| 已固化执行收据 | GetTransactionInfoById(固化查询) | 已固化区块中的执行收据 |
对于直接发起的 TRX 或 TRC-10 转账,交易本体通常已经包含收款地址和金额。对于 TriggerSmartContract,必须读取 receipt 才能判断实际执行结果。
最新链头不等于已固化状态
/wallet 接口读取节点当前看到的最新链头,延迟较低,但结果可能尚未固化;/walletsolidity 接口读取最新已固化区块上的状态,通常比最新链头落后约 1 分钟。
| 读取目标 | 推荐接口 |
|---|---|
| 最新区块展示 | GetNowBlock,FullNode |
| 最新已固化区块 | GetNowBlock(固化查询) |
| 按高度查询最新链头视图 | GetBlockByNum,FullNode |
| 按高度确认是否已固化 | GetBlockByNum(固化查询) |
如果流程需要最终状态(如交易确认、余额对账、报表生成和区块监听),应基于 /walletsolidity 固化查询接口或本地已固化区块索引判断。
索引数据不等于节点原生状态
TronGrid V1 API 和自建索引器适合查询账户历史、TRC-20 转账历史、Event、内部交易和聚合统计。索引服务通常比直接扫块更方便,但要考虑分页、限流、重试和索引延迟。
当你需要完整状态判断时,可以按以下方式组合:
- 用 TronGrid 或自建索引器发现候选交易、Event 或内部交易。
- 用
/walletsolidity/gettransactioninfobyid返回的已固化 receipt,或通过已固化区块扫描确认最终状态。 - 在本地保存已处理的 block number、transaction ID 和 log index,保证重试幂等。
相关资源
- 交易签名与广播——API 工作流 —— 构建、签名、广播和确认交易结果的完整路径
- 广播与 RPC 错误 —— 广播失败、广播后未上链和节点限流排查
- 区块 —— 区块结构、block ID、block number 和查询接口选型
- API 任务地图 —— 按任务选择 docs 页面和 reference API
Updated 20 days ago
