比特币的区块

作为比特币的继承者和后起之秀,以太坊在区块的设计上大幅扩容了比特币的区块结构。

我们具体看看较为简单的比特币。

长度(byte) 命名 描述
4 Version 区块版本,各版本共识算法、打包方法各异
32 Previous Block Header Hash 前一区块头的哈希值(父区块)
32 Merkle Root Hash 本区块交易树的根哈希值
4 Unix Time 矿工哈希该区块头时候的起始时间戳
4 nBit Format 该区块头哈希必须遵从的文本格式
4 Nonce 在计算符合条件的哈希过程中可变换的输入参数

如果我们把比特币区块头和区块体画成示意图,是这样的

../_images/Picture26.png

比特币区块

比特币的区块头的哈希值是矿工产生工作量的地方。 当矿工随机从交易池子中选中 1MB 大小的大约 4000 条交易时,将其组织成一棵 Merkle树 的形态。

在这棵树中,每笔交易都是叶子节点,它们两两结合产生一个哈希值的树中节点,再将树中的节点两两串联起来进一步哈希,递归直到算出根节点哈希值。

根节点哈希值作为一个输入参数,参与到区块头部的哈希值的计算中来(另一个输入参数是nonce值,这是一个任意 32bit 的值)。

矿工反复修改 nonce 值,直到区块头部哈希值的计算结果符合规定的 000... 开头数量。

如果 nonce 遍历完毕还没找到合适的区块头哈希,则只能被迫更改交易的排列组合,计算出新的根节点哈希值。

再尝试新一轮nonce值,直到成功计算出符合条件的头部哈希值(或者放弃)。

比特币高度为# 541,099的区块 [1] , 头部的哈希值如下。

#541,099 0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de
[1]笔者注:参见 https://live.blockcypher.com/btc/block/0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de/