比特币的区块¶
作为比特币的继承者和后起之秀,以太坊在区块的设计上大幅扩容了比特币的区块结构。
我们具体看看较为简单的比特币。
长度(byte) | 命名 | 描述 |
4 | Version | 区块版本,各版本共识算法、打包方法各异 |
32 | Previous Block Header Hash | 前一区块头的哈希值(父区块) |
32 | Merkle Root Hash | 本区块交易树的根哈希值 |
4 | Unix Time | 矿工哈希该区块头时候的起始时间戳 |
4 | nBit Format | 该区块头哈希必须遵从的文本格式 |
4 | Nonce | 在计算符合条件的哈希过程中可变换的输入参数 |
如果我们把比特币区块头和区块体画成示意图,是这样的
比特币的区块头的哈希值是矿工产生工作量的地方。
当矿工随机从交易池子中选中 1MB
大小的大约 4000
条交易时,将其组织成一棵 Merkle树
的形态。
在这棵树中,每笔交易都是叶子节点,它们两两结合产生一个哈希值的树中节点,再将树中的节点两两串联起来进一步哈希,递归直到算出根节点哈希值。
根节点哈希值作为一个输入参数,参与到区块头部的哈希值的计算中来(另一个输入参数是nonce值,这是一个任意 32bit
的值)。
矿工反复修改 nonce 值,直到区块头部哈希值的计算结果符合规定的 000...
开头数量。
如果 nonce 遍历完毕还没找到合适的区块头哈希,则只能被迫更改交易的排列组合,计算出新的根节点哈希值。
再尝试新一轮nonce值,直到成功计算出符合条件的头部哈希值(或者放弃)。
比特币高度为# 541,099的区块 [1] , 头部的哈希值如下。
#541,099 | 0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de |
[1] | 笔者注:参见 https://live.blockcypher.com/btc/block/0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de/ |