跳转至

区块


区块是成批的交易,带有链中前一个区块的哈希值。 这将区块链连接在一起。每个附加区块都会加强对前一个区块的验证,从而加强对整个区块链的验证。 区块哈希值是根据区块内容通过哈希算法计算出来的,这使得区块内容很难被篡改, 因为历史上任何一个区块的改变都会使后面所有的区块失效,因为所有后续的哈希值都会改变,每个运行区块链的人都会注意到。

什么是区块

为确保波场网络上的所有参与者保持同步状态,并就交易的精确历史达成一致,我们将交易批量打包成区块。这意味着数以百计的交易将同时提交、商定和同步。

区块如何工作

为了保存交易历史,区块是严格排序的。每个新创建的区块都包含其父区块的哈希值。在任何时候,网络上几乎所有参与者都能就区块的确切数量和历史达成一致。

超级代表一旦生成区块,就会向网络广播新生成的区块,网络中的所有节点都会将接收到的区块添加到自己的区块链末尾。具体的区块共识过程由波场网络的Proof of Stake协议规定。

区块中有什么

区块对象看起来有点像这样:

{
    "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 - 区块中交易 Merkle 树根节点的哈希值
  • raw_data.witness_address - 产生该块的超级代表账户地址
  • raw_data.parentHash - 前一个块的块 ID。区块 ID 是区块的唯一标识符,由区块高度和区块头 raw_data 的哈希值组成。 ParentHash 将块以链的方式连接在一起
  • raw_data.version - 版本号,用于标识链的版本
  • raw_data.timestamp - 创建区块的时间戳
  • witness_signature - 超级代表在区块上的签名

transactions 是打包到块中的交易列表。每笔交易的内容请参见交易章节

区块间隔

在波场中,每三秒被视为一个间隔。 在正常情况下,每个超级代表将在相应的时隙时间内产生一个数据块。 因此,波场的平均分块间隔约为三秒。 如果某个超级代表因故未能生成区块,则相应的间隔将空出, 下一个超级代表将在下一个间隔生成区块。在维护期间,区块生产将跳过两个间隔。

区块大小

区块本身的大小是有限制的,一个区块的最大大小不会超过 2,000,000 字节(约 1.9M)。