这周区块链应该是朋友圈最热话题没有之一了。徐小平老师带了一波节奏,另外
Facebook、暴风、迅雷等各大公司也陆续宣布开始布局区块链,这个词变得空前
火热。查了查热度数据,“区块链”这周的微信指数急速飙升,如下图。
这样的火热让很多人非常焦虑,大家都担心自己被时代甩在后面,纷纷“跑步进
场”。当然,适度焦虑是应该的,大家可以反思下自己面对机会时的迟钝、以及
学习的执行力,但依然不应该盲目投机,而是该保持理性,冷静思考适合自己的
参与区块链世界的策略。
本篇将介绍区块链的结构和运作原理。
上一篇我们说到区块链是分布式的账本,那么这个账本是怎么工作的呢?首先我
们需要了解下它的架构:简单地看,区块链共有三个层次:协议层、扩展层和应
用层。
简单理解,还是用这个账本的比喻,协议层就是账本内容和账单,拓展层则是记
账原则,应用层则是每个人的账户余额。有了账户,账单,记账方法,这一个体
系就可以运转起来了。
但是账本毕竟太浅显了,这次我们换一个比喻,把区块链想象成一个电脑软件,
那么协议层就是电脑的操作系统,拓展层是电脑的驱动程序,而应用层则是直接
面向客户的APP、客户端。
(1)协议层
协议层就是指代最底层的技术,扮演的角色类似电脑的操作系统。协议层可以又
细分成两个层次:存储层+网络层。
存储层:区块链数据
存储层其实就是数据层,也就是“账本上的内容”。从第一个区块开始,之后在
同样规则下创建的规格相同的区块通过一个链式的结构依次相连组成一条主链
条。随着整个区块链的不断运行,新的区块通过验证后会不断被添加到主链上,
主链就会不断延长。
到这里我们会发现存储层最基本的结构单元就是区块,为了让大家更好地理解区
块和其连接机制,我们需要先介绍三个概念:哈希算法,时间戳,和Merkle树结
构。
第一个概念是哈希算法,它是保证区块链里交易信息不被篡改的单向密
码机制。这里涉及到密码学的知识,我们暂且略过,只需要知道:一段明文
经过哈希算法处理后,将转化成为一段长度较短、位数固定的散列数据。这
个加密过程是不可逆的,我们无法通过输出的散列数据倒推原本的明文是什
么。同时,输出的散列数据和输入的明文是一一对应的,任何一个输入信息
的变化都将使得输出的散列数据的变化。区块链通过哈希算法对一个交易区
块中的交易信息进行加密,并把信息压缩成一串随机散列数据,即能够唯一
而准确标识一个区块的哈希值。区块链中任意节点通过简单的哈希计算都可
以获得这个区块的哈希值,计算出的哈希值没有变化就意味着区块信息未被
篡改。
第二个概念是时间戳,顾名思义,时间戳就是给区块链里的每一个信息
都标记了其发生时间,证明交易记录的真实性。任何人都无法篡改时间戳,
区块链通过时间戳保证了每个区块依次顺序相连。
第三个概念是Merkle树(默尔克树)结构,这是区块链中为了减少数
据计算量的一个结构,如下图所示。
Merkle树的叶子节点存储数据信息的哈希值,树根节点存储的是对其下面所有叶
子节点的组合进行哈希计算后得出的哈希值。区块中任意一个数据的变更都会导
致Merkle树结构发生变化,Merkle树结构使得我们只需验证其统一生成的统一哈
希值,大大减少了数据的计算量。
了解这三个概念以后我们再来看区块。区块由包含元数据的区块头和包含交易数
据的区块主体构成。其中,区块头里包含的元数据有三组:
1、前面区块的哈希值,用于连接前面的区块。
2、挖矿难度、Nonce(随机数,用于工作量证明算法的计数器,下篇文章重点讲
解)、时间戳;
3、能够总结并快速归纳校验区块中所有交易数据的Merkle树根数据。
区块链系统每隔一段时间会创建一个新的区块,其中包含了这段时间整个系统发
生的所有交易,这些交易的信息通过哈希算法生成哈希值,这些哈希值通过
Merkle树结构生成树根节点的哈希值,也就是这个区块的哈希值。新区块通过前
一个区块的哈希值与前一个区块连接,这样形成一条完整的交易链条,如下图所
示,这也就是整个存储层的构成。
网络层:区块链节点
网络层的本质则是一个点对点的网络,节点可以产生、接收信息,节点与节点之
间通过维护一个共同的区块来保持通信。
区块链的网络中,节点和节点之间的通讯信息会记录在新的区块中,新区块创造
后会以广播形式通知到其他节点,其他节点会对这个区块进行验证,当全区块链
网络中有超过51%的用户通过了验证,这个新区块就会被加到主链上。
(2)扩展层
扩展层扮演的角色类似电脑的驱动程序,这个层次使得区块链的产品更加实用。
扩展层里包括了共识层、激励层与合约层。
区块链的拓展层
首先是共识层,区块链网络中,各个节点高度分散化,能否高效地针对
区块数据的有效性达成共识非常关键。为了确保信息的准确性和有效性,区
块与区块之间需要有一个协议,判断数据是否有效,这就是共识机制。区块
链中比较常见的共识机制主要有工作量证明、权益证明和股份授权证明三
种。关于这几种共识机制的详解我们会在第三篇文章里介绍。
激励层的主要功能则是提供一定的激励措施,鼓励节点参与区块链的安
全验证工作。我们以比特币为例,它的奖励机制有两种。在比特币总量达到
2100万枚之前,新区块产生后系统将奖励比特币和每笔交易扣除的手续
费;当比特币总量达到2100万时,新产生的区块将不再生成比特币,这时
奖励机制主要是每笔交易扣除的手续费。
合约层则主要是指各种脚本代码、算法机制以及智能合约等。同样以比
特币为例,它是一种可编程的货币,合约层封装的脚本中规定了比特币的交
易方式和过程中涉及的细节。
(3)应用层
这个层面则相当于电脑中的各种软件程序,它封装了各种应用场景和案例,其中
最简单也是最典型的应用就是大家目前使用的虚拟货币钱包。
举个例子,我们可以把区块链中每个人的钱包想象成一个银行账户,只不过这个
账户不需要背后的银行(中心化)来背书,而是靠去中心化的记账,来保证每个
人账户余额的准确性。这就是一个典型的区块链应用。
搭建在以太坊上的各类区块链应用就是部署在应用层,所谓可编程货币和可编程
金融也将会搭建在应用层。后面的文章我们也会详细介绍区块链和各个行业的结
合案例。
(4)总结
在本篇文章中,笔者将区块链的结构分为三层:协议层,拓展层,和应用层。
协议层包括网络层和数据层,相当于区块链系统的操作系统,每一笔交易数据都
存储在数据层里,并需要网络上的节点共同确认。
拓展层可以分为共识层,激励层,和合约层,相当于区块链系统的驱动程序。通
过智能合约、共识机制、激励机制,来促进区块链系统的高效运转。