2.2 区块链模型
比特币是区块链的一个最为成功的应用。基于区块链技术模型和该模型所包含的各种关键技术,除了可用于比特币之外,还可以用于互联网其他新应用的方方面面,从而将区块链技术推广应用于社会,为社会服务。我们通过调查研究,将区块链模型总结为图2-2所示。
图2-2 区块链技术模型
从图2-2中可以看出,区块链技术模型包括9大部分,其中包含7层基础技术层以及2个贯穿整个7层的共用技术。9大部分分别为:数据存储层、网络通信层、数据安全与隐私保护层、共识层、智能合约引擎层、应用组件层、区块链应用层、区块链与现代技术融合以及区块链技术标准。
(1)数据存储层
形象地说,区块链就像一个个分布式账本,账本的账册之间通过链条链接在一起,构成一连串的账本链(即区块链)。账本里的数据需要以分布式方式存储在不同的节点,其存储形式需要借助于分布式文件系统或者分布式数据库技术来完成。因此,数据存储层主要包括数据区块的逻辑组织方式以及如何有效地实现对分布式账本的存储。
(2)网络通信层
区块链的区块数据和交易数据需要通过P2P网络在不同的节点之间进行同步、验证,这就需要网络通信层实现数据同步、校验等消息传播机制和验证机制等。
(3)数据安全与隐私保护层
区块链的安全,需要通过数据安全与隐私保护层来进行保护。该层主要技术包括:密码学加密技术、哈希算法、数字签名技术、身份认证技术、授权鉴权技术、零知识证明等隐私保护技术、防范网络攻击技术、审计追溯技术以及抗量子安全算法等安全保障技术。与传统的中心化PKI安全体系不一样,区块链上的安全技术强调采用“去中心化”的区块链安全技术体系和隐私保护体系。
(4)共识层
基于区块链的各种应用,其实质是DApp(Decentralization Application,去中心化应用)。去中心化应用在网络中的各个节点同时运行,其结果需要通过共识机制来形成共识,使得DApp应用状态在区块链网络中得到确认。比特币区块链和以太坊的共识层是使用工作量证明(PoW)共识机制,随着应用的不断丰富,通过工作量证明来达成共识已经不能满足应用的需求,特别是有高并发需求的应用场景。因此,在不同的应用场景需要构建能满足应用需求的共识机制,比如后来发展的权益证明(PoS)、股份授权证明(DPoS)等,还有一些传统的强一致共识算法,像Paxos家族共识算法和拜占庭容错算法(BFT)等,可以用来确保满足有强一致需求的应用场景。
(5)智能合约引擎层
为了让各种基于区块链的交易能够通过机器自动化完成各种交易和交易验证,需要用到智能合约技术。智能合约需要有一个计算引擎支持,一般是一个能提供图灵完备计算能力的虚拟机,加上能将高级编程语言编译成虚拟机上执行的字节码的编译器。另外,还需要设计防止图灵完备的智能合约因遭受攻击或程序设计错误进入死循环的机制,例如以太坊的Gas机制。未来的智能合约引擎还会提供智能合约的形式化证明,以确保智能合约部署之后逻辑正确,没有安全漏洞。
(6)应用组件层
所有的区块链底层技术最后均需要对外提供各种应用。而应用组件层正是一个为上层应用提供区块链服务的中间件。该层包括提供发行各种资产代币(比特币、以太币、token、积分等)功能的组件,还有根据不同业务规则来奖励用户的激励功能组件。这些功能都通过一个通用的API对上层应用开放接口。
(7)区块链应用层
区块链技术最开始的应用主要集中于以货币支付为代表的比特币以及其他各种网络虚拟货币等,称之为区块链1.0。随着区块链技术逐渐被认识,它凭借技术的特殊性,可以应用于更多的方面,如社会保险、物联网、社会信用体系等。这种以参与者之间的智能合约为代表的区块链2.0阶段的应用已经逐渐成为主流。由于区块链技术的特殊性,除了在区块链1.0和2.0阶段有较大的应用潜力之外,它也将逐渐往更高阶段发展——面向以人类社会发展为基础的应用,我们将其定义为区块链3.0的应用。主要包括:人类的健康、社交活动、组织机构的无人化管理、选举投票等具有鲜明社会性的应用。
(8)区块链与现代技术融合
区块链技术的发展离不开现代技术的支撑。若没有点对点网络、数据加密技术等支撑,不可能有区块链技术的发展。未来,区块链将和大数据、云计算、物联网、高速通信网、人工智能等先进技术深度融合。区块链的应用也将更智能,更普及。
(9)区块链技术标准
目前区块链技术在国内外尚未形成通用的技术标准。区块链技术涉及众多的核心技术,也涉及众多的数据和数据、应用和应用等的交互操作。标准化工作是一项技术能否通用、能否大范围应用的必经之路。因此,为了加快区块链技术的发展,制定各种区块链技术标准已经刻不容缓。有了统一的标准之后,大家才会对区块链有统一的认知,各种基于区块链的应用才会采用不同厂家互相认可的技术手段,使得不同商家的技术之间可以互相兼容,各种链上的信息和资产可以互联互通,从而促进区块链技术的健康发展。
2.2.1 数据区块
数据区块记录了该区块创建期间所记载的所有交易信息,例如比特币的每一个数据区块将记载某一个10分钟时间段内大部分的交易信息。其他应用的数据区块可以各自定义区块的时间范围等。比特币里的数据区块是指比特币交易的账本。其他区块链应用的数据区块是指各自应用所处理的各种交易的详细记录信息。一般来说,所有的数据区块都必须保存在每一个参与者的电脑、服务器甚至云环境中,各个节点都是完全对等的,均保存了数据区块的完整信息,一个数据节点遭到破坏,并不会影响整个系统数据区块的完整性和安全性。当然,根据应用场景的特点,不一定每个节点都保存所有区块的完整信息,例如手机上或者是浏览器上的区块链应用就不会保存所有的区块信息。
数据区块由区块头和区块体两部分组成。区块头保存着各种用于链接上一个区块的信息、各种用来验证的信息以及时间戳等信息,主要包括:块编号、前一个区块头的哈希值、一个用于证明工作量难度的随机数和难度目标、时间戳、用于验证区块体交易的一个总的哈希Merkle树根。区块体主要包含该区块(账本)中的所有交易信息以及所有交易信息的Merkle树(树根除外,树根存储在区块头内)。图2-3简要展示了比特币的数据区块的基本结构。
图2-3 比特币区块基本结构
2.2.2 链式结构
区块链应用的所有区块之间按照时间先后顺序链接成一个完整的链条。该单向链条可以逐渐增加区块,当一个新的区块创建后,就补充在最后一个区块后面。同时该单向链条也可以回溯发生的所有交易信息,从而确保安全性和可验证性。图2-4展示了一个比特币的链式结构。
图2-4 一个简单的链式结构
所有的区块链连接成一长串,应用的所有交易信息都保存在区块内,并且通过链条串联在一起,每一笔交易都可以向前溯源,找到其所有的历史记录。由于该长串链条由每个节点所认可,有人想要篡改链条几乎是不可能的事情,他必须要将所需篡改的区块以及前后的所有区块都进行修改才可以。否则通过链条的溯源机制,问题很快就会被发现。而篡改链条上的所有区块是不可能的事情,因此区块链的链式结构能够有效地防止数据被篡改。
2.2.3 Merkle树
Merkle树是一种典型的二叉树或多叉树,它包含根节点、中间节点以及叶子节点。根节点将存储在区块头中。因此,要判断区块体交易数据是否有修改,只需要验证Merkle树的根节点即可。根节点、中间节点和叶子节点是一组哈希值。叶子节点存储了该区块内的所有交易的初始哈希值,一个交易对应一个叶子节点。图2-5展示了一个简单的、基于区块链的保险智能合约的Merkle树的数据结构。
图2-5 Merkle树示例
在本区块内有4笔交易,每笔交易对应Merkle树的一个叶子节点。使用哈希函数对每笔交易进行计算,分别得到哈希值1、哈希值2、哈希值3以及哈希值4。然后通过对每个哈希值进行两两合并哈希,分别得到哈希值(1+2)以及哈希值(3+4)。最后哈希值(1+2)与哈希值(3+4)进行两两合并哈希计算,得到本区块所对应的Merkle树的树根,存储在该区块的区块头中。
根据哈希计算的特点,只要交易1到交易4中的任何一个交易被修改,就会直接影响Merkle树根的结果,从而可以容易验证出交易是否被恶意篡改。另外,Merkle树的一个显著特点是具有很好的溯源性。从图2-7可以看出,如果交易2被修改了,会直接影响到哈希值2、哈希值(1+2)以及Merkle树根。因此通过对Merkle树进行比较可以追溯哪个交易被篡改了。另外,后面将要讲到的零知识证明也可以由Merkle树来完成。
图2-7 一个简单的区块链传播机制