确认语义

区分广播响应、交易打包、执行收据、已固化区块和索引数据延迟,避免把中间状态当作最终结果。

TRON API 会在不同阶段返回不同类型的数据。集成时应先判断当前拿到的是广播调用结果、交易本体、执行收据、已固化状态,还是索引服务数据。不要把中间状态当作最终结果。

📘

前置阅读


状态语义速查

你看到的结果代表什么不代表什么下一步
BroadcastTransaction 返回 result: true本次广播调用未返回错误不表示交易仍保留在 Pending Pool,也不表示已经传播、打包、执行成功或固化保留原 txID,继续查询交易状态
/wallet/gettransactionbyid 返回交易对象FullNode 当前可以查询到交易本体不表示交易已经固化;交易本体也不能代替 receipt 提供完整的执行详情通过 /walletsolidity/gettransactionbyid 确认交易是否已固化;智能合约交易还需查询已固化 receipt
/wallet/gettransactioninfobyid 返回 receiptFullNode 当前可以查询到该交易的执行信息不表示该执行结果已经固化通过 /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,并按目的选择接口:

  1. 用 GetTransactionById 查询 FullNode 当前是否能找到交易本体;该结果仅用于观察最新状态。
  2. 需要确认交易已进入固化主链时,用 /walletsolidity/gettransactionbyid 查询已固化的交易本体。
  3. 需要判断智能合约执行结果,或查看手续费、Energy、Event 和内部交易时,用 GetTransactionInfoById(固化查询) 查询已固化 receipt。

如果 GetTransactionById 已返回交易本体,而 GetTransactionInfoById 暂时返回空对象,不能根据空 receipt 否定交易本体已经存在;receipt 仅用于查看执行详情。


交易本体不等于执行收据

交易本体描述“请求方提交了什么”,执行收据描述“链上实际执行后发生了什么”。

数据类型推荐接口包含内容
交易本体GetTransactionByIdraw_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、内部交易和聚合统计。索引服务通常比直接扫块更方便,但要考虑分页、限流、重试和索引延迟。

当你需要完整状态判断时,可以按以下方式组合:

  1. 用 TronGrid 或自建索引器发现候选交易、Event 或内部交易。
  2. 用 /walletsolidity/gettransactioninfobyid 返回的已固化 receipt,或通过已固化区块扫描确认最终状态。
  3. 在本地保存已处理的 block number、transaction ID 和 log index,保证重试幂等。

相关资源