到底什么是区块链?区块链结构简述
阿牛哥 Lv4

这些年区块链被吹上了天,越是被吹得神的东西,阿牛哥越是报有怀疑的态度,至少就“区块链”的本意而言,没那么高深莫测。

从计算机角度看区块链

严格的讲,区块链是一种链式数据结构。在IT领域,链表应该是最常见的链式结构,而区块链和链表十分相似,区别在于链表以内存指针连接节点,而区块链之间是以哈希指针连接的。

哈希指针

以哈希值代替内存地址的指针。在区块链世界里,哈希指针是串起整个区块链结构的关键,也是组织每个区块中交易数据的关键。

在比特币里,我们采用SHA256来计算数据的哈希值。

区块链的基本结构

区块链是由区块节点构成的链式结构。

每个节点分为headerbody两部分。其中header部分用于存放节点之间的衔接数据;而body部分用于存放交易数据。

区块链的基本结构

header包含:

  • version
    比特币的版本号
  • previous header hash
    指向上一个区块header的哈希指针,其值为前一个区块的header数据的哈希值
  • Merkle root hash
    指向body的哈希指针
  • target
    挖矿难度
  • nonce
    为了让heaer的哈希值小于某个数而凑出来的随机数

所有的区块以previous header hash为指针衔接起来,构成区块链。采用哈希指针可以保证区块链数据的完整性。一旦链中的某一个区块被篡改,而它的下一个区块所记录的previous header hash是不会随之改变的,所以这样的篡改很容易被检测出来。换句话说,任何钱包只要知道当前最新区块的哈希值,就可以沿着区块链验证以往所有区块的完整性。

body

body包含交易数据,这些数据以默克尔树(Merkle Tree)形式组织。

区块body结构

上图解释了默克尔树的数据结构,在一个区块中包含多个交易,每个交易计算哈希,每两个哈希组成一对,再次计算哈希,然后再两两组合计算哈希,以此类推。

采用默克尔树的优势在于减少计算量,便于钱包验证交易。

举个例子,比特币的轻节点钱包不会下载所有的交易数据(也就是body部分),只会下载header数据。当需要验证某个交易时,轻节点钱包可以对交易所在的区块计算哈希值,从而实现在不获取区块链全部交易数据的情况下完成历史交易的验证。根据数据结构的相关知识,计算的时间复杂度为 O(log(n))O(log(n))

总结

可见,区块链的结构并不复杂,和常见的数据结构的设计相似,每个节点分headerbody两部分,body中存放数据,header连接body和其他节点。即使一个计算机本科的学生理解起来也完全没问题。