在区块链产生之前,互联网应用大多是中心化的,其数据大多存储在图1-11所示的关系数据库中。与此对应的,基于区块链技术开发出来的是去中心化应用,其数据则大多存储在分布式的区块链数据库中。下面,我们将提出区块链的通用定义及其描述模型。
图1-11 关系数据库的数据结构
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息具有不可伪造、全程留痕、可以追溯、公开透明、集体维护等特征。基于这些特征,区块链技术奠定了坚实的可信基础,创造了可靠的合作机制,具有广阔的运用前景。
(1)独特的“块-链”数据结构。在图1-11所示的关系数据库中,其数据结构是由很多行数据记录组成的一张张数据表。除分布式特性外,区块链采用“块-链”数据结构,用块来批量存储不断增长的记录列表(也被称为交易,transaction),并且将各存储批次以密码学算法连接起来,就像一条链,如图1-12所示。
图1-12 区块链的“块-链”数据结构
(2)不可篡改性。在传统的关系数据库中,可以很容易地更新一条数据记录。但是,在区块链中,数据一旦写入就无法再更新了。
由于区块链里的每个区块都存储了前一个区块内容的哈希值,因此如果有任何区块的内容被篡改,则被篡改的区块之后的所有区块的哈希值也将随之改变,这种牵一发而动全身的设计使算法能够轻松检测并拒绝篡改行为。也就是说,区块链的一个显著特点是数据一旦写入链中,就不可篡改或重写,并且区块链是一直增长的。
(3)去中心化。区块链其实是一个完全去中心化的分布式数据库,任何节点都可以参与该数据库的读写,并且网络上存在大量的区块链副本(例如全节点),显然一切事情都会变得比中心化的应用环境复杂得多。例如,如何保证所有副本都已同步到最新状态;如何保证所有交易都被广播到所有运行和维护区块链副本的节点计算机上;如何防止恶意参与者篡改区块链;等等。
如图1-13所示,区块链基础架构可分为6层:数据层、网络层、共识层、激励层、合约层、应用层。每层分别完成一项核心功能,各层之间互相配合,实现一个去中心化的信任机制。
(1)数据层。数据层主要描述区块链技术的物理形式。区块链系统设计的技术人员首先建立的一个起始节点,即创世区块,之后在同样规则下创建规格相同的区块,通过一个链式的结构依次相连组成一条主链条。随着运行时间的增长,新的区块通过验证后不断地被添加到主链上,主链也会不断地延长。
每个区块中包含了许多技术,如时间戳技术,它可以确保每个区块按时间顺序相连接;再如哈希函数,它能够确保交易信息不被篡改。
(2)网络层。网络层的主要目的是实现区块链网络中节点之间的信息交流。区块链网络本质上是一个P2P(点对点)网络。每个节点既接收信息,也产生信息。节点之间通过维护一个共同的区块链来保持通信。
图1-13 区块链基础架构的6层模型
区块链的网络中,每个节点都可以创造新的区块,在新区块被创造后会以广播的形式通知其他节点,其他节点会对这个区块进行验证,当全区块链网络中超过51%的用户验证通过后,这个新区块就可以被添加到主链上了。
(3)共识层。在区块链的世界里,全网要依据一个统一的、大家一致同意的规则来维护更新区块链系统这个总账本,类似于更新数据的规则。让高度分散的节点在去中心化的区块链网络中高效达成共识是区块链的核心技术之一,也是区块链社区的治理机制。
共识层能让高度分散的节点在去中心化的系统中高效地针对区块数据的有效性达成共识。区块链中比较常用的共识机制主要有工作量证明、权益证明和委托权益证明三种。
(4)激励层。激励层的主要功能是提供一定的激励措施,鼓励节点参与区块链的安全验证工作。以比特币为例,在比特币总量达到2100万枚之前,奖励机制有两种:新区块产生后,奖励机制是系统奖励的比特币和每笔交易扣除的比特币(手续费);当比特币总量达到2100万枚时,新产生的区块将不再生成比特币,这时奖励机制主要是每笔交易扣除的手续费。
需要注意的是,激励层一般只有公有链才具备,因为公有链必须依赖全网节点共同维护数据,所以必须有一套激励机制才能激励全网节点参与区块链系统的建设和维护,进而保证区块链系统的安全性和可靠性。
(5)合约层。合约层主要是指各种脚本代码、算法机制及智能合约等。以比特币为例,比特币是一种可编程的货币,合约层封装的脚本中规定了比特币的交易方式和过程中涉及的种种细节。
(6)应用层。应用层封装了区块链的各种应用场景和案例,比如基于区块链的跨境支付平台OKLink,以及我们现在说的“区块链+”就是所谓的应用层。
注意,数据层、网络层和共识层是构建区块链应用的必要因素,没有这三者,该应用将不能称为真正意义上的区块链应用。而激励层、合约层和应用层则不是每个区块链应用的必要因素。