在过去的几年中,可伸缩性(Scalability,也称为可扩展性) 问题一直是激烈辩论、严格研究和媒体关注的焦点。
这是一个至关重要的问题,因为它可能意味着区块链不适于广泛应用,而仅限于联盟许可的私有网络。在经过对该领域的大量研究之后,人们提出了许多解决方案,下面将详细介绍这些解决方案。
从理论上讲,解决可伸缩性问题的一般方法通常围绕协议级别的强化。例如,通常提到的比特比可伸缩性解决方案是增加其区块大小。其他建议包括链下解决方案,这些解决方案将某些处理任务转移到链下网络,例如链下状态网络。
一般来说,基于上述解决方案,建议可以分为两类:改变区块链运行的基本协议这一思路的链上解决方案(On-Chain Solution) 和利用网络和处理资源以增强区块链的链下解决方案(Off-Chain Solution)。
Miller 等人在其论文 On Scaling Decentralized Blockchains (<<去中心化区块链的规模化思考>>)中提出了另一种解决区块链局限性的方法。该论文的详细网址如下:
https://doi.org/10.1007/978-3-662-533357-4_8
该论文提出,区块链可以划分为被称为平面(Plane) 的许多抽象层。每个平面负责执行特定功能。这些包括网络平面、共识平面、存储平面、视图平面和侧平面。这种抽象允许在每个平面上以结构化的方式分别解决瓶颈和限制。下文将简要介绍每一个平面层,并相应地引用比特币系统。
第一层称为网络平面(Network Plane)。网络平面的关键功能是交易传播。在上述论文中已经确定,在比特币网络中,节点在传播和复制交易之前,首先要进入交易广播阶段,然后是开采区块(挖矿),最后由节点执行交易验证,这种方式导致网络平面未能充分利用网络带宽。
应当指出的是,BIP 152 已经解决了该问题,有关详细信息,可访问以下网址:
https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki
第二层面称为共识平面(Consensus Plane)。该层负责挖矿并达成共识。该层的瓶颈围绕着 PoW 算法的局限性,因为该算法在共识速度和带宽上的增加会损害网络的安全性。
第三层是存储平面(Storage Plane),用于存储帐本。该层围绕每个节点需要保留整个帐本副本的问题,这导致某些效率低下的情况,例如带宽和存储需求的增加。
比特币有一种称为修剪(Pruning) 的方法,该方法允许节点运行而无须将整个区块链保留在其存储中。修剪意味着当比特比节点下载了区块链并对其进行验证后,将删除已经验证的旧数据,这样可以节省存储空间。从存储角度来看,此功能已有重大改进。
第四层是视图平面(View Plane)。由于比特币矿工不需要完整的区块链即可进行操作,因此,研究人员基于这一事实提出了一种优化,并且可以从完整的帐本中构造视图来表示该系统的整个状态,这足以使比特币矿工正常工作。也就是说,视图的实现将消除挖矿节点存储完整区块链的需求。
最后,上述研究论文的作者还提出了侧平面(Side Plane) 的概念。该平面代表脱链交易的概念,其中将使用支付或交易渠道的概念来减轻参与者之间的交易处理,但仍得到主要的比特币区块链的支持。
上述模型可用于以结构化方式描述当前区块链设计中的限制和改进。另外,最近几年研究人员还提出了若干种通用策略,可以解决当前以太坊和比特币等区块链设计的局限性。
这是关于提高区块链性能(扩大交易处理吞吐量)的一项争议最大的提议。就目前而言,比特币每秒只能处理 3~7 笔交易,这是使比特币区块链适应处理微交易的主要抑制因素。比特币中的数据块大小被硬编码为 1 MB,如果增加数据区块大小,那么它可以容纳更多的交易,并且可以缩短确认时间。
有若干个比特币改进提案(Bitcoin Improvement Proposal,BIP) 都支持增加区块大小,例如 BIP 100、BIP 101、 BIP 102、BIP 103 和 BIP 109。
在以太坊中,区块大小不受硬编码的限制,而是由燃料限制来控制。从理论上讲,以太坊中的区块大小没有限制,因为它仅取决于燃料量,燃料量会随着时间的推移而增加。这是可能的,如果在上一个区块中已达到限制,则允许矿工提高后续区块的燃料限制。
比特币 SegWit 通过将见证人数据与交易数据分开来解决这个问题,从而为交易提供更多空间。
比特币的其他改进提案还包括 Bitcoin Unlimited、Bitcoin XT 和比特币现金(Bitcoin Cash)。
注意: 以下网址提供了有关上述改进提案的详细信息: https://www.bitcoinunlimited.info https://bitcoinxt.software https://www.bitcoincash.org |
另一个建议是减少每个区块生成之间的时间。减少区块之间的时间间隔可以更快地生成区块,但由于分叉数的增加,也可能导致安全性降低。
以太坊实现了大约 14 秒的区块生成时间,这是对比特币区块链的重大改进,因为比特币需要每 10 分钟才能生成一个新区块。
在以太坊中,通过使用贪婪最重观察子树(Greedy Heaviest Observed Subtree,GHOST)协议,缓解了由于区块生成之间的时间较短而导致的高孤立区块的问题,从而在确定有效链时还包括了孤立区块(叔区块)。一旦以太坊转移到权益证明,这将变得无关紧要,因为将不需要挖矿并且几乎可以立即完成交易。
这是已提出的另一种方法,用于减少在比特币节点之间传输所需的数据量。可逆布隆查找表(Invertible Bloom Lookup Table,IBLT) 最初是由 Gavin Andresen 提出的,这种方法的主要吸引力在于,它不会导致比特币的硬分叉。
可逆布隆查找表的关键思想是基于一个事实:无须在节点之间转移所有交易。相反,该方法仅传输在同步节点的交易池中尚不可用的资源。这允许节点之间更快的交易池同步,从而提高比特币网络的整体可伸缩性和运行速度。
分片 (Sharding) 不是一项新技术,它已在分布式数据库中使用,以实现可伸缩性,如 MongoDB 和 MySQL。
分片的关键思想是将任务分成多个区块,然后由多个节点处理,这样可以提高吞吐量并减少存储需求。
在区块链中,采用类似的方案,可以将网络状态划分为多个分片。状态通常包括余额、代码、随机数和存储。
分片是在同一网络上运行的区块链的松散耦合分区。因此,需要解决分片间的通信问题,以及对每个分片的历史达成共识的问题。目前这仍是一个开放的研究领域。
这是为加快区块链网络上的交易速度而提出的另一种方法。其基本思想是使用侧通道(Side Channel) 脱离主链进行状态更新和处理交易。一旦状态最终确定,它将被写回到主链,从而使得主区块链不必执行耗时的操作。
状态通道将执行以下 3 个步骤:
(1)区块链状态的一部分被智能合约锁定,确保参与者之间的一致性和业务逻辑的执行。
(2)参与者之间开始链外交易处理和交互,而参与者之间暂时仅更新他们之间的状态。在此步骤中,几乎不需要区块链就可以执行任何数量的交易,这使得交易流程变快,并且是解决区块链可伸缩性问题的最佳方案。当然,也有人对此持有异议,他们认为这不像分片那样是真正的区块链解决方案,但无论如何,其最终结果是产生了一个更快、更轻型化且更健壮的网络,在小额支付网络、IoT 网络和许多其他应用方面都很实用。
(3)一旦达到最终状态,就关闭状态通道,并将最终状态写回到主区块链。在这阶段,区块链的锁定部分也被解锁。
下图显示了此过程:
私有区块链本身会更快,因为它不需要真正的去中心化,并且网络的参与者也不需要挖矿,相反,他们只能验证交易。这可以被认为是解决公共区块链中可伸缩性问题的一种方法。但是,坚持“去中心化” 理念的人士并不认可它是可伸缩性问题的解决方案。此外,应注意的是,私有区块链仅适用于特定区域和设置,例如所有参与者都相互了解的企业环境。
与使用工作量证明相比,基于权益证明算法的区块链速度更快。
侧链(Sidechain) 是遵守侧链协议的所有区块链的统称。侧链旨在实现双向锚定,让某种代币可以在链和链之间交换信息和实现价值的互相 “转移” 。一般来说,侧链泛指跨链技术,它一方面可以帮助主链扩展新功能,另一方面也可以围绕主链搭建起一个涵盖各种业务需求的生态。
侧链允许多个侧链与主区块链一起运行。侧链虽然安全性相对较低,但是速度更快。侧链执行交易,但仍在与主区块链锚定,从而间接改善可伸缩性。
侧链的核心思想被称为双向锚定(Two-Way Peg),它允许将代币从主链转移到侧链,反之亦然。
子链(Subchain) 是 Peter R. Rizun 最近提出的一种相对较新的技术,它主要基于弱区块(Weak Block) 的思想,弱区块在层中创建,直至找到强区块(Strong Block) 为止。
弱区块可以定义为无法通过满足标准网络难度条件来进行开采的区块,但是其已经完成的工作量完全满足另一个较弱的难度目标。除非发现满足标准难度目标的区块,否则矿工可以通过将弱区块彼此叠加来构建子链。
在发现满足标准难度目标的区块之后,子链关闭并成为强区块。这种方法的优点是减少了首次验证交易的等待时间。此技术还可以减少孤立区块的产生机会,并加快交易处理的速度,这也是解决可伸缩性问题的间接方法。
子链不需要任何软分叉或硬分叉来实现,但需要得到社区的认可。
注意: 子链研究论文网址如下: https://www.ledgerjournal.org/index.php/ledger/article/view/40 |
还有其他提高比特币网络可伸缩性的提议,例如将区块链布局从线性顺序模型更改为树链(Tree Chain) 。这棵树基本上是一棵二叉树(Binary Tree),从比特币主链中衍生出来。这种方法类似于侧链实现,无须进行重大协议更改或增加区块大小,它可以提高交易吞吐量。在这种方案中,区块链本身是去中心化的,并分布在网络中,以实向可伸缩性。
此外,不需要挖矿就可以验证树链上的区块。用户可以独立验证区块标头。但是,这种想法还没有进入生产阶段,因此需要进一步研究才能使其真正实用。