区块链技术发展与展望
2020-08-04袁煜明赵文琦
李 慧 袁煜明 赵文琦
(火币区块链研究院,澄迈 571900)
1 引言
2008 年10 月31 日,中本聪在密码朋克邮件组中发布了《比特币:一种点对点的电子现金系统》[1],由此开启了加密数字货币与区块链技术的兴起之路。作为加密数字货币的底层基础技术,区块链技术一度与其紧紧绑定在一起,应用在各类公链项目中。而后,随着对区块链技术价值的发掘,区块链技术逐渐发展成为独立的研究领域,二者开始逐渐被区分。区块链技术被视作为底层的分布式账本技术,加密数字货币则被视作该层技术之上的激励手段及其应用生态中的金融工具,在联盟链的应用领域中甚至可以不需要加密数字货币。
区块链技术的主要特征包括完全分布式、透明、不可篡改和可追溯。完全分布式:区块链利用分布式存储和分布式网络的技术,使得区块链网络中没有中心化节点且账本数据分散存储在网络中的各个对等节点中;透明:除了被加密的私有信息外,分布式账本中的所有信息均可以通过接口查询,网络中的所有节点均可以对其进行查询与校验。不可篡改:除了允许信息更改的部分私有区块链之外,区块中的信息一旦被全网达成共识并记录在区块链中,就无法再被更改。可追溯:存储在区块链中的交易可以通过其链式结构进行来源去向的追查。
这些特征对比传统中心化的技术架构体系在部分应用场景下有其特有的优越性,随着区块链技术的活力逐步彰显,越来越多的产业开始应用区块链技术。在金融领域,其被应用到支付清算、保险理赔、供应链金融等;在政务领域,被应用到数字身份、征信、司法存证、电子政务等;在医疗领域被应用到药品供应链、临床数据等;在城市建设领域被应用到交通运输、能源管理、公共建设等。同时,也有诸多国家颁布政策法令支持区块链技术的发展甚至将其与国家战略相关联。
在早期的研究中,区块链的体系架构主要聚焦在数据结构与共识机制上[2],还有一部分研究工作提出了完整区块链技术架构并做了充分的论述[3‐4],但对区块链技术发展过程中涌现的扩展技术着墨不多,因此本文在前人的基础上,结合近年来区块链技术的发展现状总结了区块链的五层基础技术架构,并在此基础上讨论了各项扩展技术的研究与应用进展。
2 区块链基础架构
2.1 基础架构
区块链技术经过十多年的发展,基本形成了如图1 所示的基础技术架构,自下而上分别是数据层、网络层、共识层、合约层以及应用层。数据、共识、网络是区块链分布式账本的核心内涵,可以合称为分布式账本层。
其中,数据层的内涵主要包括数据结构、数据模型及数据存储;网络层负责组网、传输与校验;共识层通过共识算法协调分布式环境中的协作节点达成共识;合约层包含了智能合约编写和执行的环境;应用层则运行着基于区块链技术的各种应用。
针对区块链的基础技术架构,也有研究人员提出过不同的分层架构方案[3‐4]。第一个不同之处体现在层次排列次序不同,区块链的共识层、网络层与数据层在技术实现上并无严格的次序依赖关系,其三者可被统一视作为“分布式账本层”,因此不同的排布方式不影响技术架构的内涵。第二个不同体现在是否将“激励层”纳入架构中,由于激励层的讨论内容更偏向经济模型而不是技术模型的设计,同时激励层在不同的区块链类型中并不普适存在,因而不被纳入到本文的基础技术架构中。
在该种架构下,应用层通过合约层提供的智能合约工具构建各类区块链应用,合约层依赖分布式账本层完成分布式网络下的共识达成、数据传播与存储。
2.2 数据层
区块链的数据层以分布式的方式存放着记录交易的区块。在业界实际的应用中,不同区块链的数据结构、数据模型及数据存储各有异同。
(1)数据结构
就数据结构而言,区块链以区块为单位进行组织。
区块包含区块头和区块体两部分,典型的区块结构如图2 所示。区块头中存放的数据为支持区块链运行的功能型数据,其数据域没有通用的标准,但通常会包含前块哈希、默克尔根及时间戳信息。前块哈希本质上是指向父区块的指针,将区块链接起来;默克尔根是区块体中的默克尔树树根的值;时间戳记录了区块的产出时间可用于存证。不同的区块链还会包含不同的与其数据组织机制和共识机制紧密关联的数据域。如比特币区块头中还包含版本、难度目标及一个与工作量证明算法关联的随机数等;以太坊的实现机制更为复杂,区块头中还包含了布隆过滤器、手续费gas上限、叔块哈希等更多的信息。
区块体中通常主要包含交易数据的信息,交易数据通常利用默克尔树[5‐7]进行组织,以增加数据的篡改成本并实现数据的快速比对与存在校验。默克尔树中每一个节点都是哈希值,因而也被称作哈希树。为了提升树的性能,以太坊提出了结合默克尔树与前缀树[8‐9]的MPT(Merkle Patricia Trie)树[10]用于存储其交易、收据以及状态数据。
现今主流的区块链结构为链式结构,如图3 所示,区块与区块之间由前序哈希连接。当链上产生分叉时,选取最长链作为主链。但近年也出现了以有向无环图(DAG)[11]作为组织形式的区块链项目[12‐14]。
(2)数据模型
区块链技术中的数据模型主要分为两种,交易模型和账户模型。交易模型侧重于记录交易的过程,即交易的来源与去向,以比特币、Corda[15]等为代表的UTXO 模型,这种模型天然契合区块链的链式结构,可以快速追踪和验证交易,但扩展性不强。账户模型侧重于记录账户的状态,即交易的结果,以以太坊、Hyperledger Fabric[16]等为代表,这种模型灵活性更强,能支持更为复杂的业务处理逻辑。
(3)数据存储
区块链的数据存储主要包括区块数据的存储和索引、状态等信息的存储。对于区块数据的存储,部分区块链选择了文本文件存储的方式,如比特币、Hyperledger Fabric,也有以以太坊为代表的一些区块链将区块数据存储在数据库中。索引和状态信息一般都被存储在KV 型数据库中以实现快速检索,典型的KV数据库包括LevelDB等。
区块链中每一个节点都可以作为存储完整的区块链账本、索引、状态等数据的全节点,达不到全节点存储资源要求的节点也可以选择做存储部分数据的轻节点。
2.3 网络层
网络层的职责是组网、数据传播与数据校验。
(1)组网
在组网方面,与传统的C/S、B/S 架构使用的中心化网络不同,区块链中使用点对点网络(P2P Net‐work),这种网络中每一个节点均是对等节点,均可以提供服务和获取服务。该种网络下不会因为中心节点的处理能力不足而形成性能瓶颈,网络中少部分节点的下线或者故障不会导致网络瘫痪或数据遗失。
特别地,在区块链的网络中,每一个节点均可以承担路由、传播、验证及引入新节点的职责。在应用实践中,各项目的组网思路基本一致,以太坊的组网模式是基于P2P 网络的核心协议Kademlia[17]协议做了适应性的改动。
(2)数据传播
由于区块链中每个节点均只与相邻节点建立网络连接,故在数据传播时每个节点均只向相邻节点广播。核心传播步骤是,当某个节点产生了新区块,会将区块数据添加到本地链上并传输给临近节点;临近节点接收数据并校验通过后会存储到本地链并进一步传播,如果未通过校验则中止传播;如此循环直至区块数据同步到全网达成共识,或被废弃。经典的数据传播协议如Gossip[18]等也被应用到一些区块链的实践中。
(3)数据校验
数据校验的主要是为了保证区块数据的合法性。校验内容在不同的区块链中有所不同,主要包含对共识证明、数字签名、数据结构、数据长度等的校验。以比特币为例,其校验中包含工作量证明、Merkle根、区块大小、交易数据结构及合法性等。
2.4 共识层
一致性问题是分布式系统面临的共性问题,共识机制是实现一致性的手段。传统的分布式系统本质上还是利用分布式技术的中心化系统,因此处理核心功能的节点接受统一的决策指令,共识问题也弱化成在节点诚实的基础假设上解决一致性的问题,只需要满足崩溃容错(Crash Fault Tolerance,CFT)共识协议即可,Paxos[19]、Raft等就是这类协议。
但在区块链这种完全分布式的场景中,决策权高度分散在好坏难辨的网络节点上,网络中的节点可能返回任意类型的结果,包括恶意的结果。因此,需要应用支持拜占庭容错(Byzantine Fault Tolerance,BFT)的共识协议,保证在网络内部分节点故障或作恶的情况下,整个网络仍能正常、一致地运行。这种共识协议主要分为两大类,概率性的PoX(Proof of X)类和确定性的BFT类。
主流的共识机制对比如表1 所示,本文将主要讨论PoX和BFT类共识。
表1 主流共识机制比较Table1 Comparison of mainstream consensus protocols
(1)PoX类共识
PoX(Proof of X)类共识需要节点提供某种证明,才能以一定概率获得记账权,常被应用在公链中。最经典的PoW,即工作量证明,与比特币一同诞生,通过暴力求解SHA256 问题提供工作量证明,最先求解的节点获得记账权,多个节点获得记账权的情况下,经过时间的推移,处于最长链上的区块的矿工是最终的记账者。PoW 机制在比特币上运行十多年没有出现过致命的问题足见其健壮性,但过高的资源浪费和过低的效率催生了新的共识机制。
另一类主流的共识机制为PoS,即权益证明,节点通过消耗币龄提供权益证明。PoS 认为在网络中投入通证数量越多持有时间越长的节点越值得信赖,因此有越大的概率成为出块者。在纯粹的PoS中,可以依据Follow‐the‐Satoshi等算法选择出块节点。PoS发展过程中也出现过各种变种,如DPoS、PoSV、Pow+PoS 等。PoS 共识下,出块速度更快,也解决了PoW 资源浪费的问题,但其自身也存在强者恒强及一些安全性问题。
随着区块链技术的发展,除了上述两类主流的共识机制外,还涌现出许多其他PoX 类的共识机制,如PoA、PoB、PoSV、PoC等。
(2)BFT类共识
BFT(Byzantine Fault Tolerance,拜占庭容错)类共识是对拜占庭问题经典解决方案的延续。不同于PoX 类共识,BFT类共识通常是先达成共识,再记账,记账节点的认定也不再是基于概率的。
最早,Lamport 等在1982 年提出拜占庭问题[20],通过虚构描述拜占庭帝国的将军们打仗时如何让忠诚的将军在叛徒将军的扰乱下仍能就作战计划达成一致的问题,来提出如何在网络通信可靠但节点不可靠的情况下达成共识的问题。Lamport 等人提出了两种协议作为解决方案,但都存在时间复杂度过高、扩展性不强的问题。直到1999年,Castro和Liskov提出了实用拜占庭容错PBFT[21]算法,将BFT 的时间复杂度降低至多项式级别才真正能在工业界广泛使用。
自拜占庭问题被提出以来学术界和业界提出了各种解决方案,近年也出现了很多针对区块链的BFT优化算法及BFT 与PoX 类共识的混合算法。如Pass和Shi 提出的PoW+BFT[22]共识、应用在Cosmos[24]的PoS+BFT共识Tendermint[25]等。
2.5 合约层
数据层、网络层与共识层构建了区块链的底层技术,形成了分布式账本。合约层建立在分布式账本之上,该层包含了各类脚本、算法形成智能合约,为区块链提供了高度可编程性和可操作性。
智能合约的思想最早由Nick Szabo[26]于上世纪90 年代提出,是一种执行合约条款的计算机交易协议,但由于没有相契合的运用场景,没有引起广泛的关注。区块链技术的发展推动了完全分布式交易的发展,为智能合约的应用打开了局面。
智能合约本质上就是一段预定义规则的代码,这种代码从技术视角看与传统技术行业的IF‐ELSE 逻辑的代码并没有本质区别,真正带来变化的是它运行在透明、不可篡改、完全分布式的区块链上而产生的“信任”带来了价值。
智能合约与区块链结合的雏形诞生在比特币上。比特币采用基于逆波兰表示法的堆栈执行语言来实现UTXO 的锁定脚本与实现脚本,包括P2PKH(Pay‐to‐Public‐Key‐Hash)、P2PK(Pay‐to‐Public‐Key)、P2SH(Pay‐to‐Script‐Hash)、MS(Multi‐Signature)和OP_Retuen 等脚本分别实现不同的功能。使用该种脚本方式的多为早期使用UTXO 模型的区块链项目及部分基于有向无环图(DAG)的项目。
由于脚本方式的智能合约通常图灵不完备,表达性有限,于是催生了多个方向上的探索。其中最有代表性的是以容器方式实现的Hyperledger Fabric、以虚拟机方式实现的以太坊。
容器方式在实现上比虚拟机方式更轻量级也更加灵活,但是这种轻量级和灵活是以容器中的智能合约和应用的实现更重为代价的。
目前最主流的实现方式还是虚拟机方式。相比较而言,这种方式提供了较为健全的基础设施,封装了底层环境的虚拟机和基于该虚拟机的高级编程语言,为在区块链上进行智能合约的开发提供了很大的便利性。如以太坊实现了一个图灵完备的虚拟机,并提供了用于编写智能合约的高级编程语言Solidity。该语言编写的智能合约编译成字节码之后可以部署在以太坊的区块链网络上,应用可以调用部署好的合约实现各种功能。
2.6 应用层
区块链的应用层与传统技术架构中的应用层类似,主要是封装一系列场景和应用。在以容器方式和虚拟机方式承载的智能合约诞生之前,区块链的应用十分有限,主要集中在数字货币上。智能合约的发展为应用层的丰富带来了福音。现今,区块链技术已经应用到金融、医疗、政务、商务、公益等各个领域,且都已经有了实践的案例,为提升各行业的效率提供了新的手段。
3 扩展技术
数据、网络、共识、合约、应用构建了区块链技术的基础架构。但是随着应用生态的发展,基础的技术架构在效率、扩展性、隐私性等方面都产生了瓶颈。因而催生了各种Layer0、Layer1、Layer2 及其他方面的扩展技术。
3.1 Layer0扩展
区块链的Layer0 层扩展主要集中在数据传输上,通过优化区块链和传统网络结合的问题来实现扩展。相比Layer1 和Layer2 层的扩展,该层的扩展对区块链技术架构的侵入性较小。
目前,Layer0层扩展方案主要集中在构建中继网络,提升数据传输的速度上。其思路类似于传统网络中的CDN(Content Delivery Network)技术,通过构建虚拟网络,部署边缘服务器,优化网络中的负载和内容分发。Layer0 层中的中继网络通过在网络中部署一些中心化的中继节点,在中继节点或者中继节点构建的中继网络上做数据传输的优化,包括路由方式、传播方式、压缩技术等。目前,康奈尔大学和西北大学的研究人员提出的Bloxroute[27]与Marlin Labs 提出的Marlin[28]是该方向上探索最多的项目。
3.2 Layer1扩展
Layer1 层的扩展指对区块链基础架构中分布式账本层,即数据层、网络层、共识层的技术扩展,其核心在于对区块链技术自身的改造与扩展,以提升区块链的性能。
(1)数据层
最直接的扩展方式为扩展区块大小,比特币的区块大小上限为1M,该限制成为制约比特币系统吞吐量的重要因素。扩展区块大小以实现性能提升最典型项目为比特现金(BCH)。但这种扩展方式也会带来对账本存储的挑战。
还有一种通过改变区块结构的变相扩容手段,隔离见证(SegWit,Segregated Witness)。这种方法将脚本签名从区块中拿出,使区块有更多空间用于容纳交易数据。但这种方式对吞吐量的提升很有限。
除了对区块做扩展外,也有技术对区块链经典的链式结构提出了挑战。链式的存储结构导致网络中区块只能串行产生,无法并发处理交易数据。2015年开始,兴起了不同于链式结构的数据组织方式——有向无环图(DAG),舍弃了区块和链式结构的概念,以交易为单位做处理,支持异步并发。典型的基于DAG 数据结构项目包括Byteball[12]、IOTA[13]、Hash‐graph[14]等。
值得注意的是,类似DAG 这种扩展技术往往也伴随着网络层和共识层机制的变化,并不仅限于数据层。
(2)网络层
典型的网络层扩展技术为分片(Sharding)。分片是传统数据库行业中的水平扩容技术,引入到区块链中,通过将一个区块链网络分割成多个较小的片区,每个片区独立处理该片区的交易,以提升整个网络的吞吐量。
分片的内涵包括了网络分片、交易分片、计算分片和状态分片,各种分片都是以网络分片为基础的,并且实现难度逐级递增。在提升性能的同时,分片技术带来的片区之间的通信消耗及单个片区被作恶者控制的隐患等也为该方案的应用带来了挑战。典型的应用了分片技术的项目包括Ziliqa[29]等。
(3)共识层
共识层的扩展主要是通过提出各种新的共识协议提升区块链的运行效率。
3.3 Layer2扩展
Layer2扩展指的是链下扩展方案,其主要的思想是在主链之外进行技术改进,将最终结果同步到主链上。该层的扩展方案目前主要分为状态通道、侧链、跨链等。
(1)状态通道
状态通道是指在链下建立专属通道进行通信或交易,仅将最终的结果同步到主链上。这种方式便于将高频小额类交易移至链下进行,间接地提升了区块链系统的吞吐量,并降低了主链的存储量。
但该种技术目前也还面临着节点中心化、易遭受流动性攻击以及其本身的扩展性等问题。主要的项目包括基于比特币的闪电网络[30]、基于以太坊的雷电网络[31]及Celer Network[32]等。
(2)侧链
与状态通道相比,侧链之于主链的独立性又进了一步,直接建立了新的链。该项技术由比特币的核心贡献者于2014 年提出[33]。通过侧链,使用双向锚定技术,在不影响主链的情况下进行协议升级或引入新型服务。其具体的实现模式可分为单一托管模式、联盟模式、SPV模式、驱动链模式、混合模式等。比较典型的应用项目有Liquid①Liquid:https://blockstream.com/liquid/、Rootstock、BTC Relay、Lisk、Plasma等。
(3)跨链
跨链技术可以使两个独立的账本实现资产、数据等的互操作。其核心要解决的问题是,如何实现互不信任的区块链账本的互通。其主要的实现模式包括公证人模式、侧链/中继、分布式私钥控制、哈希锁定及混合技术等。经典的跨链项目包括Cosmos[24]、Polkadot[34]、Wanchain、Fusion等。
3.4 其他扩展
区块链是一门建立在加密技术之上的技术,其基础架构中的各层都有加密技术的应用。因此,除了围绕数据传输、链上、链下的各种扩展方案外,围绕加密及隐私计算相关的问题也有不少扩展技术,如同态加密、安全多方计算、零知识证明、环签名、群签名、混币等技术,这些技术均期望达到在不泄露参与各方隐私、不依赖可信第三方的前提下,安全地完成计算或交易等。
4 挑战与趋势
4.1 挑战
区块链技术未来发展的关键挑战主要来源于以下几个维度:系统安全、数据隐私、监管、扩展性、跨链协议、链下信息及存储。
系统安全:从软件系统角度来看,区块链技术包含了不同层次上的软件载体,如:客户端软件、智能合约、分布式应用、共识算法、虚拟机、网络通信模块等等。由于程序代码缺陷的不可避免性,区块链软件也同样面临着巨大的系统安全风险。例如,2016 年以太坊智能合发生的The DAO 攻击,来源于相关合约代码中的“重入漏洞”,而这一攻击也造成了超过5000 万美元的财产损失。宏观上来说,因为区块链技术的应用场景往往直接与各类数字资产关联,任何系统漏洞被利用攻击都有可能造成无法挽回的财产损失和市场秩序混乱。
数据隐私:大量区块链的应用场景都有重要的数据隐私保护需求。例如,区块链供应链金融应用中,交易订单信息只能在与交易相关的有限企业内共享,否则会引发商业机密的泄露以及不公平交易的现象。然而,当前主流区块链技术为了保证数据、交易的可信,利用分布式账本技术在网络内进行了数据、计算的重复验证,因而提高了保护数据隐私的难度。
监管:区块链技术的现有架构,有限程度上保证了部分监管合规性,如利用智能合约实现检测异常交易等监管逻辑。然而,在更广义的现实场景下的监管需求,目前难以得到有效支撑。如何高效的保证区块链交易、数据符合法律法规、行业规范、风控模型等特定监管规则,是区块链实现大规模落地应用的另一大挑战。
扩展性:随着区块链逐渐走向主流应用场景,大规模计算需求所带来的扩展性瓶颈将越来越显著。大量网络节点同步、海量交易都将成为区块链提高扩展性并成为新一代信息基础设施的关键障碍。
跨链协议:区块链技术的发展很有可能在应用生态上衍生出“一个行业一条链,多链共存”的情形。如何保证不同链之间的信息高效、可信流转和互通,是打通多个区块链及上层应用的关键问题。
链下信息:数据在链上、链下分治的情形在区块链应用中很普遍。然而,很多应用场景需要获取相应的链下信息并完成计算任务。这种情况下,区块链技术对链下信息的可信、一致性提出了较大挑战。
存储:由于区块链技术的基本设计原则是账本数据无法删除,使得账本数据不断膨胀。同时,由于区块链的安全可信相当程度上是建立在众多网络节点对账本的冗余备份之上,这愈发加重了数据存储上的挑战,让如何有效进行区块链数据分布式的存储和管理成为了重要的技术问题。
4.2 发展趋势
区块链技术的发展趋势主要有如下几个方面。
在区块链编程语言设计方面,一个技术研究趋势是,如何进一步强化区块链技术的开发支持,包括设计新的编程语言、开发已有语言的区块链SDK 等,从而在软件开发的生命周期中降低区块链开发的复杂度、提高开发效率。在智能合约方面,当前主流开发语言包括Solidity、C++、JavaScript 等,这些语言在安全性、隐私性角度的支撑都相对较弱。因此,正如Facebook在Libra项目中提出的Move语言一样,未来新的安全智能合约语言将会是新的研究重点。此外,智能合约语言是否需要做到图灵完备也会成为重要的讨论点。领域性强的非图灵完备语言同样是可能的研究趋势之一。
在密码学实用化方案方面,当前大量的密码学技术被应用在区块链技术架构的实践探索中,用以增强区块链的隐私保护能力,如同态加密、混淆电路、门限签名、零知识证明、安全多方计算等。这些技术在算法层次提供了强大的机密性以及平台通用性,然而在实践中,通常会引入很大的开销。因此,这一问题上的未来技术研究热点可能是如何基于密码学技术,提出实用化的实践方案。
在区块链性能优化方面,作为当前区块链大规模应用的主要瓶颈之一,性能优化在下一阶段仍将成为关键的技术研究点。具体而言,区块链未来可能的性能提升点包括:高性能区块链架构设计、应用导向的高效共识协议及优化、可并行的交易处理引擎、网络通信加速技术等。
在分布式存储方面,针对当前区块链数据膨胀难以管理、查询能力较弱的问题,未来的相关研究方向将重点面向分布式存储技术展开。FISCO‐BCOS[36]区块链提出的AMDB 可以认为是这一方向上的初步尝试。如何保证分布式存储数据的一致、完整、可信,并且与现有区块链架构有机结合都是重要的技术研究点。
在监管科技和合规协议方面,区块链应用与数字资产的强相关性,意味着监管、合规必将成为区块链技术的核心要点。如何在区块链中内嵌对于反洗钱、反恐怖主义融资等通用监管需求,如何构建标准化的数据合规协议,保障区块链技术在主流场景中得以应用,将成为重中之重。