区块是一个包含了一系列交易的集合,另外一个区块还包含了前一个区块的哈希值,这种实现方式将各个区块连接到一起形成链。每添加一个区块都会增强前一个区块的确定性,从而增强整条区块链的确定性。区块哈希值是根据区块内容通过hash算法计算而来的,这使区块内容具有难以篡改的特性,因为历史上任何块的更改,都将使后续的所有区块失效,任何运行节点的人都会发现这个更改。

区块的意义

为了确保TRON网络上的所有节点保持一致的状态并就交易的历史达成一致,我们将交易打包进区块,实现了数百个交易同时被提交、确认以及同步到全网。

区块的工作原理

为了维护交易的历史状态,区块是严格排序的,每个新创建的区块都包含其父区块的hash值。在任何给定的时间,网络上的几乎所有节点都对区块的数量和历史状态达成一致。

一旦超级代表生产出一个区块后,会将新产出的区块广播到网络,网络中所有节点都会将收到的区块添加到自己区块链的末尾。具体的区块共识过程由TRON网络的“权益证明”协议来实现。

区块的组成

一个区块的格式如下:

{
    "block_header":
    {
        "raw_data": 
        {
            "number": 23345280,
            "txTrieRoot": "b04e2c9fcbc26bff7173968a198f23b8a1e2875b3f24c02f186c70c3e7a3041e",
            "witness_address": "410765bed97bbd836f6e489265fd0d9ca1c888e606",
            "parentHash": "000000000164387f439d804494b10e099751748f0a555ce0e7860fee4e1dc6c6",
            "version": 23,
            "timestamp": 1648717482000
        },
        "witness_signature":"47b1f77b3e30cfbbfa41d795dd34475865240617dd1c5a7bad526f5fd89e52cd057c80b665cc2431efab53520e2b1b92a0425033baee915df858ca1c588b0a1800"
    },
    "transactions":[{<->},...,{<->}]
}

区块包括两部分内容:区块头和交易列表。区块头包括以下字段:

  • raw_data.number - 区块号,即该区块处于链上的高度
  • raw_data.txTrieRoot - 区块中交易的默克尔树的根节点的哈希值
  • raw_data.witness_address - 产块的超级代表账户地址
  • raw_data.parentHash - 上一个区块的区块ID。区块ID是区块的唯一标识符,它由区块高度以及区块头的raw_data的哈希值组成。通过parentHash将各个区块连接起来形成了链
  • raw_data.version - 版本号,用来标识链的版本
  • raw_data.timestamp - 区块被创建时的时间戳
  • witness_signature - 超级代表对该区块的签名

transactions是被打包进该区块的所有交易的列表,其中每个交易包含的内容,请参考交易章节。

区块间隔时间

在TRON网络中,区块间隔时间为3秒,即每3秒产生出一个区块。

区块大小

区块的大小是有限制的,最大不会超过2,000,000 bytes(约1.9M)。