区块链与传统数据中心模式的一个重要区别就是采用分布式架构,使得数据难以篡改,数据安全性大大提高。
传统的信息系统(如大家常用的微信、淘宝等)都采用中心式架构,中心式架构如图1-3(a)所示,即存在一个中心节点,该中心节点保存了其他所有节点的索引信息。索引信息一般包括节点IP地址、端口、节点资源等,各节点需要通信的时候,要先从中心节点获取这些重要信息。
中心式架构的优点是结构简单、实现容易,但缺点也很明显,中心节点承担了最重要的工作,对它的要求最高。当节点规模扩展时,容易出现性能瓶颈及单点故障问题。例如,如果微信账号出了问题,可能存在微信财付通里的资金就无法取出了。
那么,如何防止中心节点崩溃呢?很多人想到,将中心节点的功能分散到更多节点上,这些节点互相备份,不就可以降低单点故障的概率了吗?没错,区块链采用的分布式架构,就是基于这个原理设计的。
区块链采用的是分布式架构,又称P2P网络,分布式架构如图1-3(b)所示。P2P网络是技术上的一个术语,与互联网金融中的“P2P”没有任何关系。多个账本组成分布式网络后,极大地提高了系统的鲁棒性。
图1-3 分布式架构与中心式架构
分布式包含两层意思:一是数据节点独立,节点既不需要属于同一组织,也不需要相互签约(在中心式架构中,节点是统一管理的,如阿里云的节点都属于阿里巴巴公司);二是数据节点共同存储,每个参与的节点均可复制一份完整记录的副本。
分布式架构的效率肯定不如中心式架构,但是安全性大大提高了。很多人质疑区块链的一个重要的理由就是区块链的速度太慢,但正是因为区块链以牺牲效率为代价,才带来了更高的安全性和稳定性。
区块链中的每个区块都可以被视为一个账本,按记录时间的先后顺序将它们连接起来就形成了总账本,这就是链式结构。系统会设定每隔一段时间进行一次交易记录的更新和广播,所有节点会同步更新自己区块中的内容。如果所有收到广播的节点都认可了某个区块的合法性,那么这个区块将以链的形式被各节点加到自己的链中,就像给账本里新添加一页,这个流程与前面聪聪老师最后的小红花记账过程是一样的。
在传统的中心式数据结构中,只保存当前的结果,更新时会覆盖过去的数据,从技术上来说追溯比较困难。在区块链的链式结构中,每次更新都只在当前链中进行,即插入新的数据,这种独特的机制使得区块链上的数据很容易被追溯。
链式结构分为两个部分,一部分是区块结构,另一部分是区块之间的连接方式。我们先来看区块结构。
区块包括块头(header)和块身(body),块头封装了当前的版本号、前一区块地址、时间戳、随机数、当前区块的目标哈希值、Merkle树的根值等信息。区块结构如图1-4所示。
哈希是一类密码算法,任意一段信息都可以通过某种加密算法表现为一串“乱码”,即哈希值。
每个特定区块的块头都有唯一的头哈希值,任何节点都可以简单地对块头进行哈希计算,独立获取该区块的哈希值。父哈希值指向前一区块的地址,如此递推可以回溯到区块链的第一个区块,即创世区块。
区块高度是区块的一个标识符,作用与块头哈希值类似。可以理解为,区块链高度相当于门牌号,哈希值相当于GPS定位的经度和纬度,通过经纬度和唯一确定的门牌号可以确定地址。其中,创世区块高度为0。
图1-4 区块结构
块身只负责记录前一段时间内的所有交易信息,这与我们日常生活中的交易类似。例如,完成了某笔交易,在账本上记下这个时间段的交易明细,主要包括交易数量和交易详情等数据,如图1-4中的“交易1”“交易2”等。
将区块连接起来,就形成了区块链,“区块+链”的结构如图1-5所示。
图1-5 “区块+链”结构
交易信息是在某区块的某时间段内发生的所有交易的明细,包括交易双方的私钥、交易数量、数字签名等;前一区块形成的哈希值用于连接区块,实现过往交易的顺序排列;随机数是交易达成的核心,所有矿工节点竞争计算随机数的答案,最快得到答案的矿工节点生成一个新的区块,广播并更新,如此完成一笔交易,这就是挖矿机制的实现方式。
这样,矿工的数据中心就保存了所有的区块信息,这些区块一个接一个,从最初的创世区块到当前的区块,这就是“链式结构”。这种结构保留了历史上所有的交易细节,可以随时追溯到某时刻的交易情况,这就是区块链的“可追溯性”。
区块链的独特架构使其特别适用于那些对数据的鲁棒性要求较高的场合,如金融业、政府等,因为这些行业的数据中心一旦出问题,损失是巨大的,采用区块链这种分布式架构后,就算有单点故障,也不至于影响大局。目前,区块链已在各行各业得到了广泛应用,总地来说,可以分为两大架构,分别是区块链应用技术架构和区块链应用产业链架构。
区块链应用技术架构如图1-6所示。最下面是数据层,主要包括数据区块结构、加密算法等核心技术,区块结构在前面已经介绍过,加密算法等在后面的章节中会详细讨论;网络层负责通信和信息共享,包括P2P网络、传播机制和验证机制等;共识层非常重要,它制定了区块链社区参与各方的游戏规则和利益共享机制,包括PoW机制、PoS机制等,这些机制的作用是促进区块链社区的参与者贡献力量,推动社区发展;激励层包括各种数字通行证的发行机制和激励机制,可以从经济上激励社区的参与者。例如,比特币是一个民间发起的项目,它是如何吸引更多的人参与并贡献力量呢?这就是激励机制的作用。共识层和激励层共同作用,构成区块链社区的激励体系。
以比特币为例,它采用PoW机制,又称“工作量证明”,其基本原理是矿工们计算一道数学题,谁最先找到答案谁就获得比特币,并且创建新区块,其他矿工同步更新数据到新区块中。通俗地说,就是“按劳分配”,谁的贡献大,谁就获得比特币。
图1-6 区块链应用技术架构
比特币最初只是一个精神奖励,就像前面小故事中的小红花一样,谁也没有想到后来比特币居然如此值钱。
除了比特币,还有很多其他的数字货币,它们在以太坊这种公有链平台上通过发行Token(通证)的方式进行社区激励。
最上面是智能合约层,各种实际应用需求通过智能合约编程的方式,固定为一系列可编程的操作集合,不需要人的干预就可以自动运行,完成预先设定的操作。例如,可以利用智能合约实现保险的自动理赔、供应链中的合作协议签署、电商平台的自动结账等。可以说,真实世界的大部分活动都可以通过智能合约的方式实现,使整个社会更加自动化,从而提高效率和增加透明度。
从应用产业链的角度来看,区块链架构会稍微简单一些,目前业内也提出了不同的分层方法。这里介绍《2019腾讯区块链白皮书》中的设计,该设计将区块链应用产业链架构分为底层核心平台、平台产品服务层和应用服务层,如图1-7所示。
图1-7 区块链应用产业链架构
(1)底层核心平台主要负责基础的数据存储、数据通信、用户身份管理、共识机制等。其关键技术体现在安全和通信速度上。目前,高速通信技术、5G的发展,使底层核心平台处理数据的速度和效率得到极大提高。底层核心平台在安全方面负责私钥管理和用户身份管理,私钥管理采用非对称加密模式,用户身份管理可以与人的生物特征绑定,如指纹和人脸等。
(2)平台产品服务层主要构建各种智能合约,如数字资产合约、信息共享合约等。可以将这些智能合约理解为一种“根据预设的条件自动执行的程序集”,预先编制相应的游戏规则,当条件满足时,不需要人的干预,就可以自动完成相应的操作。智能合约提供了核心服务的支持平台,更多的应用服务通过调用不同的智能合约方式实现。例如,一项电商服务就可能包括信息共享合约、管理合约、支付合约等。
(3)应用服务层是针对实际需要搭建的、直接面向用户的各种服务的集合,包括区块链的各种应用场景和案例,如银行、保险、证券、供应链等行业的解决方案;具体的区块链应用包括供应链金融、数字黄金、公益寻人、游戏资产等。该层的作用几乎涉及人类社会的方方面面,图1-7中只列出了一小部分,更多的应用正在快速发展。
本节讨论了区块链核心架构,包括区块结构和链结构,以及应用架构。可以看出,区块链采用的是和目前主流数据中心完全不同的分布式架构,牺牲了效率,换来的是安全和公平,并且链式结构保留了交易的所有历史,从而可以从任意节点进行追溯。为了使这种分布式架构良好运行,还需要解决几项关键技术。