区块

TRON 上的区块结构、复合区块 ID 设计及区块生产时间表。

区块把一组交易和指向前一区块的元数据打包在一起。每个区块通过 parentHash 连接到前一个区块,形成连续链条;任何历史区块被修改,都会导致后续区块校验失败。

📘

前置阅读


区块结构

一个区块主要包含 block_headertransactions 两部分:

{
  "blockID": "000000000164387f...4e1dc6c6",
  "block_header": {
    "raw_data": {
      "number": 23345279,
      "txTrieRoot": "b04e2c9f...e7a3041e",
      "witness_address": "410765be...888e606",
      "parentHash": "00000000...4e1dc6c6",
      "version": 28,
      "timestamp": 1715000000000
    },
    "witness_signature": "73f5c6a8...1b2c3d4e"
  },
  "transactions": [
    /* 交易对象 — 参见"交易" */
  ]
}
字段类型说明
blockID十六进制(32 字节)区块唯一标识,参见下文区块 ID
raw_data.numberint区块高度(Block Number),从创世区块高度 0 开始递增。
raw_data.txTrieRoot十六进制当前区块内所有交易构成的 Merkle 树根哈希。
raw_data.witness_address十六进制生产该区块的超级代表(SR)账户地址。
raw_data.parentHash十六进制前一个区块的区块 ID。
raw_data.versionint网络协议版本号。
raw_data.timestampint(毫秒)区块生成时间,Unix 毫秒时间戳。
witness_signature十六进制出块 SR 对 block_header.raw_data 的签名。

区块 ID

TRON 的区块 ID 不是简单的区块哈希,而是由区块高度和区块头哈希合成的 32 字节值:

  1. block_header.raw_data 做 SHA-256,得到 32 字节哈希。
  2. 将哈希前 8 字节替换为区块高度的 8 字节大端序表示。
  3. 保留后 24 字节不变。
+-----------------------------------------------------------+
|                        Block ID                           |
+------------------------------------+----------------------+
|  0 - 7 字节 (Block Number 大端序)    | 8 - 31 字节 (原始哈希) |
+------------------------------------+----------------------+

这种设计让节点能从区块 ID 前缀直接读出区块高度,同时用后缀验证区块头内容。parentHash 保存前一个区块的完整区块 ID,从而连接链条。

该 8 字节高度前缀也被 TAPOS 使用:交易通过 ref_block_bytes 引用近期区块,让交易锚定到特定链段。

术语上,表示顺序高度时使用区块高度(Block Number);表示 32 字节唯一标识时使用区块 ID(Block ID)。不要把两者都泛称为“区块哈希”。


区块生产

TRON 目标出块间隔为 3 秒。27 个超级代表(SR)轮流出块,每轮包含 27 个槽位,每个 SR 分配一个槽位。

如果被调度的 SR 未能在自己的槽位出块,该槽位会留空,网络不会安排备用节点补位。下一个槽位仍由下一位 SR 生产区块。

每 6 小时进入维护期时,网络会短暂跳过两个槽位(约 6 秒),用于统计投票、更新 SR 集合并处理到期提案;这并非网络停摆。随后新的活跃 SR 集继续按调度出块。

区块最终性和固化规则参见共识与 DPoS


区块大小

单个区块可承载的交易数据上限为 2,000,000 字节。该限制影响大型合约部署和包含大量签名的交易。


API

如何查询区块和交易

区块查询接口按“最新区块、已固化区块、按高度、按区块 ID、按区间”分工。区块对象中的交易是交易本体;执行结果、手续费、Event 和内部交易在 receipt 中,需要通过交易 receipt 接口查询。

查询目标推荐接口说明
最新区块wallet/getnowblock返回 FullNode 当前链头最新区块,可能尚未固化。
最新已固化区块walletsolidity/getnowblock返回 SolidityNode 视图中的最新已固化区块。
按高度查询区块wallet/getblockbynumwalletsolidity/getblockbynumFullNode 版本可查最新链头视图;SolidityNode 版本可用来判断某个高度是否已固化。
按区块 ID 查询区块wallet/getblockbyid已知区块 ID 时使用。
批量扫描区块wallet/getblockbylimitnext 或已固化区块扫描用于索引器回填和连续区块处理;需要最终状态时应扫描已固化高度。
查询交易本体wallet/gettransactionbyid返回 raw_data、签名和合约调用参数,不包含执行 receipt。
查询交易执行结果wallet/gettransactioninfobyid 或 SolidityNode 版本返回手续费、Energy 消耗、Event、内部交易和执行状态。

TriggerSmartContract 类型交易,不要只读取区块中的交易本体来判断业务结果;应继续查询 receipt。完整交易确认路径见 交易签名与广播——API 工作流

API说明
wallet/getblock按高度或区块 ID 获取区块
wallet/getblockbynum按高度获取区块
wallet/getnowblock获取最新区块

相关资源