Ed828115b1dd75a352f842f9923b416d
014 | 从微观到宏观理解区块链

最近区块链异常火爆,而且就只是在这一两个月内的事情,无疑,今年应该会成为区块链爆发元年,相应地,对区块链技术人员的需求将会大幅度增加,为了让大家早日入门区块链开发领域,以取得先发优势,从而在这场区块链革命浪潮中立于不败之地,因此,我决定提前编写系列文章,跟大家聊聊区块链技术。

微观区块链

相信不少人都听到说区块链是分布式账本、分布式数据库、去中心化的等等,有了一些大概的认知,但也只是一些碎片化的认知,还无法形成体系,所以也还不能理解区块链的本质。下面,我将从微观到宏观简单讲解区块链,力求让大伙更容易理解区块链的真正本质。

那么,从微观上理解区块链,就要从理解区块链最底层的数据结构开始。区块链(Blockchain),简单来说就是按时间顺序将数据区块通过哈希指针的方式连接起来的一个链表。哈希指针是区块链里最常用的数据结构,其实就是一串数据的哈希值,我们知道,一串数据的哈希值就是这串数据的指纹/摘要,因此就可以用这个哈希值来指向这串数据,如下图:

区块链里的每一个区块都有对应本区块的哈希指针,而除了创世区块(即第一个区块)之外,其他每个区块都存储了前一个区块的哈希指针,从而形成如下所示的一个链条,即区块链:

这样的数据结构可以保证数据无法篡改,因为一旦篡改了任何区块的数据,对应的哈希指针就会出错,因此一旦有恶意篡改就能校验到。数据的无法篡改也是区块链本质上最核心的一个特性。

接着,再来看看区块链的基本单元——区块(block),以比特币为例,每个区块的数据结构大致如下:

其中,Tx0 ~ Tx3 表示每一笔交易数据,Hash0 则是 Tx0 这笔交易数据的哈希指针,Hash01 则是 Hash0 + Hash1 的哈希指针,这样层层叠加上去,得到最后的 Root Hash。从图中也可以看出,从Hash0 到 Root Hash 是一个三层的二叉树,由于这颗树的所有节点都是 Hash 值,所以也称为 Hash Tree,但更专业的名称叫 Merkle Tree。不过 Merkle Tree 不一定是二叉树,也可以是多叉树。Merkle Tree 的叶子节点(即Hash0 ~ Hash3)是数据块的 Hash 值,而非叶子节点的 value 则是根据下面的叶子节点的 Hash 值串联起来后再计算 Hash 得出的。通过 Merkle Tree 结构,底层的每一笔交易也都无法篡改,一旦篡改,Root Hash 就会不一致。

另外,该结构也简化了支付校验,比如,我们要校验 Tx3 这笔交易的有效性,那只要校验从 Tx3 到 Root Hash 的分支 Hash 值即可,如下图所示,计算 Tx3 的 Hash值得到 Hash3,再结合 Hash2,计算出 Hash23,再拼上 Hash01 计算出 Merkle Root,只要计算出来的 Merkle Root 和实际存储的 Root Hash 一致,则表明该该笔交易是有效的。

Root Hash 会保存在区块头里,区块头里一般会保存有以下信息:

  • Version:版本号
  • Prev Block:上一个区块的 Hash 值
  • Merkle Root:即上面所说的 Merkle Tree 的 Root Hash
  • Time:区块的时间
  • Difficulty:区块难度
top Created with Sketch.