当区块链的话题越来越热的时候,我们已经可以感受到的区块链网络的速度已经基本接近极限了。随着用户的增长,区块链的扩展性问题渐渐显露出来。分布式记账的账本越多,需要记账的次数就越多,发展至今的区块链已经迎来的扩展性的瓶颈。

本文的作者Preethi Kasireddy,她在离开硅谷之后便投身区块链领域,现在是一名区块链工程师。由于从早期就开始接触区块链技术,对区块链技术的扩展性问题有着独到见解。她在文中分析了区块链现在面临的扩展性问题,以及相关人士针对此问题提出的一些对策。

Preethi Kasireddy

最早的比特币白皮书发布于2008年,区块链技术蕴含的可能性让我非常兴奋不已。现在,过去只在人们理想中出现过的非中央集权的数字货币正在渐渐成为主流,然而数字加密货币仅仅是区块链技术应用的一个方面。区块链技术蕴含的巨大潜力,正等待着我们去进一步发掘。

然而,当区块链初期的爱好者和投资者们开始构筑区块链社区的时候,我们要看到现有的“碎片”完全不足以完成梦想的拼图。区块链的扩展性问题是阻碍其发展的一个重要因素,它在很大程度上限制了区块链规模的进一步扩大。

为什么区块链的扩展性存在问题

现在,无论是比特币、以太坊还是其他所有基于区块链技术的加密货币都在很大程度上受到了扩展性的限制。

区块链技术最大的特征就是去中心化,这就要求网络中的所有账本都需要处理记账流程。分布式记账的安全性高,误操作率低,还具有政治中立性和正确性。但是区块链技术在拥抱了这些特性的同时,牺牲掉了扩展性。区块链的终端数量不可能超过账本总数。而且,随着的账本数量的增长,交互延迟会呈指数式增长,也就是说区块链网络中的账本越多延迟就会越高。

在传统的数据库模式下,我们可以通过增加服务器数量、提高服务器性能来提高“中心”的总运算能力来应对用户数量的增长。但是在所有交易都需要进行验证的去中心化分布式记账模式下,想要改善整体的运算速度就必须增加所有终端的运算性能,这显然非常困难。

最终,在区块链的规模发展到一定程度时,我们不得不做出妥协。我们必须在低扩展度的去中心化和高扩展度的中央集权中做出权衡。因为解决这个问题唯一可行的方式就是分割区块链,只让一部分的账本处理交易的数据,而其他账本只负责将这些处理过的数据进行拷贝记录。但是这种做法说起来简单,做起来却非常困难。

首先,由于并不是所有的账本都对所有的交易进行记账处理,为了保证区块链整体的安全,必须有一套在统计学上具有说服力且高效的记账任务分配制度。

其次,这套制度还必须能够保证数据的可用性。因为若只有一部账本负责记账,当这些账本发生意外情况时,整个区块链都可能会受到影响。这时如果其他的验证者在账本记上了不同的内容,一个区块链就可能发展出两个数据不同的区块。恶意的网络攻击、停电、账本离线等都可能引起这种情况的发生。

最后,这些分配到记账任务的账本必须对数据进行并列处理。但是因为区块链模式含有很多不能同时进行记账的物理性限制(比如串行接口),想要实现这点也非常困难。很多时候我们必须制定相关的制度,在并列新与可行性之间取得平衡。

从数字看区块链的扩展性问题

以太坊理论上的交易处理能力是每秒1000次,但是因为受到gas现实,实际的交易速度远远没有达到这个程度。现在各个区块平均有670万gas。

在以太坊中,gas既是执行交易计算的矿工的报酬,又是计算量的尺度。各种交易操作都要消耗一定量的gas。每个区块中的gas都具有上限,而gas的上限决定了区块内可以进行的交易数量。

和将区块大小写死在协议中的比特币相比,以太坊的gas限制虽然可以根据矿工工作情况进行动态设定,但实质上相差无几。比特币交易的理论极限是每秒4000次,而实际上小规模的交易处理速度仅仅是每秒7次,复杂的交易的更是只有每秒3次。

我为以太坊设计了新协议涉及并进行了尝试,并且第一时间接触到了区块链扩张性这一未来课题。我和其他的相关人士针对这一问题进行大量的研究与议论,还进行了很多有意思的实验。在下面的文章中,我会为介绍我们提出的解决方案。

不过非常遗憾的是,这些方案虽然各有所长,而且都具有积极意义,但是它们都不能从根本上彻底解决这一问题。

对策1:分离见证

比特币交易的流程包括输入和输出两个部分。在输入部分,需要输入的是上次交易的详情和证明持币人拥有相当金额的脚本(scriptSig)。在输出部分,输出的是交易金额和输出脚本(ScriptPubKey)。

在这些内容之中,scriptSig所占的空间最大,约占60~70%,且仅在验证时有用。分离见证通过将scriptSig分离出来另行发送,使交易文件的大小得到精简。理论上来看,分离见证方式可以使单位时间内的交易量增加70%。

对策2:2M区块

比特币的用户中有一部分支持分离见证,另一部分则支持将1M的区块容量提升到2M。这种意见的理论基础更加简单,区块容量增大就能直接带来单位时间内可处理交易量的提高。

这一增加区块容量的计划一直都是比特币团队重点讨论研究的对象,特别是从2014年之后,这一课题受到了更多的注目。

对策3:链外状态信道(off-chain state channel)

链外状态信道是将原本要在区块链上的进行的步骤剥离出来的,在链外进行处理的技术。通过将信号加密,该技术既可以降低参与者的风险,又可以大幅度提高交易速度。它的工作过流程有以下三步。

第一步,对一部分区块链的状态通过多重数字签名或智能合约等手段进行锁定。规定被锁定的特定内容只有在参与者全员同意的情况下才能进行更新。

第二步,交易参与者进行交易的时候,不对被锁定的区块链内容进行操作,仅通过加密签名更新的交易数据。然后再使用全员同意的更新后的数据对被锁定的内容进行更新。

第三步,更新完成后,交易参与者的新数据重新回到区块链上,区块链关闭状态信道。

上述三个步骤中包含的区块链操作有网络公开,手续费支付,以及最终确认。但是其中第二步的操作完全不在区块链上进行,所以可以不受区块链交易容量的限制,进行无限制的更新。这样一来,区块链就成为纯粹的结算工具,只负责记录一连串交易的最终结果记录,工作负担得到了大幅度减轻。

这种方式不仅能提高区块链整体的交易能力,还能在提高交易速度和减少交易手续费方面起到非常有效的作用。具体来说,由于绝大部分交易步骤都在链外完成,且这些链外步骤的参与者只有交易双方,不需要通过网络进行多余的确认工作,交易可以即时完成。同时,由于需要在链上进行的工作被大幅度简化,交易的手续费也可以得到缩减。

这种模式有很多种不同的实际运用方法,比如闪电网络。闪电网络就是利用智能合约来实现链外状态信道交易的分散型网络服务技术。闪电网络最初是为比特币交易开发出的,但是在开发过程中人们发现,它还可以完成不同区块链间的交易。

对策4:分片处理(Sharding)

区块链的分片处理与软件的分片处理非常相似。在电脑上,我们会对硬盘进行分区,然后将数据储存在不同的分区之中,这样整体的负担就可以分散到各个分区上。同理,区块链的分片处理就是将区块链成体分成不同的部分,区块链各的各个部分会被记录在网络上的不同账本上。

单一分片图

网络上发生的所有交易都会被发送给相应的不同的账本。各个分片都只处理区块链整体的极小一部分,而且是同时处理。为了保证各个分片间的联系,需要一套信息传递结构。

信息传递结构的类型有很多,以太币使用的“收据”结构就是其中之一。当分片内产生交易时,该分片可以更新自己的状态,然后生成“收据”。其他的分片可以通过“收据”看到该分片的状态改变,但是无法对其进行变更。

想要对区块链进行分片处理,就必须在保证高安全度的前提下,使每个账本只具有记录处理一部分交易的权限。

这是因为区块链的构造是建立在网络上的各个账本互不信任的前提下的。所以就算交易由不同的电脑进行处理,最终也必须通过整体的同意。因为账本间互不信任,分片A的账本仅仅把“发生了交易”的信息传递给账本B是远远不够的,必须要有某种形式的证明存在。从安全的角度上来讲,这个证明不仅是“发生了交易”的证明,还是分片A没有受到网络攻击的证明。

分片处理的另一难点是,由于区块链上的交易依赖的是区块链的上一个状态,而上一个状态的来源的可以是区块链中的任意一个部分。同时,为了缓和并列的各个分块的竞争状态,必须要有出具“伪”证明的方法。

对策5:Plasma

Plasma是最近才被提出的改善区块链扩展性问题的新方法。Plasma是根区块链上的一系列合约。根区块链使用“Flow-de-proof”对链上的状态进行限制。

区块链整体呈树状,各个分支都拥有独自的区块链历史。子链被称为“等离子区块链”。各个区块链形成了区块中的新链。

Plasma区块链并没有明示根链上的区块链内容,而是只将块头的hash委托给根链处理,这种做法可以判断区块是否有效。当根链判断出现了欺诈证明时,数据就会回滚,同时还会给予欺诈者相应的处罚。换言之,交易参与者仅仅是向根链提出数据,根链则做出最终的判断。这样根链需要处理的数据量将会大幅度减少,单位时间内可进行的计算量可以得到很大程度的提高。

由于Plasma模式数据指只向需要验证特定状态的人发送,所有账本不需要监视所有的链,这使契约执行的扩展性得到了提高。而且在特定的链遭到攻击时,参与者也可以迅速从子链退出,回归根链。

Plasma在某种角度上链外状态信道(例如闪电网络)有着很多相似之处,主要的不同点是不需要所有的参加者必须上线才能进行状态更新,而且交易的参与者在确认交易的时候也不需要向根链发送数据。Plasma可以让根链以最低的参与量进行状态更新。

现在来看,这种解决方法的形式非常复杂,具体的内容有待今后继续发掘。

对策6:链外计算

TrueBit就是使用链外计算,使以太币的智能合约扩展性得到增强的案例。TrueBit的基础与链外状态信道相同,都是将繁重的工作放在链外进行处理。这样做有着非常重要的意义。

参与数据处理的不是所有的账本,而是网络上的特定参与者(求解者),他们会根据智能合约进行计算,并支付一定量的定金。如果求解者的计算正确,可以获得相应的报酬,定金以可以一并退还。如果计算错误,求解者将会无法取回定金。这是一种用“验证游戏”来解决区块链上的纠纷的方法。

在网络中,验证者负责通过区块链对求解者的工作结果进行验证。如果验证者没有发出错误通知,系统就会认为计算是正确的。反之如果验证者质疑求解者的结算结果,“验证游戏”会通过多个回合的验证,让区块链来解决纠纷。网络上的具有一定计算能力的裁决者会对纠纷进行裁决,系统会用实际需要的区块链和工作结果进行对比。

“验证游戏”的最后,如果认定求解者存在不正当行为,系统将会对其进行处罚。如果验证者的质疑有误,则需要为验证消耗的资源支付相应的费用。

简单来说,在这个协定中,任何人都可以提出计算任务,其他的任何人在完成了计算任务的时候都可以获得报酬,系统通过对正确计算的奖励来保证结果的正确性。TruBit把计算和验证的步骤放在以太坊区块链以外进行,不受以太坊的gas的限制,计算拥有了更大的扩展性。

其他对策

其他解决区块链扩展性问题的方案还有很多。其中有一些解决办法并不是以此为直接目的的,它们再解决其他问题的同时,间接地改善了区块链扩展性的问题。

PoS

与PoW相同,PoS是为了防止双重支付而开发出的区块链安全保障模式。在传统模式的区块链中,矿工需要用数学计算的结果来换取报酬,这也是区块链维持完整性的方法。因此,计算机的CPU能力对交易验证有着很大的影响。可以说CPU的能力越强,对网络的影响力就越大。PoS中相关利益者不是依据计算能力,而是依据“美元”(以太币是依据ether)进行投票。

区块链会追踪被称为“验证器”的特定验证账本,为了成为验证器账本,需要支付一定的保证金。如果验证者的结算结果被认证明是“无效”的,那么预先支付的保证金和验证器资格会同时消失。反之,如果验证者的计算结果正确,可以获得相应的手续费,保证金也会一并退还。也就是说,验证者在计算结果上堵上了自己的保证金和验证者资格,如果答案与其他验证者的不一致,这些都会失去。

从某种意义上来说,PoS催生了分片处理,而后者如上文所述,对区块链的扩展性提升有重要的意义。

区块链租赁

区块链租赁是以太坊特有的解决方案之一。区块链租赁的目的是缩短交易时间,使网络上的数据量减少。这一方式需要以太坊的用户为计算步骤、内存、交易、永久空间支付费用。虽然为这些资源支付费用基本都可以获得相应的奖励,但是为了让空间成为区块中的永久部分,空间部分的奖励方式与其他资源不同(区块链租赁将空间成本定义为“打工×时间”)。

分散储存设备

另一种让网络保持轻松状态的方法就是Swarm等使用的分散储存设备服务。Swarm使用以太坊的对等网络文件共有协议,从与以太坊连接的swarm账本的主区块链上收集并保存应用代码与数据,这些数据可以和区块链上的数据进行交换。这样一来,区块链就不用再储存所的账本信息,只需记录在近期被频繁请求的数据就可以了,其他使用频率较低的数据可以通过Swarm保存在云盘中。

 

结论

不得不承认,区块链的扩展性问题是一个非常复杂的问题。本文主要介绍了区块链的扩展性为什么很重要,以及要解决这一问题应当从哪些角度入手。

本文中列出的这些方法并不是所有的解决方法。随着相关研究的进一步深入,我也会对这一话题进行更深一步的跟进。现在并没有什么完美的方法可以从根本上解决区块链的扩展性问题,但是这些方法给了我们新的思考角度。但是我相信,在未来一些方法组合可以解决这些问题,区块链技术也终会实现进一步的飞跃式发展。