第一节 我是谁
一、区块链的结构
区块链,从名称上看,可以分解为“区块”和“链”两部分,我们可以将其理解为由区块构成的一条链。下面我们就分别从“区块”和“链”两个方面来说说区块链的结构。
先说区块,区块是构成区块链的基本结构。不同的区块链平台和应用,如以太坊、超级账本、比特币有着基本相同的区块结构,仅在细节上有些许差别。区块可分为区块头和区块体,其结构如图3.1所示。
图3.1 区块链区块结构
区块头包括的数据及其含义如表3.1所示。
表3.1 区块头中的数据及其含义
表中的概念很枯燥,下面我们以发票(图3.2)为例来对比说明。
图3.2 发票样张
这是一张常见的发票。发票代码通常包含发票所属地区、年份、批次、发票种类等信息,这些信息可以大致看作发票的版本号。发票号码是本张发票在整本发票中的编号,当我们需要把一本顺序已被打乱的发票重新整理好时,正是通过发票号码将它们排好序的。但这个概念和前向哈希不太一样,在区块链中,每个区块记录了它前一个区块的哈希值(可以看作区块的编号,但这个编号不连续)。前后区块的链接关系有点像你在嘈杂的火车站排队买票,在排队的长龙中,每个人都只需要盯住自己前面一个人就可以保证整个队列秩序井然。时间戳与发票上的开票日期类似,表明本区块生成的时间,当然它比发票开票日期只写到“日”要精确得多。
随机数、难度值和Merkle根在发票上没有对应的信息,为区块所特有。其中随机数和难度值的作用在第二章已经说过,前者是向其他“矿工”公布的哈希计算的答案以供大家验证,后者是系统用来调整竞争记账权难度(即“挖矿”难度)的。
Merkle根稍微复杂点,它是一棵Merkle树最上面的一个节点。Merkle树是一种用来存放区块链中交易摘要信息的结构。现实生活中,很多结构都可以用“树”的方式来表示,比如公司组织架构(图3.3)、家谱(图3.4)等。
图3.3 公司组织架构示例
图3.4 家谱示例
Merkle树和这些例子的不同在于:它是规整的二叉树。所谓二叉树是指从树根开始,先分成两支,然后每支再分为两支,一直分到最底层。
图3.5 一棵天然“二叉树”
把图3.5的树用二叉树图绘制出来就如图3.6所示。
图3.6 四层二叉树图
二叉树结构最底层的节点称为叶子节点,叶子节点存放一次交易的摘要信息,摘要信息是通过哈希计算得到的,人是没法读懂的。它的作用是什么呢?前面说过,哈希计算的一个特点就是哪怕你对原数据进行了非常微小的改变,其摘要信息都将发生巨大的变化。哈希计算的一大作用就是防篡改,哪怕你只动一丁点儿手脚,也会在前后两次哈希计算结果的巨大差异上反映出来。
两个叶子节点汇集到一个小的根节点上,这个根节点存放的是两个叶子节点哈希计算结果的摘要信息。在图3.1中,根节点“交易12”存放的值是将叶子节点“交易1”和“交易2”的哈希计算的结果作为源数据,再做哈希计算的结果。以此类推,直到最后的主根节点,即主根节点保存了所有叶子节点按顺序两两组合后的哈希计算结果,这个结果就保存在区块头的Merkle根中。
一个区块的所有交易内容都保存在区块体中,如同发票上的明细一样。要完整地保存所有交易信息是非常耗费存储空间的。最初,比特币系统设定一个区块大小为1MB(兆字节),运行到2018年7月时,比特币区块链中总的交易数据大小已接近170 GB(千兆字节),根据相关研究机构估算,今后这一数字每一季度大约会增加12GB,因此不大可能把所有交易数据都保存到每一个节点上。而每个区块头的容量只有80B(字节),比特币网络中所有区块头的容量比总的交易数据要小得多,大约只有几十兆字节,对于单个节点而言很容易保存。
前面说过,每个区块头都记录了前一个区块头的哈希计算结果,使得后续节点可以通过区块头的哈希计算结果一直追溯到最开始的节点,从而形成一个链,这个链就是区块链。区块链的表现样式如图3.7所示。
二、区块链的类型
根据区块链应用场景的不同,我们可以大致地将其分成公有链、私有链和联盟链三种。
公有链是指整个区块链都对外开放,所有能够连接到区块链网络上的用户都可以加入公有链,不需要进行身份验证,完全公开透明。比特币就是一个公有链,只要你下载比特币客户端,就可以加入比特币网络,实现“挖矿”、交易等操作,没有任何限制。为了保证交易记账打包权竞争的公平,公有链下会采用不同的竞争方式(即共识机制,在后面会讲到)。公有链存在节点的可信度不可知和规模大小不可控的问题。
与公有链相反的是私有链,即区块链网络只对某个组织内部开放,比如一个公司、一所大学、一家医院等。由于是在组织内部,所以节点之间的可信度要高得多,链的规模也容易控制,交易记账打包权竞争可采用多种机制,如权益证明(PoS)、委托权益证明(DPoS)、实用拜占庭容错(PBFT)等方式。相对于比特币的工作量证明(PoW)方式,这些机制相对节能环保。
联盟链介于两者之间,有一定的封闭性,也有一定的开放性,比如由多家医院、药店、保险公司、监管部门等共同构成的医疗区块链。如果不同机构都有自己的私有区块链,那么就可以粗略地将其看成是多个私有区块链的联合,数据会在联盟机构之间共享。组成联盟链的节点可信度相对较高且链中节点数量相对可知。
图3 7区块链示意图
这有点类似于学校的网络:校园无线网一般只能在校内访问,校外是无法访问的。Eduroam就是专为科研和教育机构开发的安全的环球跨域无线漫游认证服务,现已覆盖全球70多个国家和地区的6000多家科研机构和教育机构,这就有联盟的意思了。再推而广之,电信运营商提供的无线网络就是全国甚至全世界都能访问的。
三、比特币与区块链的关系
本书前两章讲的是比特币,本章讲的是区块链,当然第二章也提到了区块链,本章也提到了比特币,甚至还有区块链网络、比特币网络等,这些概念混杂在一起,让人一头雾水:比特币和区块链是什么关系?
呃,这是什么关系?一个是基础,一个是应用的关系啊。区块链提供了一种机制、平台、框架,比特币是在上面运行的应用。举个例子,互联网和QQ是什么关系?互联网是数据通信基础设施, QQ是互联网上的应用。高速公路和客运大巴是什么关系?高速公路是道路基础设施,客运大巴在高速公路上提供客运服务。
关系很简单,但介绍区块链的书(包括本书)大都会从比特币讲起,原因有二:第一,区块链的概念是和比特币一起出现的,准确地说,区块链是随着比特币的出现而为众人所知的,虽然它的核心技术早就出现了。如同P2P与napster的关系一样,napster的出现使得大众熟知P2P技术(P2P一直隐藏在互联网中而被大众所忽略),进而带动了迅雷、电驴等P2P下载软件的走红,甚至很多视频播放器也采用了P2P技术。第二,比特币是区块链推出来后的一个很恰当的应用,大众很容易就接受了,也使两者有点分不开了,以至于很多人都把比特币等同于区块链,但我们要知道这完全是两个不同层面的事物,就像迅雷和电驴不等同于P2P一样。