导读
随着区块链的链上交易数量飙升,区块链网络变得日益拥堵,系统的扩容势在必行。
摘要
随着区块链技术的普及,主流公链如BTC、ETH的交易数量不断增加,以及ETH链上部分现象级DApp的火爆,区块链网络拥堵现象逐渐显现。公有区块链出于非中心化与保证网络安全的考虑,形成了一定的共识机制,同时对区块间隔时间和区块体积大小有所限制,从而能够处理的交易数量不足以支撑高并发的应用,区块链扩容势在必行。
我们借鉴计算机网络通信体系架构的OSI模型,将区块链逻辑架构划分为三层。现有的扩容方案分别针对不同层级进行改进,分为第0层扩容、链上扩容和链下扩容。其中链上扩容通过改变基本协议提升区块链效率。链下扩容不改变基本协议,在应用层进行改变提升扩展性。第0层扩容通过改变区块链底层数据传输协议提升区块链可扩展性。
链上扩容方案又包括数据层改进方案、共识层改进方案和网络层改进方案,基本思路是增加区块大小(直接以及变相)或减少区块验证传播时间和形成共识时间。
链下扩容方案主要有状态通道、侧链、跨链和链下计算四种方式,思路均为将部分链上交易转移到链下执行,减轻链上处理压力,提升整体效率。
迄今为止,每一种扩容方案都为改善可扩展性提供了解决思路。目前也已经出现多种方案结合的方式提升可扩展性,如多种共识机制的结合、ETH筹划中的共识机制改进与分片相结合等。
这些方案均存在不同程度的优势和劣势,有些方案的技术实现较为复杂,目前落地仍存在难度。针对不同的应用场景与需求,选择适合的区块链扩容技术或是解决目前区块链网络拥堵问题的主要途径。
风险提示:现有方案尚未完全成熟、落地难度较大
目录
1 拥堵的区块链
2 公链在安全与效率上的折衷是拥堵的原因
3 扩容分歧
4 现有扩容方案
4.1 链上扩容
4.2 链下扩容
4.3 第0层扩容
5 总结
正文
1 拥堵的区块链
BTC:最高超过19万笔未确认交易。BTC区块大小的上限为1MB,每10分钟左右产生一个区块,从历史数据来看,BTC的TPS(Transactions Per Second,每秒事务处理量)约为3.5(理论TPS可达到7)。交易笔数较少时不存在拥堵问题,但是随着交易笔数的飙升,拥堵日益显现,根据Blockchain.info数据,BTC未确认交易数最高时在19万笔左右。
ETH:一只猫造成的拥堵。2017年11月底,虚拟养猫游戏CryptoKitties(又名“云养猫”)上线后过于火爆导致ETH网络出现严重拥堵,2017年12月5日ETH未处理交易达到峰值19800笔。
伴随拥堵产生的另一个问题是交易费用的上升。交易签名后广播,并进入矿工节点的待打包交易池,矿工会优先服务手续费开价更高的交易,当出现拥堵时手续费较低的交易很难被及时确认。以BTC为例,拥堵时单笔交易手续费按法币为标准的话最高达到约162美元(数据来源:Blockchain.info)。
拥堵的区块链网络俨然已经无法满足基本的交易需求,扩容势在必行,那么什么是扩容?区块链领域的扩容即围绕如何在“更短的时间实现更多的交易”,增强区块链的可扩展性(scalability)。可扩展性是指系统、网络或进程处理越来越多的工作的能力,或者适应增长而扩展的潜力。
2 公链在安全与效率上的折衷是拥堵的原因
BTC的区块体积大小约为1MB,出块间隔平均约为10分钟。但为什么是1MB和10分钟呢?为什么不能增加区块大小或减短出块间隔时间以加快交易确认的效率呢?
(1)由于每笔交易需要网络中每个全节点处理和验证,区块体积越大扩散至整个网络所需的时间越多。
根据Decker和Wattenhofer2013年关于BTC的研究表明,区块的平均扩散时间约等于2秒加0.08秒/KB,即1MB大小的区块扩散需要约84秒,Rizun在2015年关于BTC的研究表明,随着交易扩散技术的提升,扩散时间降低到约0.008秒/KB,即1MB大小的区块扩散需要约10秒。随着节点数的增长区块链将变得更加缓慢,因为节点间的延迟会随着新增节点数呈对数性增长。
(2)区块体积变大和出块间隔过短将不可避免地导致孤块率上升。
出块间隔主要由验证时间、传播时间和共识时间构成(就BTC而言即为PoW时间),验证和传播时间之和远小于10分钟。根据公式
分叉概率的影响因素包括t90th和tB,其中t90th为新区块传播到90%以上节点用时,tB为出块间隔。在其他条件不变的情况下,分叉概率随t90th增加而上升,随tB降低而上升。
增大区块体积会增加传播用时(即t90th增加),这与缩短出块间隔(即tB降低)都意味着分叉概率上升,即一个新的区块尚未充分全网广播之前,就有另一个矿工在同样的高度产出了另一个新的区块的可能性增加,导致网络孤块率的上升。
(3)区块体积变大和出块间隔缩短带来的运营成本上升可能导致算力中心化。
区块体积过大带来的另一个问题是全节点运营成本增长。区块大小按照1MB计算,则一年大约需要50GB存储空间,其他条件不变的情况下,区块变大导致存储成本和带宽成本都将上升。成本上涨和孤块率的增加进一步可能将导致普通计算机用户甚至小矿池退出,进而算力呈中心化趋势以及安全性减弱。
BTC的选择是网络效率和网络安全之间的折衷。虽然1MB和10分钟并不一定是最佳选择,通过缩短出块间隔和扩大区块确实可以提升交易处理能力,而且事实上人们也已经这样做了,但是通过这种方式所能实现的提速毕竟是有限的,非中心化运作的公开区块链在效率和非中心化之间进行了折衷。
相比于BTC,ETH的出块间隔缩短到了15秒,并且没有限定区块大小,ETH出现拥堵的原因是什么呢?
ETH虽然没有区块大小限制,但是存在“区块GasLimit”(区块燃料限制)。ETH中任何一笔交易都需要gas(燃料)才能进行,gas对应BTC交易中直接以BTC支付的手续费,实际上gas也需要用ETH购买。注意区块GasLimit不同于交易中的gasLimit,交易gasLimit是指该笔交易中交易者自行设定的gas使用限制,而区块GasLimit是指每个区块最多可使用的gas限制。
比如交易池中有3笔交易,分别消耗10gas、20gas、30gas,而当前的区块GasLimit是60gas,那么以上3笔交易都可以被打包,如果区块GasLimit是40,则最多只有两笔交易可以被打包。
也就是说,ETH在有限的时间内(15秒)只能处理有限的交易(由区块GasLimit确定),如果交易数量超出了其承载能力,依然会造成拥堵。
另外值得一提的是ETH的GasLimit本身存在自动调整机制和矿工投票机制。
其中自动调整机制是指当父区块的gas使用量超过父区块GasLimit的2/3时,将按照一定速度增加当前区块的GasLimit,但是最大不能超过TGL(TargetGasLimit,目标燃料限制)。TGL由矿工投票确定,最小不能小于MGL(MinGasLimit,最小燃料限制),MGL初始默认值5000(创世区块的GasLimit)。但是自动调整相对而言比较缓慢,当交易量在短时间内大幅增长时很难迅速调整到位。
矿工投票机制是指矿工可以投票决定TGL的大小,如果当前区块的GasLimit小于TGL,则增加区块GasLimit尽快达到TGL。但是区块打包的交易信息越多则区块相应越大,传播时间越长,进而导致叔块(uncle block)率的上升,矿工利益受损。因此尽管存在投票机制,但矿工并没有很强的意愿投票提升TGL。
注:孤块(orphan block)在ETH中被称为“叔块”。在BTC中,孤块将被抛弃且发现孤块的矿工没有任何奖励。而ETH15秒的出块间隔导致分叉和孤块会大量产生,降低了整个网络的安全性,因此ETH鼓励矿工在新区块中引用叔块,发现叔块也能获得奖励。
3 扩容分歧
区块链扩容是大势所趋,但在具体如何扩容上存在巨大分歧。
打造一个可扩展的中心化网络并非难事,难的是实现可扩展性、非中心化和安全性三方面的完美组合。打造一个可扩展的中心化网络并非难事,现有的中心化支付系统早已实现了这一点,比如支付宝在2017年双十一期间TPS最高达到25.6万。(当然TPS并非越高越好,就像在一个小镇建一条10车道公路并没有太大实际意义。)对于传统的中心化系统,通过增加更多的服务器可以实现扩展,在非中心化世界中,人们不得不面临非中心化、安全性与高效率之间的权衡。
区块链可扩展性不可能三角(Scalability Trilemma)是指区块链系统一般只能实现非中心化、安全性和可扩展性中的两个属性。想要显著提升可扩展性,则必然要在安全性和非中心化上有所舍弃。
The trilemma claims that blockchain systems can only at most have two of the following three properties: Decentralization, Scalability, Security.——Sharding FAQs
BTC和ETH重点关注的是安全性和非中心化,一定程度上牺牲了可扩展性,事实上它们的颠覆性意义本身也不在于交易性能。市场上不断有新的项目以牺牲非中心化或安全性为代价提升可扩展性,但能否奏效尚待验证。
4 现有扩容方案
我们通过借鉴计算机网络通信体系架构的OSI模型,将区块链逻辑架构划分为三层。其中第0层(Layer 0)对应OSI模型的1-4层(底层协议),其中包括传输层。第1层和第2层对应OSI模型的5-7层(上层协议),第1层(Layer 1)包括数据层、网络层、共识层和激励层,第2层(Layer 2)包括合约层和应用层。
- 传输层:为区块链提供底层数据传输支撑。
- 数据层:封装了底层数据区块、链式结构、哈希函数、Merkle树、非对称加密和时间戳等技术,是区块链底层的数据结构。
- 网络层:包括分布式组网机制、数据传播机制和数据验证机制等。
- 共识层:封装了各类共识算法,解决在决策权分散的分布式系统中的共识问题,如PoW、PoS、DPoS和BFT类共识。
- 激励层:主要包括发行机制和分配机制等,解决对守约节点的奖励和对违约节点的惩罚问题。
- 合约层:封装各类脚本代码、算法机制和智能合约等,是区块链可编程特性的基础。
- 应用层:封装了区块链的各种应用场景和案例,如可编程货币、可编程金融和可编程社会等即搭建在应用层上。
各种扩容方案分别针对区块链逻辑架构的不同部分进行改进。根据对区块链的逻辑架构不同部分改进可相应将扩容方案分为三类,分别为第0层扩容、第1层扩容和第2层扩容。第0层扩容即通过改变区块链底层数据传输协议提升可扩展性;第1层扩容通过改变公链基础协议如区块数据结构、共识机制、激励措施等提升扩展性;第2层扩容不改变公链基本协议,在应用层通过链下方式提升可扩展性。
4.1 链上扩容
第1层扩容,即链上(On-Chain)扩容,通过优化、改进公链基本协议提升扩展性。具体包括数据层改进方案、网络层改进方案和共识层改进方案。
(1)数据层改进方案
包括扩块、隔离验证(SegWit,segregated witness)和有向无环图(DAG,Directed Acyclic Graph)等方案。
1)扩块。扩块方案即增加区块容量,从而单个区块包含的交易数量相应增加,实现扩容目的。以BCH为例,2017年BCH区块大小提升至8M,今年5月又再次提升至32M。从理论上说,在平均区块间隔固定的情况下,网络TPS上限与区块大小成正比,BCH今年九月进行的压力测试也证明其单个区块的交易承载能力高于BTC。但由于之前提到的节点处理能力、算力中心化等问题,区块的大小不能无节制随意扩大。因此这种方式一方面对于效率提升有限,另一方面存在可能导致算力中心化的问题。
举例:客车由一层变为两层,载客空间变大,能够运载更多乘客。
2)隔离见证。被打包进区块的交易数据包括数字签名(scriptSig)和其他交易信息,数字签名便占用了全部交易数据60-70%的空间,但是数字签名仅仅在验证阶段需要。隔离见证即隔离(segregate)数字签名(witness)与其他交易数据,提升单个区块所能容纳的交易数量,通过“缩小”交易数据变相扩大了区块大小,如BTC就是采用了隔离见证的扩容方式。同扩块方案一样,隔离见证对于处理效率的提升也是有限度的。
举例:客车容量不变的情况下,将乘客的行李全部放到车厢顶部,从而能够运载更多的乘客。
3)DAG。DAG是无回路的有向图,即从一个顶点沿着若干边前进(有向),但永远不能回到原点(无环)。以IOTA为例,节点发起交易时只需要找到网络中的任意两笔交易,验证它们的合法性,指向它们并广播到网络。这笔交易会以同样的方式被验证,被验证的次数越多,交易的状态就越稳定。DAG避免了因网络延迟和数据同步造成的时间浪费,可以做到高并发,存在的主要问题包括双花和影子链攻击等。
(2)网络层改进方案
分片(Sharding)。分片是指将区块链分成不同部分,即多个分片,分片可以并行处理事务,从而提升了单位时间内处理交易的数量。假设网络存在1000个节点,将网络划分成10个分片(每分片100节点)。若1组分片能在一定时间内验证400笔交易,那10组分片便能在同样时间内验证4000笔交易。
举例:超市里有100个收银员,但只有1个收银台,分片后增加9个收银台,每个收银台分别有10个收银员负责结账。
(3)共识层改进方案
包括拜占庭容错(BFT,Byzantine Fault Tolerance)类共识、非BFT类共识和混合共识(Hybird Consensus)。
1)BFT类共识。不同于非BFT类共识的间接达成共识(即参与者并非直接决定共识的具体内容),BFT类共识下,参与者通过投票决定共识内容直接达成共识,在参与者数量不是很多的情况下(一般BFT网络直接参与共识的节点在100个以内),TPS可以达到10000。
非BFT类共识下存在分叉可能,以BTC为例,通常需要6个区块才能以很高的概率确认某个交易被网络确认,而在BFT共识下,达成一致的共识不会被丢弃,因此BFT的响应时间(交易从提出到被确认的时间)也明显优于非BFT类共识。BFT类共识的主要问题在于网络规模、容错率等方面。
2)非BFT类共识。通过降低共识算法复杂度和减少传播节点数量等方式减少验证时间、传播时间及形成共识时间,能够显著提升处理效率。
PoS(Proof of Stake,权益证明)。相比于PoW(Proof of Work,工作量证明),PoS以权益(持有通证数量×通证持有时间)代替算力决定区块记账权,减少了PoW工作量证明过程的能源消耗,在一定程度上解决了可扩展性问题。但是又带来了马太效应、记账激励、无利害关系攻击(Nothing-at-Stake attack)等新的问题。
DPoS(Delegeted Proof of Stake,委托权益证明)。DPoS在PoS的基础上将记账人的角色专业化,通证持有人通过权益选出多个授权代表(EOS有21个“超级节点”,Bitshares有101位代表,理论上单数节点均可),授权代表轮流记账。这种共识下效率得到了明显提升,但是牺牲了非中心化。
3)混合共识。顾名思义,混合共识指结合了多种方式的共识机制,如Casper采用了PoW+PoS,EOS采用了DPoS+BFT。
4.2 链下扩容
第2层扩容,即链下(Off-Chain)扩容,不改变公链基本协议,通过链下在应用层进行改进提升扩展性。第2层扩容允许用户在客观上没有第1层安全的环境中进行交易,安全性由第1层支持,具体包括状态通道(State Channel)、侧链(Side-Chain)、跨链(Cross-Chain)和链下计算(Off-Chain Computation)等方案。
(1)状态通道。状态通道的思路是将部分交易转移到链下,只将通道开启和关闭时的状态记录在区块链上。区块链由结算平台变为清算平台,状态通道内的交易视为结算,在链下实现,需要脱离状态通道进行交易时视作清算,通过区块链实现。这样大大降低了区块链上的交易数量,间接提升了交易处理能力并相应降低了交易手续费。如闪电网络(Lighting Network)和雷电网络(Raiden Network)就是采用了状态通道方案。
状态通道的简化工作流程如下:
1)A和B之间开启状态通道,将通道开放记录在区块链上。
2)通道在任意时间内保持开放,A和B可以进行无限次交易,每次交易更新状态,但不提交到区块链上。
3)A和B想要关闭状态通道时,将最终状态记录在区块链上。
其中第1步和第3步包含区块链上的操作,需要支付交易费并等待确认,第2步完全在链下进行。
(2)侧链
侧链这一概念是相对主链而言的,通过将部分操作转移到侧链以解决主链的性能和功能瓶颈等问题。以Plasma为例,Plasma是运行在根链(ETH主链)上的一系列智能合约。Plasma区块链为树状结构,每个分支为一条子链,一般情况下只将子链区块头的哈希值提交到根链,用于验证区块有效性。当有欺诈证明被提交到根链,区块会回滚并且惩罚区块创建者。由于根链只需要处理子链的少量提交,根链的交易负荷有效降低。Plasma与状态通道的主要区别在于并非所有参与者都要在线更新状态,参与者也不需要把数据提交到根链执行和确认。
举例:法院体系中下级法院可同时处理多起案件,上级法院监督下级法院,当有人质疑下级法院的判决可以上诉。
(3)跨链
相比于侧链,跨链的概念更加广泛,跨链方案的主要目的是实现资产、状态等跨链转移交换,链与链之间不仅仅是主侧的关系。以Cosmos为例,其网络由Hub(枢纽)和Zone(分区)两部分组成,每个分区可以拥有多种通证,分区之间通过枢纽进行交易,因此跨链方案除了能够实现资产、状态的跨链转移交换也可将链上交易转移至链下进行从而减轻链上交易处理压力。
Cosmos基于Tendermint共识,支持交易快速处理。Tendermint共识过程与BFT类共识类似,开始时节点对新一轮的区块进行提议,合格的提议区块在预投票(Prevote)环节获得2/3以上投票则进入预认可(Precommit)环节,再次获得2/3以上的预认可后即获得正式认可(Commit)。
(4)链下计算
链下计算最初针对ETH提出,由于ETH存在区块GasLimit,计算量较大的交易消耗gas较多将导致拥堵(比如单个区块只能打包一笔交易)甚至无法执行(单笔交易消耗gas超过区块GasLimit)。链下计算的思路是将复杂的交易放到链下执行,执行结果提交回链上,减轻链上处理压力。
以Truebit为例,Truebit由求解游戏和验证游戏构成。
求解游戏中,求解者执行智能合约的计算,同时提交押金和问题结果,如果正确,返还押金并获得奖励,如果求解者欺诈,押金将被没收。
是否存在欺诈通过验证游戏解决。验证者在链下对求解者的工作进行检查,如果没有验证者发出质疑,系统将会接受结果,如果出现质疑,由裁判在链上裁定质疑,链上裁定的工作量与链下执行任务的工作量相比微不足道。如果确实存在欺诈,则没收欺诈者的押金,如果不存在欺诈,质疑者将为误报消耗的资源支付一定的费用。
第n层(Layer-n)扩容。在第2层扩容的基础上有人提出了第n层扩容,即第2层扩容的进一步延伸,比如,在从ETH分支的Plasma链的基础上,可以创建更多的Plasma链。
4.3 第0层扩容
第0层扩容通过优化区块链底层数据传输协议提升区块链可扩展性,不改变区块链的上层架构。如bloXroute通过提升节点间区块传播速度,从而在保证非中心化和安全性的基础上显著提升链上可扩展性。该项目通过提供BDN(Blockchain Distribution Network,区块链分布网络)提升节点之间通讯的速度,改善节点同步情况,各节点通过bloXroute提供的对等节点(Peer Node)接入BDN网络,对等节点作为区块链应用程序和BDN的中间网关。
5 总结
随着区块链技术的普及,区块链拥堵现象逐渐显现。一方面,公有区块链出于非中心化与保证网络安全的考虑,限制了区块间隔时间和区块大小,从而在有限时间内只能处理一定数量的交易;另一方面也反映出目前的公链性能还不足以支撑高并发的应用,区块链扩容势在必行。
我们借鉴计算机网络通信体系架构的OSI模型,将区块链逻辑架构划分为三层。现有的扩容方案分别针对不同层级进行改进,分为第0层扩容、链上扩容和链下扩容。
链上扩容方案又包括数据层改进方案、共识层改进方案和网络层改进方案,基本思路是增加区块大小(直接以及变相)或减少区块验证传播时间和形成共识时间。
链下扩容方案主要有状态通道、侧链、跨链和链下计算四种方式,思路均为将部分链上交易转移到链下执行,减轻链上处理压力,提升整体效率。
迄今为止,每一种扩容方案都为改善可扩展性提供了解决思路。目前也已经出现多种方案结合的方式提升可扩展性,如多种共识机制的结合、ETH筹划中的共识机制改进与分片相结合等。这些方案均存在不同程度的优势和劣势,有些方案的技术实现较为复杂,目前落地仍存在难度。针对不同的应用场景与需求,选择适合的区块链扩容技术或是解决目前区块链网络拥堵问题的主要途径。
附注:
因一些原因,本文中的一些名词标注并不是十分精准,主要如:通证、数字通证、数字currency、货币、token、Crowdsale等,读者如有疑问,可来电来函共同探讨。