区块链扩展技术现状与展望
区块链技术起源于2008年中本聪提出的比特币[1], 是一种不需要依赖任何可信第三方的分布式账本. 区块链技术自诞生以来发展十分迅速, 由于具有公开透明、非中心化、不可篡改等特性, 区块链已经被广泛应用到各行各业, 包括医疗健康[2]、金融行业[1,3]、政府部门[4]、人工智能[5]以及物联网[6,7]等. 即使区块链拥有很多优秀的特性, 但是当用户数量和访问需求大幅增加时, 当前的区块链系统难以达到和传统中心化系统一样的效率. 目前主流的公有链如比特币[1]产生一个区块的平均间隔为10 min, 理论上每秒最多只能处理7笔交易, 以太坊支持大约每秒25笔交易[8]. 主流的联盟链HyperLedger Fabric[9]每秒最多可处理约1500笔交易. 已有区块链系统的性能和Visa卡几万的吞吐量以及支付宝几十万的吞吐量相差甚远. 区块链系统的性能难以满足许多业务场景的实际应用需求, 尤其是需要高频交易的场景. 例如现实生活中双十一网络购物这种高频交易场景, 大型云服务器数据在区块链上安全存储, 区块链需要有能力存储庞大数据流等场景都要求对区块链进行扩展. 其本质上是区块链可扩展性不足而导致的性能瓶颈问题. 如何增强区块链的可扩展性是提高区块链性能的关键, 也是当前区块链领域最为重要的研究方向之一.
虽然, 当前部分文献对区块链的性能提升方案进行了综述, 但是按照区块链的6层结构来看, 已有工作对可扩展性的分析都不够全面. 文献[10]进行了大量的调研, 但多集中于合约层和应用层, 主要关注侧链技术. 文献[11]比较了大量链上和链下扩容方案, 文献[12]则关注共识层的相关协议的比较以及网络传输效率相关的方案. 文献[13]的分析涉及数据层和共识层等, 对比特币、以太坊和有向无环图结构的方案进行性能比较, 但是其调研的文献数量较少, 文献[14]梳理当下主流区块链扩容技术, 对扩容技术方案进行了详细清晰的分类, 该工作侧重于整体层面研究, 对每一类共识机制的介绍过于简单. 区块链可扩展性涉及体系结构设计, 仅对部分层的分析显然是不够的. 由于仅关注于某一类问题, 已有的综述对可扩展性的定义不完备, 无法给出通用的分类方法. 并且, 已有工作没有统一的衡量标准来对多个层次的可扩展性方案进行比较.
本文从区块链的体系结构出发, 全面调研了可以提升区块链可扩展性的多种方案, 旨在通过分析各种技术方向的优缺点以进一步剖析区块链的可扩展性问题. 本文基于体系结构, 从网络层、链上层、链下层这3个层面更广泛地定义区块链可扩展性问题, 并将已有方案分为网络层方案、链上层方案、链下层方案这3种类型. 在这3种类型内又进一步细化归纳, 分析比较各个方案的特点. 此外, 本文展开了开放性问题, 宏观讨论现有工作的不足以及未来的研究方向. 本文的主要贡献如下.
● 从网络层、链上层、链下层这3个方面更充分地定义可扩展性, 提出可以衡量可扩展性的通用指标.
● 提出对可扩展性方案通用的分类框架, 将现有方案分为提升底层区块链网络性能网络扩展, 优化区块链自身属性的链上扩展, 扩充区块链功能的链下扩展这3大类型.
● 总结各类可扩展性解决方案的特点, 并进行分析对比. 并对区块链可扩展性的未来研究方向进行开放性讨论.
本文第1节解释区块链的一些基本概念和术语. 第2节定义可扩展性问题并提取通用的衡量指标. 第3节给出可扩展性通用分类框架, 并对每一类技术方案进行分析对比. 第4节汇总比较可扩展性技术, 并进行更宏观的开放性问题讨论.1 区块链基本概念
本节介绍一些区块链基本的术语和概念.
区块链(
$ C $
): 一种公共账本, 是一个不断增长的数据集合, 其中包含所有已经完成的区块. 由于不断地有区块产生, 并且按照时间顺序线性地添加到这个公共账本中, 所以其数据量在不断增加.
交易(
${\mathit{Tx}}$
): 一个数据结构, 指的是在没有第三方干预的情况下, 参与区块链系统的两个或者多个用户之间的数据交换. 每笔交易都记录在区块链中, 换句话说, 一笔交易可以被看作是称作区块链的全局账本中的一个条目.
区块(
$ B $
): 一个数据结构, 包含区块头和区块体. 区块头记录区块链的状态信息, 链接上一个区块, 提供完整性校验, 区块体主要包含交易数据.
区块链成员(
$ P $
): 区块链成员可以分为用户和矿工, 用户负责产生交易, 矿工负责区块链的创建与维护, 并且通过共同协商创建区块, 并将其添加到区块链中.
交易池(
${\mathit{TxPool}}$
): 交易池是包含所有交易的缓存池, 区块链成员用这些交易进行区块的生成.
共识机制(
$ Fcons $
): 区块链系统由于不存在中心化机制, 进行状态更新时需要一种区块链成员之间的协商与认可机制, 如工作量证明(poof of work, PoW)通过证明完成计算来竞争区块链的更新权力, 即记录交易的权力.
基础的区块链架构至少需要包含存放区块链各种信息的数据层、完成区块链系统数据交换的网络层、保证区块链系统信息交互一致共识层. 数据层主要包含区块
$ B $
和交易
$ Tx $
两种数据结构.
$C = \{ {B_0}, {B_1}, {B_2}, {B_3}, {B_4}, \ldots, {B_n}\}$
表示一条区块链, 区块
$B$
是区块链的基本组成单位, 多个区块进行有序组织构成区块链. 区块
$B$
包含验证信息
${\mathit{VefMsg}}$
和数据信息
${\mathit{Set}} < {\mathit{Tx}_0}, {{\mathit Tx}_1}, \ldots, {{\mathit Tx}_k} >$
, 验证信息用于更新区块链状态和维持完整性, 数据信息主要指交易构成的集合, 所以
$B = \{ {\mathit{VefMsg}}, {\mathit{Set}} < {{\mathit Tx}_0}, {{\mathit Tx}_1}, \ldots, {{\mathit Tx}_k} > \}$
, 其中
$k$
为区块能包含的最大交易数. 在网络层, 区块链需要建立分布式的对等网络, 采用无许可的网络环境时, 任何分布式网络节点都可以充当区块链成员
$P$
中的矿工. 矿工从交易池收集交易打包产生区块, 交易池指的是未被打包的交易构成的集合,
${\mathit{TxPool}} = {\mathit{Set}} < {{\mathit{preTx}}_0}, {{\mathit{preTx}}_1}, \ldots, {{\mathit{preTx}}_m} >$
, 其中
$m$
为交易池中交易的最大数目,
${\mathit{preTx}}$
表示未被打包的交易, 当矿工收集交易并确认上链后, 会从交易池移除该交易. 在共识层, 对于新产生的区块, 其是否能够加入系统需要区块链成员之间达成一致, 在分布式环境下需要一个共识机制
$Fcons$
来保证决策的可靠性, 这个机制可以抽象为一个实现分布式成员之间信息交互一致性的方法. 在基础的区块链架构之上, 还需要维持参与者稳定工作的激励层, 积极有效的激励机制往往有助于保证区块链系统平稳运行和抵抗恶意行为. 并且, 在基础的区块链之上建立智能合约使得交易账本可实现更复杂的交互行为. 由此, 区块链系统可以从单纯的交易账本变为运行程序代码的合约平台, 可以进一步地实现链上链下融合和多链交互, 提升区块链的应用性.2 可扩展性定义和衡量指标
分布式系统的可扩展性指的是系统为了满足新增的需求时对系统本身的改动程度. 区块链的可扩展性指的无论交易量和成员数量, 区块链系统对于交易的处理能力. 如果一个区块链的性能能够随着用户需求而增长, 认为其是可扩展的. 为了进一步理解可扩展性问题, 本文从以下3个方面更具体地定义区块链可扩展性.
(1)网络层: 区块链建立在通信网络之上, 优化区块链的底层信息传递网络可以提升区块链信息的传输效率, 改善区块链的可扩展性, 所以对区块链底层网络协议的优化可以提高区块链可扩展性.
(2)链上层: 区块链自身的设计属性很大程度决定其性能, 主要体现在区块大小、节点组织、共识机制及区块链结构等方面, 所以对区块链自身设计属性的扩展可以提高区块链可扩展性.
(3)链下层: 不同的场景有不同的用户数量和访问需求, 除了效率之外, 为了更广泛地应用于多个场景, 区块链系统需要在频繁交易、复杂计算和多链联合等方面进行功能性扩展, 所以对区块链功能的拓展可以提高区块链可扩展性.
区块链应该具备处理网络中大量的用户需求和交易的能力, 但这无法由系统的单个性质决定, 由多个指标共同体现. 本文基于上述可扩展性定义提出用于衡量区块链系统的可扩展性的指标.
吞吐量: 单位时间内区块链系统可以处理(在全网达成共识)的事务数量(transactions per second, TPS).
延迟: 区块链系统内一个事务从被用户提出, 到最终在全网达成共识所花费的时间.
成本: 整个区块链系统为了达成共识, 所有节点耗费的通信资源(通信复杂度), 计算资源(计算时间), 存储资源(存储空间).
安全性: 包括整个区块链系统能够容忍恶意节点占总节点数量的比例, 区块链系统能够容忍敌手的控制节点的能力(静态敌手一旦协议开始后选定哪些节点为恶意节点, 之后就无法随意控制其他节点变为恶意节点, 自适应敌手在协议运行过程中可以随意控制哪些节点变为恶意节点), 对一些攻击的防御(例如双花攻击和审查攻击).
非中心化: 指区块链的设计结构上对中心化节点或者中心化机构的依赖程度, 例如比特币没有中心化节点, 所以去中心化程度很高. 分片结构的区块链片之间通讯需要依赖跨片节点, 所以依赖中心化节点, 去中心化程度一般. 而联盟链很大程度依赖中心化节点群或者中心化机构, 去中心化程度很低.3 分类框架及已有方案分析
区块链是基于网络搭建的, 根据开放式系统互联模型(open system interconnection reference model, OSI)将网络划分为7层结构, 分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层. 在此基础上区块链模型是一个6层结构, 自底向上依次是数据层、网络层、共识层、激励层、合约层和应用层. 依据第3节的可扩展性这3个方面将现有的可扩展性解决方案归类为优化底层网络传输的网络扩展、针对区块链内部属性的链上扩展、针对区块链外部功能的链下扩展这3类, 实际上它们对应区块链层级也是自底向上的. 可扩展性方案分类和网络分层及区块链分层架构的对应关系如图1所示. 对于区块链面临的存储可扩展问题和模型归纳如表1所示.
图 1 体系架构与可扩展性技术分类
表 1 区块链可扩展性问题模型归纳
网络扩展不改变区块链的架构, 保留区块链的原有运行规则, 利用底层中继网络或对OSI模型底层进行优化, 进而提升区块链性能.
链上扩展主要改进区块链的数据层、网络层、共识层以及激励层, 对区块链区块结构、链结构、共识算法和网络模型进行优化, 通过优化完善区块链自身体系结构来提升其性能.
链下扩展针对区块链的合约层和应用层, 为了减少区块链的负担将复杂的计算或交易放到链外进行, 通过优化区块链外联能力来解决可扩展性.3.1 网络拓展
区块链网络扩展是对OSI模型中的物理层、数据链路层、网络层、传输层进行优化. 包括对中继网络和分发网络的优化、对OSI模型的优化、对信息传播协议的优化.3.1.1 中继网络和分发网络
2016年, 基于传统中继网络思想, 比特币核心开发者Matt提出比特币中继网络(bitcoin relay network, BRN)[15]. 该网络在全球范围内利用亚马逊服务器搭建中继网络节点, 与大多数矿工和矿池相连, 可以减少区块链共识和传播的延迟, 将区块数据快速的分发给网络中的其他节点. 2019年Matt提出了一种基于用户数据报协议(user datagram protocol, UDP)的中继网络, 称为高速互联网比特币中继引擎(fast internet bitcoin relay engine, FIBRE)[16], 可以在网络节点间中继传输区块, 还利用区块压缩策略减少数据传输, 进一步优化区块传输的网络延迟. 康奈尔大学的Soumya提出另一个中继网络 Falcon[17], 其主要特点是用直通路由代替存储转发, 接收到区块的部分时就进行传播而无需等待接收到一个完整的区块, 可以减少网络传输延迟.
内容分发网络(content delivery network, CDN)的主要思想是借助距离用户最近的服务器将网络内容更快、更可靠地进行发送. bloXroute[18]将CDN的思想应用于区块链, 实现区块链分发网络(blockchain distribute network, BDN), 从优化网络传输方面提高区块链可扩展性.
bloXroute主要包含4个组成部分: 中继、网关、控制平面和区块链节点, 如图2. 构成BDN的服务器称为中继, 包括交易中继和区块中继. 为区块链节点和BDN提供通信的软件称为网关, 可以比点对点网络(peer to peer, P2P)更快地向全节点传输区块和交易, 与网关相连的区块链全节点(全节点指包含整个区块链完整历史事务信息的区块链节点)认为网关是另外一个节点. 控制平面根据地理位置信息给连接BDN的网关提供最低延迟的中继服务列表. 网关本身不是全节点, 与全节点通信时无法验证区块, 因此需要部署一些区块链节点协助网关响应正常的区块链请求. 此外, bloXroute使用直通路由技术以及区块压缩策略进一步提升性能.
图 2 bloXroute结构
3.1.2 优化OSI模型
单播通信和广播通信存在信息传播效率低的问题, 主要是因为它们采取的单方发送多方接收的传输方式, 组播通信允许一个或多个信息源同时对不同用户发送单一数据包, 有效地解决上述问题, 提高网络传播效率. 区块链项目Nexus[19]应用组播通信技术, 关键思想是在网络层通过自设寻址协议连通局域网内外节点, 并利用IP组播技术实现底层数据包广播, 处理网络层而不是应用层上的包复制, 极大地加快传播速度.
2013年, Google基于UDP协议提出新一代多路并发网络传输协议, 即快速UDP互联网连接协议(quick UDP Internet connection, QUIC)[20], 区块链项目Harmony[21]中采用了该协议. Harmony进行多方面的优化提高区块链的可扩展性. 在上层设计中, Harmony采用分片技术, 分片内通过实用拜占庭容错算法(practical Byzantine fault tolerance, PBFT)快速达成共识. 在OSI的网络层, Harmony使用QUIC减少底层数据包交换次数, 更快速且安全地传输消息. 除此之外, Harmony利用专门的库操作系统构建的单地址空间机器镜像, 进一步扩展单个节点的性能.3.1.3 改进信息传播
还有一些方案针对区块链网络中信息传播设计协议, 优化交易和区块的传播, 也属于底层扩展方案. Erlay[22]是一个优化交易传播协议, 可以将节点所消耗的带宽节省40%. 允许以较小的成本建立更多的连接来提高网络的安全性, 并通过加强网络的抗攻击性来提高隐私性. 它以非常少的带宽和延迟成本有效地增加了网络连接. Velocity[23]利用一种叫无码率抹除码(Fountain)的技术来减少数据的传播量, 相同时间可以传输更多的信息, 改进区块传播, 提高交易吞吐量. Kadcast[24]是一种快速、安全、高效的区块传播协议, 其采取的P2P重叠网络传输协议(Kademlia)是一种著名的结构化覆盖拓扑结构, 用于高效的广播操作, 具有可调节的冗余和开销. CompactBlocks[25]和Xtreme Thinblocks[26]等区块压缩方案也关注区块传播的优化.3.1.4 网络扩展技术总结
表2对底层扩展技术进行比较, 底层扩展技术不改变区块链自身的属性, 也不影响区块链的运行规则, 主要优化物理网络中对于区块链数据的传播速度, 因此理论上这类方案对区块链的可扩展性的提升是最直接的. 但是, 这类解决方案的实际使用场景有限, 主要体现在以下几点.
表 2 网络扩展方案对比
(1)中继网络和分发网络并不是P2P网络的代替, 而是为特殊需求提供节点间连接的覆盖网络.
(2)中继网络和分发网络的方案都需要搭建高性能的底层通信网络, 成本很高.
(3)限制区块链可扩展性的主要因素是区块链本身的属性, 因此这类方案提升效果有限.
底层扩展技术关注度较低, 但要做到对区块链可扩展性的大幅突破必须全面考量, 针对区块链信息传播协议的改进更是不可或缺的. 更快的区块传播可以实现更短的区块间隔或在相同区块间隔时传输更大的区块, 从而提高交易吞吐量. 因此, 优化区块链中数据传播的协议是未来区块链系统增强可扩展性的途径之一. 目前区块链系统的传播协议仍有很大的优化空间, 比如更好的路由机制将有助于提高区块链的可扩展性.3.2 链上扩展
区块链系统包含很多方面的设计工作, 如区块的数据结构、链结构和密码协议的设计、P2P网络的构建、区块的传播和验证以及共识机制和激励机制等. 这些设计对应着区块链模型的1–4层, 代表着区块链的基本属性. 对这些设计的优化和改进是提高区块链可扩展性的重要途径.
不同的解决方案关注点不一样, 对于区块链模型不同层级的优化也各有偏向, 将这些方案最具特色的点作为分类的依据, 链上扩展技术方案可细分为优化区块数据、分片、共识协议改进和新型链结构4个子类. 优化区块数据主要涉及数据层优化, 共识协议改进主要对区块链共识层进行改进, 分片主要针对区块链网络层, 新型链结构涉及数据层和共识层等. 激励层主要作用是鼓励矿工产生区块和交易, 有助于区块链平稳向前推进, 其并不直接影响可扩展性.3.2.1 优化区块数据
区块是区块链的基本组成单位, 区块的主要数据内容是交易. TPS是衡量区块链可扩展性的重要指标, 所以区块的数据的优化和区块链可扩展性提升有着直接的关联. 显然, 增加区块的大小可以包含更多的交易, 进而提高交易吞吐量, 区块压缩也可以起到相同的作用. 几种主要的区块数据优化技术如下.
(1)扩块
在区块链系统中, 区块的大小是有限制的, 最初中本聪规定的比特币区块大小不超过1 MB. 扩块的基本思想是不改变区块的生成间隔, 增加区块的大小, 进而提高区块链的交易吞吐量. 2016年, Croman等人[27]报告称, 比特币在区块间隔平均为10 min的前提下, 区块最大不应该超过4 MB, 相应的最大吞吐量为27 TPS. 比特币现金(bitcoin cash)[28]将区块扩大到8 MB, 之后扩展到32 MB, 可以直观地提高交易吞吐量. 但是直接扩大区块会增大传播延迟引发安全威胁, 比如导致分叉可能性增大和DoS攻击.
在区块链中, 为了保证交易的可验证并防止被篡改, 交易内容中包含用来验证该交易有效性的信息. 主要是由交易发起者提供的用来验证数字资产所有权以及可用性的数字签名, 这些数据占用整个交易存储空间近65%的容量. 因此通过缩减验证信息占用的空间来存储更多的交易, 可以获得更好的吞吐量, 这就是隔离见证(segregated witness)[29]的出发点. 如图3所示, 隔离见证将见证信息(签名数据)从交易内容中解耦, 释放空间用以存储更多交易数据. 交易数据仅包含交易发送者和接收者(输入和输出), 1 MB的空间可以存储更多的交易(基础交易区块), 分离出来的见证数据放到区块的末尾(扩充区块). 隔离见证可以有效提高区块的容量, 修复交易延展性, 但是会导致硬分叉问题, 而且对于可扩展性的提升效果有限, 大约是17–23 TPS.
图 3 隔离见证
(2)区块压缩
区块压缩的核心思想是尽可能地减少区块中的冗余数据, 如已经存储在验证节点交易池中的数据, 具有代表性的方案有致密区块中继(compact block relay)[30]. 不同于比特币, compact block relay只广播压缩区块, 压缩区块不需要存储完整的交易数据. 压缩区块主要由区块头和交易ID的短哈希值组成, 交易ID的短哈希值将用于匹配已经存在于验证节点交易池中的交易. 收到压缩区块的节点验证交易缓存池是否包含压缩区块中的每笔交易. 如果交易都在缓存池中, 则可以重新构造出完整的区块; 如果有不存在的交易, 向发送区块的节点请求发送缺少的交易. 加盐短哈希有损区块压缩算法(Txilm)在compact block relay基础上进行了改进, 将compact block relay区块中每个TX表示的大小减小到约40比特, 提高了区块被压缩的程度, 利用交易规范排序(canonical transaction ordering rule, CTOR)的规则计算哈希值以降低压缩后TXID冲突的概率, 并利用循环冗余算法 CRC32-merkle根作为盐, 对TXID进行哈希加盐来防止遭受碰撞攻击.3.2.2 分 片
分片最初是数据库领域的一种分区技术, 如图4所示, 主要思想是分而治之, 将一个大型数据库分割成较小的片区, 并存储在不同的服务器上, 使其能够更快、更高效地管理数据. 2016年, Luu等人第1次在区块链领域提出了分片的概念, 即Elastico协议[31]. 核心思想是将一个区块链网络划分为若干个较小的网络, 每个小的网络称为一个分片, 每个分片包含一部分区块链节点. 采用分片技术来提高可扩展性的方案还有OmniLedger[32]、RapidChain[33]、Monoxide[34]、ByShard[35]、AHL[36]、SharPer[37]、Meepo[38]等, 表3对这些方案进行了比较. 其中同步网络中所有信息都可以在已知的时间间隔内到达, 部分同步网络中所有信息可以在未知的时间间隔内到达, 异步网络不保证所有的信息可以到达.
图 4 分片
Elastico 按照轮次执行, 每轮通过 PoW 将全网节点划分为1个目录分片和 16 个普通分片(上限为 100 个). 目录分片为后续节点提供分片分配和分片成员身份列表服务. 每个普通分片不超过 100 个节点, 普通分片内部通过 PBFT 产生区块. 不同的普通分片并行处理交易, 提高交易提交和验证的效率, 从而提高整个网络的吞吐量. Elastico通过将每个普通分片产生的区块合并为一个区块加入区块链, 可将吞吐量提高到 40 TPS. 然而节点的加入和退出导致频繁的节点分片分配和分片成员更新, 严重限制了区块链性能. Elastico 每个节点都需要存储区块链数据限制了其可扩展性. 由于采用 PBFT 协议以及分配到每个片区成员很少, Elastico 只能容忍 25% 的恶意节点. 并且, 由于跨片交易需要通过目录分片查询对应用户所在的分片, 产生了额外的确认延迟. Elastico 没有跨片交易原子性, 可能发生跨片交易错误.
表 3 分片方案比较
OmniLedger 协议提出一种实时的分片间交易方案, 在片区划分时采取无偏差随机函数, 使得OmniLedger抗偏置性强于Elastico. 由于采用了公开可验证秘密分享, 使得验证者能够安全且有效地验证节点随机数的正确性. 虽然 OmniLedger 也需要少量的主要成员, 但是其 ByzcoinX 共识机制可以通过一个固定高度的树结构结合 PBFT 和 PoW. 得益于此, OmniLedger 有 3 个分片(上限为 64), 每个分片有 600 个节点(上限为 1024), 可以达到 3500 TPS 的吞吐量, 延迟在 800 s 左右. OmniLedger 具备不低于 Elastico 的安全性并且延迟更小. OmniLedger 介绍了一种双阶段保证跨分片交易原子性的方法, 在跨分片交易处理过程中, 第1阶段先在本分片锁定该交易, 然后在目标分片中启动第2阶段解锁该交易, 使得两阶段要么都成功, 要么都失败, 保证了一致性. 但是OmniLedger在跨片交易处理时轻量级节点受到限制. 而且初始的随机性依赖于第三方, 这使得 OmniLedger 在网络同步时受限.
RapidChain实现了不需要经过可信的初始化设置就能进行分片, 可以在全网实现33%的容忍能力, 片内可以做到50%的容忍度. RapidChain使用一个快速的跨片交互协议, 不需要将交易传播到全网. 利用可视秘密共享(visual secret sharing, VSS)实现无偏差随机性, 基于此实现片内快速出块, 提高了吞吐量和可扩展性. RapidChain在4000个节点的网络可以实现7300 TPS的吞吐量和8.7 s的延迟. 然而, Rappid使用的BFT共识只适用于小规模的分片, 增大分片规模会导致交互开销过大.
Monixide 使用 PoW 的变体作为其出块共识, 通过异步的方式做到对区块链的线性扩展. 分片之间平行地处理内部交易, 而不需要和其余分片交互, 并且其跨分片交易具备最终原子性. Monixide 基于合并挖矿提出诸葛连弩挖矿机制, 实现矿工可以在多个分片同时挖矿, 所以分片内的算力接近于全网算力, 因此片内的安全性和全网安全性一致. 在 48000 个节点设定下, Monixide 的吞吐量可达到 11694 TPS, 延迟在 13–21 s. 然而, Monixide 对于节点的性能要求很高, 并且较高的复杂度可能会引入中心节点导致中心化问题.
在联盟链中, 也有一些优秀的分片方案. ByShard为联盟链分片协议制定了框架. AHL该方案将节点随机分配到每个分片, 为了在保证安全性的前提下减少每个分片的节点, 可信的硬件Intel SGX来限制节点的恶意行为, 从而可以在每个分片节点数量较少的情况下保证分片的安全. 对于跨分片事务, AHL通过一组额外的节点来进行处理. SharPer是另一个联盟链的分片方案, 该系统由一组容错集群组成, 每个集群维护区块链账本的一个分片. 这些集群分别处理内部事务, 并且这些集群互相有重叠部分, 当遇到跨分片共识后, 就在重叠部分进行共识.
Meepo也是一个基于联盟区块链系统的分片方案. 它使用每个区块共识结束后进行跨分片通信的协议实现高效有序的跨分片通信. 此外, 它设计了一种部分交叉调用合并策略, 这种策略支持将不同分片智能合约调用整合到每一个分片内. 它还设置了重放时间, 一旦发生事务异常, 在重放时间内重新执行正确的事务, 恢复错误的事务, 保证跨分片交易的原子性. 最后Meepo添加影子碎片作为碎片的备份, 一旦任何碎片关闭, 联盟成员可以切换到相应的备份, 以继续执行区块链交易, 显著降低了单点故障对系统可用性的影响.3.2.3 共识协议
区块链的共识协议促使区块链成员对于区块链状态更新形成共识, 保持一致性. 已经用于区块链的共识机制有PoW、权益证明共识机制(PoS)、PBFT等, 然而早期的共识协议无法满足可扩展性需求, 本节介绍基于这些经典共识机制的改进方案, 它们对于提高区块链可扩展性有重要意义. 利用选取出块节点的确定性将共识协议分为概率性共识和非概率性共识两类, 概率性共识是在出块前全网没有达成一致, 后期根据最长链原则等对块达成高概率的共识, 主要包含基于 PoW 和 PoS 机制的协议; 非概率性共识是在出块前全网对该块达成一致, 主要包含 PBFT 和混合共识协议.
(1)概率性共识
PoW能够保证较强的安全性, 许多研究优化最初的中本聪协议的以提高可扩展性, 优化主要包含分离设计、更换主链选取原则、降低挖矿难度几个方面.
首先, 中本聪协议吞吐量低的一个原因是区块提交和交易打包不能并行, 例如在比特币中矿工需要先打包交易, 然后所有矿工一起通过PoW竞争区块提交权, 在选出区块提交者之前无法继续打包交易. 因此, 有研究者提出将PoW计算和交易打包分离的思想, 如Bitcoin-NG[39].
Bitcoin-NG将交易打包和领导选举的PoW计算分离. 原理如图5所示, Bitcoin-NG包含主区块和微区块两种类型的区块. 主区块通过PoW计算竞争记账权力, 即参与领导选举, 主区块包含用于验证微区块所属权的公钥, 不涉及交易相关数据. 微区块不需要进行PoW计算, 只需按照设定好的速率产生并连接到前一个主区块或微区块. 区块链成员在生成微区块时需要包含与主区块包含的公钥相匹配的私钥签名, 其他的区块链成员收到主区块后进行PoW验证, 收到微区块后验证其签名是否匹配最新主区块公钥. Bitcoin-NG将PoW证明和交易打包分离, 区块链成员可以通过生成微区块的方式扩大吞吐量. 但是, 这类设计会存在局部中心化威胁, 当攻击者产生主区块时, 他在一定时间段内对区块链的状态更新具有控制权.
图 5 Bitcoin-NG结构
此外, 严格的最长链原则是限制中本聪协议可扩展性的另一个原因. 每次挖矿竞争中会有很多区块链成员进行大量的计算但未能产生满足难度值要求的区块或者产生有分歧的区块, 最终只会保留一条主链, 不在主链上的区块都会作废. 因此, 有研究提出改变主链选取原则和降低挖矿难度值的方案.
为了优化主链选取规则, 有研究提出新的主链选择方法贪婪最重可观测子树算法(greedy heaviest-observed sub-tree, GHOST)[40]. 该协议选择包含子树最多的链作为主链而不是选择最长的链. 在一定程度上缓解攻击者针对最长链进行分叉的风险, 提高区块链吞吐量.
为了使更多的区块可以包含到区块链系统, 有研究者提出降低出块难度阈值来减小出块间隔的想法, 也被称为弱解方案. Subchains[41]给出理论上的弱解设计: 当区块链成员在进行PoW计算时如果满足弱解难度值, 则生成弱区块; 当区块链成员PoW计算满足强解难度值时, 生成强区块. 由于相邻两个强区块之间的弱区块是顺序生成的, 并且生成的难度值低, 所以恶意敌手可以通过隐藏若区块形成非法弱解链, 所以 Subchains 存在着针对弱解链的自私挖矿问题. 自私挖矿是恶意区块链成员产生区块却不发布, 进而对系统造成威胁的一种攻击. FruitChains[42]划分两个挖矿难度值分别用于产生两种存储交易的数据结构如图6所示, 高难度值用于产生区块, 低难度值用于产生弱解区块, 称为水果. 区块可以包含与其高度值相近的水果, 区块链成员产生水果或区块都可以获得奖励, 区块包含水果也可以获得收益. 最终的交易账本是由区块构成的链决定. FruitChains不直接将弱解区块作为最终账本, 可以缓解自私挖矿问题, 但是会有不同的区块重复引用相同水果的问题, 占用大量存储资源. FruitChains使得更多的交易通过水果加入到区块链系统, 提高了交易吞吐量.
图 6 FruitChains的弱解方案
PoS 中的区块链成员不需要消耗计算资源生成区块, 而是通过用户在区块链系统中的资产作为投票权重, 对每个节点来投票选举领本次共识的导者, 从而节约计算资源并减少交易的确认时间. PoS的理念是系统中拥有更多权益货币的区块链成员不太可能对系统造成威胁. 改进的PoS算法有Ouroboros[43], 在PoS中一个节点被选中出块的概率和其拥有的权益占比相关. Ouroboros强调选择过程的随机性, 采用简单随机数算法(coin-tossing)选举当前时段的领导者和下一个时段的随机种子, 并利用可验证秘密共享[44]将生成的随机数分发给参与者. PoS主要通过利用权益证明代替计算证明的方式加快出块间隔, 提高共识速度, 进而提高区块链的吞吐量.
雪崩链协议采用了全新的共识机制Avalanche, 该共识机制的做法是在既有的数百个以至更多节点当中, 以快速而多次的抽样方式获得多次验证结果, 只要某一结果多次在验证节点中得到超过半数节点的认同, 则该结果达成共识. Avalanche中存在3条区块链, 交易链负责资产的建立与交易, 平台链负责存储和验证链上的数据, 合约链负责智能合约相关功能.
(2)非概率性共识
PoW和PoS都属于间接形成共识的机制, 通过竞争记账权来保证共识验证, 出块节点具有概率性. 分布式系统很早就提出了PBFT. 由于具备较好的可扩展性和拜占庭容错, PBFT被广泛地应用于私有链和联盟链. 然而, 因为其节点数量众多, 通信开销很大, 为O(n2), 实际上PBFT更适用于较少节点的情况. 当节点数
$ n = 3 \times f + 1 $
时, PBFT可以容忍
$ 1/3 $
的恶意节点
$ f = (n - 1)/3 $
. PBFT按照轮次执行, 每一轮参与节点包含主节点和备份节点, 当每一轮共识开始时, 随机选取备份节点作为主节点. 主节点可以决定3阶段(预备、准备、确认)交互过程的结果, 判定一个区块被同意加入到链还是被拒绝. HyperLedger Fabric使用PBFT达到超过1000 TPS的吞吐量.
一些方案对PBFT进行改进以获得更好的可扩展性和处理大量节点问题. 例如, Dumbo[45]通过分组来减少PBFT共识所需的节点数量. 少量的节点在通信时的复杂度会降低, 有助于提高吞吐量.
Hot-Stuff[46]共识协议由Yin等人提出, 它对PBFT做出改进. 其采用并行流水线处理提议, 相当于将PBFT中的后一轮的准备和前一轮承诺阶段的两个广播合并成一个广播, 很大程度上提升了共识的效率. 该协议利用门限签名技术将领导者作为签名验证者, 使得每次信息确认只需要每个节点将签名发送给领导者, 而不用全网广播, 这降低了通信复杂度.
一些方案通过事先对事物顺序进行确定性排序, 消除了共识中对事物顺序排序的共识步骤, 增加了区块链系统的性能, 例如NeuChain[47]通过专门的事物编号分配服务器对事物进行编号分配, 从而提高了整体的共识效率.
在共识协议中, 也有一些场景需要共识协议保护数据的隐私. Caper[48]共识协议针对企业内部隐私保护需求的场景, 每个参与者维护私有数据和公共数据, 每个企业只访问和维护自己的账本视图, 这包括其内部和所有跨企业事务. 系统支持内部和跨企业交易, 其中内部交易由单个企业执行, 而跨企业交易由所有企业执行. Qanaat[49]在Caper的基础上进行了扩展, 将单个企业内的隐私数据保护扩展到了企业之间的隐私数据保护.
还有一些非概率性共识通过对网络进行分层, 分层后每个层级的节点在本层内共识, 这减少了全局通信, 降低了通信复杂度, 代表方案有Steward, Blockplane[50], GEOBFT. 其中Blockplane以地理位置为依据进行分层, 属于同一个地理位置的节点进行内部共识, 这减少了全局通信, 并且这种分层设计可以预防地质灾害对整个系统的影响.
混合共识是一种结合多种共识协议提高可扩展性的共识方法. ByzCoin[51]基于Bitcoin-NG[39]的思想提出一个两阶段协议, 通过结合PoW和PBFT来保证强一致性, 和Bitcoin-NG 类似的分离设计提高区块链的交易吞吐量. 使用一个树结构交互模式在准备和提交阶段进一步改进PBFT, 实现确认延迟在15–20 s并且吞吐量超过1500 TPS. Hybrid consensus、Solidus也提出将不同的共识协议与PoW相结合, 采取相似的交易分离思想和两阶段的混合共识算法.3.2.4 新型链结构
上述方案大多采用单一链结构, 对于吞吐量的提升具有局限性, 有研究提出改变链结构来组织区块, 可进一步改善可扩展性. 主要分为有向无环图结构(directed acyclic graph, DAG)和平行结构.
(1)有向无环图
传统的区块链的单一链结构存在孤块问题[52], 即分叉后一段时间, 只有在主链上的区块能够被确认, 不在最长链的区块作废, 这限制了区块链系统的吞吐量. 为了解决这个问题, 有研究提出将有向无环图DAG应用于区块链. 直观的做法是让区块作为DAG中的顶点, 区块间的关系作为边, 将链状结构的区块链转化为DAG结构. 允许多个顶点连接到之前的顶点, 这意味着区块可以并发地生成, 有效地解决链式结构区块分歧的问题, 从而使得区块链系统可以包含更多的交易. 采用DAG结构的可扩展性方案发展迅速, 本文根据链结构增长的表现形式将DAG结构分为发散结构和收敛结构.
发散DAG结构方案有Spectre和Phantom等. Spectre可以指定DAG结构中两两区块间的局部顺序, 但是不能提供完整交易列表. Spectre的关键技术是基于底层拓扑排序中区块的优先级提出一个递归的权重投票算法, 如图7所示. 新加入的区块需要为之前的一对区块
$ \left(x, y\right) $
进行先后关系投票, 投票存在3种选择 (−1, 0, 1), 表示两个区块的先后关系
$ \left(x < y, x=y, x > y\right) $
. 最终该区块对
$ \left(x, y\right) $
的先后关系由该区块总计的投票结果的绝对值决定. 这个设计需要假设任意两个交易的顺序一定是由诚实节点得到的, 因此Spectre的区块更新缓慢.
图 7 发散的DAG结构(Spectre)
Phantom的每个区块包含多个哈希引用指向之前的区块, 也被多个后续区块引用. 首先标识一组连接良好的区块, 进而大概率排除非诚实节点产生的区块. 之后, Phantom利用一个递归的贪婪算法, 实现对标识区块的排序. 贪婪算法通过迭代不断地激励拓扑中被标识的区块并惩罚其余的区块. 变化参数来调节并发区块中的容忍度. 区块排序后可以进行交易排序, 最终全网达成一致状态. 与Spectre类似, Phantom也依赖于诚实节点来对区块进行排序, 但是Phantom可以确保全局区块有一个严格的线性顺序.
收敛DAG结构的扩展方案有Inclusive[53]和Conflux[54]等. 在Inclusive中, 新区块通过哈希引用指向多个之前的区块. 提出了一种新的包容性方案在DAG结构中选取主链, 而不是普通区块链的最长链原则. Inclusive可以包容多个并发区块中冲突的交易, 有助于提高吞吐量和对大区块的传播延迟的容忍性. Conflux 提出两种不同的区块之间的连接, 父连接和参考连接, 在确定主链的基础上, 新生成的区块必须使用父连接连接到主链的最后一个区块上. 除了主链外, 还存在其他一些非主链的链, 新生成的区块必须使用参考链接连接这些非主链的最后一个区块, 最终通过选择算法选择由父连接构成的链作为主链, 如图8所示. 在区块确认时Conflux将DAG的共识问题转化为单链结构的共识问题, 采用GHOST来解决主链选取问题. Conflux实现了6400 TPS的吞吐量, 延迟在250–450 s.
图 8 收敛的DAG结构(Conflux)
DAG-Rider是基于拜占庭共识的异步原子广播协议, 它依靠可靠广播来保证所有参与的节点最终都能看到相同的DAG. DAG-Rider分为两层, 在第1层中, 各个节点通过可靠广播发送事务, 并构建他们之间通信的结构化DAG. 在第2层中, 各个节点观察本地存储的DAG, 并在没有额外沟通的情况下对所有提案进行完全排序, 具有高弹性、低时间复杂度的优点.
IOTA将交易排序成DAG图, 也属于DAG链结构. 该共识方案中当一个人试图在IOTA系统增加一个交易, 需要随机找到其他两个没有确认的交易, 验证其有效性, 随后把你的交易指向这两笔交易, 会发送到网络, 由后来的交易检查和确认. 这种共识方式使得整个网络的规模越大, 效率越高.
(2)平行结构
DAG结构的一个缺点是无结构性, 近年来一些研究提出更具结构性的平行结构. 核心思想是借助平行结构并行产生区块, 此思想启发于比特币骨干协议的2-for-1 PoW挖矿思想. 2018年, ParallelChain[55]提出形式化定义的m-for-1平行链链协议, 它对于PoS和PoW分别进行了扩展的概念设计, 提出了扩展单一链结构为多条平行链的做法, 并且其相较于DAG结构更加易于维持时序性. 此外, 已有的平行结构的扩展方案还有OHIE[56]和Prism[57]等.
OHIE是对ParallelChain的PoW部分的模型进行了实际设计如图9所示. 将前置多个区块的哈希计算默克尔树哈希作为前置状态, 利用哈希值中特定的几位的数值对新产生的区块进行定位. 将单条链结构扩展为多条链并行的结构, 缓解区块分歧的问题, 提高交易吞吐量. Prism的主要思想是对区块链进行功能解构, 将之前单一的区块分为交易区块、提交区块和投票区块这3种类型. 交易区块负责打包交易, 提高区块链的高吞吐量, 提交区块和投票区块构成平行结构. 提交区块负责引用交易区块, 完成交易的上链, 投票区块对提交区块进行投票, 减少区块的确认延迟.
图 9 平行结构(OHIE)
3.2.5 链上扩展技术总结
链上扩展技术针对区块链本身的设计进行优化和改进, 以提高区块链的交易吞吐量, 解决可扩展性问题. 这类技术可以从区块链架构的基础设计出发改善区块链自身的属性. 本节对链上扩展技术的各个子类进行比较, 在表3中给出了比较结果.
对于共识协议, 链上扩展的方案多采用单一的共识机制, 分片技术和混合共识方案会采用两种以上的共识方法. 分片在委员会(主片区)成员选取时和片内产生区块时会采用不同的机制, 混合共识机制大多是为了进一步提高吞吐量而设计领导节点选举方法而加快出块以提高吞吐量.
在端到端性能方面, 分片、非概率性共识和新型链结构均能达到103数量级的吞吐量, 延迟均不超过中本聪协议. 分片不需要实时在全网同步状态加速区块处理, 可以有效地提高吞吐量, 但实际多个分片间信息交互需要一定的开销. 非概率性共识可以极大程度减少区块分歧, 在保证吞吐量的同时延迟非常低, 但这类方案往往需要中心化的设施. 新型链结构实现了区块的并发大幅改善吞吐量, 延迟方面多数方案沿用中本聪协议的设计.
链上扩展的安全性主要考虑容忍恶意节点的比例以及对于双花攻击的抵御能力. 对恶意节点的容忍能力和共识机制直接相关, 采取PoW或者PoS的方案安全性相对较高, 通常可容忍51%的恶意节点. 但是Bitcoin-NG的微区块设计可能会导致攻击者可以更容易干扰区块链状态, 故其对于恶意攻击者的抗性较低. 此外, 对于分片方案需要考虑片内安全性和整体安全性, 取片内安全性作为衡量指标, 主要原因是网络被分区, 每个区域的节点数量变少, 恶意节点更容易针对片区进行攻击.
链上扩展方案大多数具备良好的中心化, 因为多数区块链协议在底层基础设计时以公有链为出发点. 但也有部分非概率性方案以私有链和联盟链的场景为主, 他们往往需要许可环境建立信任机制. 此外, 一些分片方案和DAG结构也可能需要中心化设计, 比如分片的委员会由可信的成员节点构建, DAG在主链选取时必须假设节点必须被信任等. 表4中, ◐指的是这些方案设计了特殊的委员会, 所以存在一定程度的中心化; ○指的是这些方案设计了特殊领导节点, 所以存在很大程度的中心化; ●指的是这些方案没有设计特殊节点, 所以中心化程度低.
表 4 链上扩展方案对比
此外, 链上扩展的成本指标主要考虑协议实现难度和系统实施成本, 多数链上扩展方案协议复杂度并不是很高, 而且方案实施不需要特别多的实体, 因此成本较低. 一些DAG方案在实现时由于无法沿用传统单链的安全性, 需要较多的额外的开销来进行区块的时序处理. 一些混合共识和分片的方案在实现时往往对于参与节点的性能和网络的通信能力有一定的要求.3.3 链下扩展
链下扩展是解决可扩展性问题的另一个选择, 这类方案建立在区块链的应用层和合约层, 可以在不改变区块链本身设计的基础上, 提高区块链的吞吐量. 举一个例子, 把区块链比作道路的话, 链内扩展相当于对道路进行交通优化、车辆优化或者道路扩展等, 而链外扩展相当于不改变原本道路情况下增加隧道、铺设高架等. 这类方案利用区块链上层应用设计和智能合约将复杂的计算和频繁的交易迁移到区块链系统之外进行. 这类技术从两个角度实现区块链功能扩展, 一是将大部分交易或计算放到链下进行, 将结果返回给区块链, 也就是状态通道技术和链下计算技术, 极大地加快了交易确认, 有效地提高系统整体的交易吞吐量. 其次, 借助高性能辅助区块链提高可扩展性或者实现多个区块链系统交互联合, 也就是侧链技术和跨链技术.3.3.1 状态通道
状态通道是一种临时性的链下交易通道, 将部分交易转移到这个通道上, 以达到减少主链交易量的效果, 同时提高整个系统的交易吞吐量. 主要思想是交易双方在区块链上建立临时的链下对等交易通道, 交易结束或到达预设的截止时间, 或者交易的任何一方将初始交易和最终交易的数据同步到区块链, 都表示交易通道关闭. 状态通道的机制相当于在链下提前对事务和交易进行了确认, 从而加快了区块的确认过程, 进而提高区块链的可扩展性. 主要的方案有闪电网络[58]、雷电网络[59]等支付通道以及Trinity[60]、µRaiden[61]等扩展以太坊的状态通道.
闪电网络的支付网络是由多条链下支付通道组成的, 可以提高区块链的交易吞吐量. 交易双方通过哈希时间锁定合约(hash time locked contract, HTLC)创建支付通道如图10所示, 在通道内进行链下交易, 向区块链提交交易结果. 虽然建立支付通道的过程中涉及链上操作, 但通道内发生的所有交易都是链下的, 因此获得更高的交易吞吐量. 但是闪电网络也存在着一定缺陷: (1)扩展交易但没有扩展用户; (2)交易的安全性低于比特币; (3)只适用于比特币的小型支付场景. 雷电网络设计思路和闪电网络类似, 是基于以太坊实现的, 而闪电网络是针对比特币网络的.
图 10 支付通道
Trinity是一个通用的链下扩展解决方案, 具有实时支付、低交易费用、可扩展性和主链资产的隐私保护等特点. Trinity 包含4层架构: 通道服务层、通道网络层、状态通道层和区块层. 通道服务层为Trinity提供插件化、可定制的链下交易服务. 通道网络层为Trinity提供状态通道的路由服务, 该层为未建立状态通道的交易双方全自动智能选路. 状态通道层为Trinity提供最基础的P2P状态通道服务. 区块层是以NEO区块链为基础的主链. 通过使用状态通道, 交易吞吐量有效增加. 为了加强隐私保护, Trinity采用零知识证明等多种技术来保护数据安全. 但是, Trinity的使用场景受限于支付环境. µRaiden是一个快速且免费的链外ERC20代币转换框架, 可用于基于两方基于ERC20代币的微型支付. 雷电网络旨在通过双向支付通道实现跨多个状态通道的资产转移, μRaiden 可以实现单向的支付通道. µRaiden依赖以太坊本身的安全性, 收发双方基于自己的私钥和通道进行链上或者链下的交互, µRaiden中的转账是免费的, 旨在打开和关闭支付通道时消耗费用. µRaiden有助于发展以太坊的微支付功能, 但是它也从在一些缺点, 比如它不支持跨多个通道的交易, 只允许代币单向地发送给提前决定好的接收者.3.3.2 链下计算
链下计算的主要思想是将原本在链上处理的计算和复杂交易放到链下处理, 链上仅作数据验证, 间接地提升区块链处理数据的速度. 一个应用场景是, 以太坊的用户需要模拟所有合约的执行来验证其状态. 这个过程成本很高, 且限制了以太坊的可扩展性. 因此, 提出一些链下计算的方案来构建可扩展的智能合约, 即链下计算技术. 代表方案有rollup[62]、TrueBit[63]、Arbitrum[64]、SlimChain[65]等.
针对以太坊的链下计算rollup方案, 该方案将以太坊中智能合约的计算(以及状态存储)转移至链下, 但将每笔事务的一些数据放在链上. 这种方案减轻了链上的计算存储负担, 又通过链上数据记录共识保证了安全性. rollup方案的本质是将链上事务的执行放到链下执行, 并且在链上有一份智能合约记录链下事务执行的数据目前的状态, 即状态根. 链下事务执行后将许多事务压缩成一个汇总事务并记录该汇总事务执行前的旧状态根和执行后的新状态根, 再将该汇总事务上链, 所有链上节点接收到汇总事务之后, 不会执行汇总事务内的事务逻辑, 而只验证汇总事务, 智能合约检查提交的汇总事务的旧状态根是否匹配链上记录的目前的状态根, 如果匹配的话接受这些逻辑的执行结果, 智能合约对目前的状态根进行更新, 更新为新状态根. 根据链上节点如何验证汇总事务的正确性, rollup方案可以分为Optimistic rollup 与 ZK rollup. Optimistic rollup方案中汇总事务提交者需进行资金担保, 当汇总事务提交后需要留一段时间给验证者来进行质疑, 验证者会追踪所有历史状态根, 并与提交的汇总事务的旧状态根进行比对, 如果发现历史状态根与汇总事务的旧状态根不匹配, 可以向区块链发送一个质疑证明, 证明该汇总事务不合法. 然后智能合约会根据链上存储的历史状态根信息和质疑证明进行计算, 经过判断后, 如果该事务非法, 则扣除提交者担保资金, 奖励验证者, 通过这种激励方式保证汇总事务正确性. ZK rollup方案中在链下执行事务后, 通过零知识证明算法, 生成一个零知识证明和新状态根. 提交者将零知识证明与汇总事务一起上传到链上, 链上节点通过零知识证明验证旧状态根经过汇总事务执行之后会变成新状态根, 从而确保汇总事务正确性.在ZK rollup方案中, 不需要预留时间给验证者来进行质疑, 因为密码学保证了验算零知识证明就等价于验证了该汇总事务是合法的. 对比Optimistic rollup 与 ZK rollup, Optimistic rollup基于押金的安全性不是通过算法保证的, 并不是绝对安全的, 并且需要预留时间给验证者来进行质疑, 造成了资产从链下提到链上时需要被锁定一段时间, 这一点对于许多对及时性要求高的交易来说是不可接受的. ZK rollup相对于上面这两点, 具有很大优势, 密码学算法保证了汇总事务的绝对安全合法, 而且不需要预留时间给验证者来进行质疑, 但是生成零知识证明比较复杂, 需要耗费算力和时间, 投入更高的硬件费用.
TrueBit[63]是由Jason Teutsch和Solidity语言的创造者Christian Reitwiessner在2017年推出的以太坊智能合约如, 旨在促进可信的计算密集型应用. 在以太坊主链上进行的计算代价很高, 因为交易是由网络上的所有完整节点同时处理的. 计算的补偿是以gas成本的形式给出的(gas是以太坊用于计算合约成本的度量单位). 每个区块都有一个最大的gas限制, 决定了一个区块中所有交易执行的计算总量上限. 因此, 复杂的计算难以包括在区块内. 如图11所示, TrueBit将复杂的计算交给一个经过验证的第三方. 这个第三方被称为处理者, 它将代币存入智能合约, 所以是可信的. 另一个验证处理者工作的第三方被称为挑战者, 从验证工作中获取奖励. 挑战者可以识别导致分歧的操作. 因此, 以太坊的计算密集型工作减少了, 而且正确的结果也会被认可.
图 11 TrueBit执行原理
Arbitrum通过将智能合约的验证计算转移到链下进行, 可以提高吞吐量. 在Arbitrum中, 验证者验证全局的交易, 类似于比特币中的矿工. Arbitrum利用一个虚拟机来实现一个带有资金的合约, 该合约的资金不会被任何执行透支. 任何参与方都可以创建一个虚拟机并选择一组管理者保证虚拟机正确执行. 如果所有的管理者同意更新虚拟机状态, 他们会签署一份无异议声明合约. 否则, 管理者签署一份有争议声明合约, 之后通过一个均等协议来处理虚拟机的状态变化. 这个方法和TrueBit类似, 为了保证虚拟机的状态正确变化. 管理者只需要验证代表合约状态的哈希值, 减轻了合约验证的负担, 有利于提高吞吐量.
SlimChain是一个无状态区块链系统, 通过链外存储和并行处理来扩展交易. 其主要思想是利用链外存储节点来存储账本状态并模拟智能合约的执行. 链外存储节点并行执行链外交易, 并计算一些辅助信息, 以证明执行的完整性, 并促进链上共识节点的后续交易承诺. 然后, 它设计了链上临时状态, 这种状态提供了最少但足够的信息, 实现无状态链上事务验证、并发控制和承诺.
智能合约的状态是由验证者通过模仿所有合约的执行来验证的, 但验证的过程是昂贵的, 这降低了可扩展性. 链下计算技术将这些昂贵而复杂的计算在链外进行, 提高可扩展性.3.3.3 侧链技术
侧链技术的主要动机是主流区块链效率低且功能有限, 如果将主链上的交易发生在性能更好的侧链上, 可以减少主链处理交易的压力. PeggedSidechains是第1个使比特币等加密货币可以在不同区块链系统之间转移的侧链技术, 其提出的双向锚定协议是侧链技术最主要的特点. 双向锚定技术使得主链和侧链之间相对独立, 安全性不会相互影响, 实现交易的转移有助于提高扩展性. 侧链扩展方法如图12所示, 已有的侧链方案有根链(root stock, RSK)[66]和Plasma[67]等.
图 12 侧链技术原理
RSK是第1个与比特币双向锚定的侧链. RSK融合侧链和合并挖矿模型, 合并挖矿是一种同时在两条区块链上产生区块的技术. RSK使得智能合约可以以比特币作为加密货币来执行, 开放性和使用PoW和合并挖矿使得RSK具备和比特币主链一样的安全性. RSK使用DECORE+协议来鼓励矿工从而避免矿工之间的冲突. RSK可以实现更高的可扩展性并且降低交易成本, 提高交易吞吐量, RSK可以使得比特币交易按照每秒300–1000的速度被处理. RSK也有一些缺点: (1)它要求用户在进行交易之前先存入一些比特币; (2)由于RSK是基于PoW的, 通过支持SHA-256D合并挖矿, 它的能耗很高.
Plasma是一种融合侧链技术和分片思想的技术. 相比其他侧链方案给出更加完备的安全性证明. Plasma的基本思想是在区块链中创建区块链如图13所示. 具体而言, Plasma是一个基于MapReduce概念的框架, 用于构建可扩展的、非中心化的应用, 其中MapReduce是一个用于处理大数据集的框架. Plasma结构是通过使用智能合约和默克尔树来构建的, 可以创建无数的子链. 在Plasma中可以创建更多的链形成一个树状结构, 每个Plasma子链都是一个用于不同的需求的定制化智能合约. 这些子链可以共存, 独立运行. 父链和子链之间的通信由防欺诈措施来保障; 父链负责保持网络的安全, 并负责惩罚恶意的参与者.
图 13 Plasma结构
Plasma受到广泛关注, 有很多研究者对其进行多种形式的实现. 但是, Plasma框架仍然有许多限制, 包括: (1)由于当时的以太坊智能合约中所有权的特征, 用完整的以太坊虚拟机功能可视化Plasma链是不合理的; (2) Plasma中概述的确认签名也是有局限性的, 它们要求双方发送确认交易以确保最终性; (3)对于希望提取资金的用户来说, 等待期很长(7–14天).3.3.4 跨链技术
近几年, 旨在实现多条链的资产转化和状态交互的跨链技术发展迅速, 通过连接多条区块链实现了更好的交互性和可扩展性. 与侧链技术最大的区别是跨链技术中不同链之间是平等的, 无依附关系. 跨链技术中, 一条链的节点不存储同个网络中其余链的全部交易. 相反, 它利用智能合约从一个成员网络传递交易到另一个成员网络. 早期的开源侧链项目BlockStream[68]被看作是跨链技术的雏形.
迄今为止, 跨链技术已经包含多种实现形式, 有公证人机制、侧链/中继机制、哈希锁定. 公证人机制是最简单也最直接的实现跨链资产转移的方法, 需要借助第三方公证人作为中介, 因此需要对第三方公证人有很高的安全信任假设. 侧链/中继技术中的侧链是一个独立于主链的区块链系统, 通过设计按需定制的协议、账本、共识机制、智能合约等, 使用户可以在侧链上使用主链的代币进行跨链交易. 哈希锁定思想最早应用于闪电网络, 借助哈希锁保障资产的转移和提取.
公证人机制是目前应用最广泛、技术实现最简单的一种跨链机制. 公证人机制根据公证第三方形式的不同, 可以分为单公证人机制、多公证人机制以及分布式公证人机制. 单公证人机制由单一指定的独立节点或者机构充当, 多公证人机制由多个独立节点或者机构充当, 分布式公证人机制通过多方计算和随机抽取公证节点的方式实现. 公证人机制的代表项目主要有 Interledger[69], 该协议的核心思想在于: “Interledger”提供的可信第三方, 会向发送者保证, 他们的资金只有在“可信第三方”收到证明, 且接收方已经收到支付时, 才将资金转给连接者; 可信第三方也同时也保证连接者, 一旦他们完成了协议的最后部分, 他们就会收到发送方的资金.
侧链是一个独立于主链的区块链系统, 通过设计按需定制的协议、账本、共识机制、智能合约等, 使用户可以在侧链上使用主链的代币进行跨链交易. 这种跨链交易中侧链与主链沟通的过程被称为双向锚定, 具体而言就是, 在主链上锁定交易后, 等量等值的代币才能在侧链上被释放, 而当等量等值的代币在侧链上被锁定时, 主链上的原始币就可以被释放了. 中继是对公证人机制和侧链机制的有效融合和延伸, 中继链旨在构造一个第三方公有链, 通过第三方公有链来进行跨链信息传递. 侧链/中继机制的代表项目主要有 BTC Relay[70], 该方案通过以太坊智能合约对比特币交易进行验证, 具体方法是BTC-Relay 利用 BTC 区块头在以太坊上创建一个小型简要版的比特币区块链来方便验证. Cosmos[71]和Polkadot[72]也是有代表性的中继链方案.
Cosmos是一个由多个独立区块链系统构成的网络如图14所示, 包含中心和空间两种角色. 空间指的是各个不同的区块链系统, 中心负责检测其余区块链运行状态. 初始只有一个中心(Cosmos hub), 其他的块链系统在中心上扩展, 进行连接交互. 中心使用PoS加密货币并且具有简单有效的治理能力. 扩展的区块链利用跨链通信协议(inter-blockchain communication protocol, IBC)进行交互. Cosmos基于Tendermint共识, 通过应用区块链接口(application blockchain interface, ABCI)协议和已有的区块链系统进行兼容. 事实上, Cosmos开发了通用区块链框架便于多种区块链在此基础上进行开发和交互, HyperLedger Fabric就是基于其开发的, 以太坊等不是基于该框架开发的区块链需要借助锚定空间(peg zone)进行桥接.
图 14 Cosmos结构
Polkadot[72]是2016年提出的另一个跨链方案, 通过中继链的方式可以安全地在不同的独立区块链实现交互性和可扩展性. 中继链是一个非中心化的网络, 参与交互的区块链系统被称为Parachains.
中继链为不同的Parachains提供了交互使用的安全接口. 中继链与内部的各个Parachains在结构和行为上相互独立, Polkadot的中继链节点作为一个轻量级的节点运行Polkadot软件. 这些节点可以充当3种角色(验证者、代理者、核对者), 在3个角色进行交互或者转换可以实现多个区块链系统的信息胡同, 提高整体网络的吞吐量.
哈希锁定, 全称哈希时间锁定合约. 哈希锁定技术原理是让交易双方先锁定链上的资产, 然后设置一个哈希锁(哈希锁是指对一个哈希值H, 如果提供原像R使得
$ Hash(R) = H $
, 则承诺有效, 否则失效), 如果都在规定的时间内输入正确哈希值的原值, 即可完成交易, 否则交易失效, 从而保证了交易的原子性. 然后再设置一个时间锁, 时间锁是指交易双方约定在某个有限的时间内输入正确哈希值的原值才有效, 超时则承诺失效.
跨链技术旨在实现多个链的交互, 没有像链内扩展一样提高区块链本身的吞吐量, 也不像其余链外扩展方案一样加快交易确认或者减轻某条区块链负担. 但是可以横向扩充区块链为一个网络, 增强多个区块链系统的链系, 提高区块链的可扩展性.3.3.5 链下扩展技术总结
链下扩展技术主要通过扩展区块链的功能提高其可扩展性. 表5对链下扩展方案整体进行比较分析, 主要从吞吐量和延迟性能、是否加快交易确认、是否降低交易费用、安全性和非中心化因素考虑以及应用场景等方面, 对链下扩展各个技术的代表性方案进行分析对比.
表 5 链下扩展方案对比
对于吞吐量和延迟性能, 链下扩展更多地考虑对区块链应用层和合约层进行功能扩展, 往往涉及更多地区块链之外的交易处理、计算转义和多链交互等, 难以向链上扩展方案一样针对单一区块链给出直观的端到端性能指标. 对于状态通道和侧链技术, 吞吐量可用主链与通道(侧链)转移的交易总量来衡量, 相比于链上扩展技术, 链下扩展由于只需在主链上记录结果, 所以交易的成本低且速度快. 链下计算主要关注复杂计算的处理, 因此这类技术对于吞吐量往往取决于复杂交易本身的数量. 由于跨链技术强调多个区块链系统交互, 他们的吞吐量和延迟通常无法估量. 多数链下扩展方案在应用层进行交易处理, 具有很低的延迟.
除了延迟之外, 考虑链下扩展方案是否能够加快交易确认. 状态通道和侧链技术可实现链下交易和链上汇总的特点, 而且交易双方通常是提前可预知的, 可以快速确认交易. 链下计算和跨链通常不能加快区块链系统的交易确认.
考虑在实现功能扩展时各个方案的成本, 主要包含交易费用和实施难度两个指标. 交易费用指的是在实现交易转移或者合约执行时需要付出的额外费用. 其中链下计算方案不同的合约处理方式不一样, 跨链技术不同的区块链也会有不同的措施. 而状态通道和侧链技术一般不需要额外的开销, 状态通道仅需在通道建立和关闭时抵押资金, 侧链也会在资金转移结束后返回抵押金.
对于安全性和中心化问题, 相比于链上扩展技术, 链下扩展大多会更多地牺牲中心化程度, 引入中心化设施可能会引起用户的隐私问题等.
因为对区块链功能性扩展, 多数链下扩展方案无法适用于任意场景, 如状态通道和跨链通常用于支付场景, 链下计算则需要考虑特定的使用需求.4 区块链可扩展性的总结与展望
本节给出对网络扩展, 链上扩展, 链下扩展各个方向技术的优缺点比较见表6. 这些归纳通过宏观分析当前研究者的关注点, 有助于研究者思考区块链可扩展性领域的热点和难点, 以进行下一步研究. 在归纳可扩展性方案优缺点基础上, 本文进一步讨论区块链可扩展性的未来研究点, 希望可以激发研究者们解决区块链可扩展性问题的灵感, 主要包含以下展望.
表 6 扩展方案优缺点比较
(1)混合可扩展性方案展望: 单一的方案难以在权衡安全性的同时有效解决区块链的可扩展性问题. 多数已有的工作提供有限的可扩展性提升或者引入新的安全问题. 然而, 两个或者更多的方案结合也许可以得到更好更安全的可扩展性方案, 本文认为是未来关注点混合方案是未来研究点之一, 如以太坊2.0采用分片和Casper协议混合.
(2) 提高区块链的数据读取性能展望: 读取性能会影响区块链可扩展性, 但是这个方向的研究甚少. 比特币的简单支付验证(simplified payment verification, SPV)节点和性能受限的IoT节点难以存储整个区块链, 依靠区块链服务器获取区块链数据. 然而区块链服务器的响应速度远低于本地的服务器, 因此很有必要提高区块链的读取性能. 其次, 与关系型数据库MySQL和非关系型数据库NoSQL相比, 区块链缺乏高效的查询语言和结构.
(3)轻量存储且安全的新型链结构展望: DAG结构使得区块链可以并发地追加区块到系统, 但是已有的DAG结构有大量的存储数据以及安全性和非中心化问题, 并且结构复杂, DAG结构内区块之间的关系确认耗费时间和计算, 且当网络规模庞大时, 这些时间成本和计算成本成倍数增长, 高昂的时间成本和空间成本导致难以推广使用. 因此, 设计安全的、简洁高效的新型链结构且具备低存储并满足非中心化是未来研究点之一.
(4)高效的分片划分和跨片交互方法展望: 分片是扩展区块链的有效方法, 但是低效的分片方法和跨片交互导致新的安全性和可扩展性问题. 越小越多的分片对于扩展性提升越大, 但是对于威胁的容忍性会降低, 本文认为解决这一问题是未来研究点.
上一篇:《炽焰天穹》李映夏角色介绍