区块链记账原理
发布时间: 2018-11-05 22:53:38 | 145 次浏览

区块链是由一个个区块构成的有序列表,每一个区块都记录了一系列交易,并且每一个区块都指向了前一个区块从而形成一个链条。

区块链有以下几个特征:

  • 区块链就是一个不断增长的全网总账本

  • 每个完全节点都拥有完整的区块链

  • 节点总是信任最长的区块链

  • 伪造区块链需要拥有超过51%的全网算力

我们来看看区块的结构图:

区块链记账原理

区块结构图

如上图所示:每个数据区块包含区块头和区块体

区块头封装了当前版本号、前一区块哈希值、当前区块PoW要求的随机数(Nonce)、时间戳、以及Merkle根信息.

区块体则包括当前区块经过验证的、 区块创建过程中生成的所有交易记录。这些记录通过 Merkle树的哈希过程生成唯一的Merkle根并记入区块头.

  1. 每一个区块都有一个唯一的哈希标识,称为区块哈希;

  2. 区块通过上一个区块的哈希来指向上一个区块;

  3. Merkle Hash用来确保所有交易记录无法被篡改;

  4. 区块的主要数据就是一些列交易;

  5. 第一条交易通常是Coinbase交易,也就是矿工的挖矿奖励;

  6. 后续交易都是用户的交易;

Merkle 树

前面我们知道在区块的头部有一个Merkle Hash,记录了本区块的所有交易的Merkle Hash。那Merkle Hash是如何计算出来的呢?

假设这个区块有5笔交易,首先,对每一笔交易进行第一hash,也就是2次SHA-256的运算,得到5个哈希值,也就是a1、a2、a3、a4、a5,这五个哈希值也可以看做是数据,将a1和a2拼起来、a3和a4拼起来,再计算出2个哈希值b1和b2。那a5怎么办呢?答案是将a5复制一份在与a5拼起来进行哈希计算得到b3;继续将b1和b2拼起来进行哈希运算得到c1,同样的b3会被复制一份再与b3拼起来进行哈希运算得到c2;最后将c1和c2拼起来进行哈希运算得到最终的哈希值,这个哈希值就是Merkle Hash。

区块链记账原理

Merkle树构造过程

从Merkle Hash的计算方法可以得出结论:修改任意一笔交易,哪怕是一个字节,或者交换两个交易的顺序,都会导致Merkle Hash验证失败,也就会导致这个区块本身是无效的。所以Merkle Hash记录在头部,它的作用就是保证交易记录永远不能够被修改。

相对于哈希列表,Merkle树是一种哈希二叉树,它的明显的一个好处是可以单独拿出一个分支来(作为一个小树)对部分数据进行校验,更加高效。

区块本身用Block Hash来标识。一个区块自己的区块哈希并没有记录在区块头部,而是通过计算区块头部的哈希得到的。

区块头部的Prev Hash记录了上一个区块的哈希。这样可以通过Prev Hash追踪到上一个区块。由于下一个区块的Prev Hash又会指向当前区块,这样每一个区块的Prev Hash都指向了上一个区块。这些区块串起来就形成了区块链。