比特币的区块
作为比特币的继承者和后起之秀,以太坊在区块的设计上大幅扩容了比特币的区块结构。
我们具体看看较为简单的比特币。
长度(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的区块, 头部的哈希值如下:
#541,099 | 0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de |
以太坊与比特币的账户模型,从根本设计出发点来讲是不同的。根据以太坊黄皮书的描述,以太坊账户的概念与“银行储蓄账户”的概念相似。每个人都能开设账户,且账户初始余额为0。 当以太坊区块链运行时, ...