比特币的区块

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

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

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

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

http://static.codebaoku.com/pics/65/f2/65f229080a70aafd7e8babd6cbee7637.png

比特币区块

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

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

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

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

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

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

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

#541,099 0000000000000000000ec8769a995429b85e6301c97fa76de6fb9bc5162b27de

 

以太坊与比特币的账户模型,从根本设计出发点来讲是不同的。根据以太坊黄皮书的描述,以太坊账户的概念与“银行储蓄账户”的概念相似。每个人都能开设账户,且账户初始余额为0。 当以太坊区块链运行时, ...