可扩展性难题?区块链不可能三角?这篇论文可能有解决之道

背景

The block chain scalability trilemma”(可扩展性难题)-是由以太坊创始人Vitalik Buterin创造的词语,国内亦被翻译为“区块链不可能三角”问题、“三元悖论”,是指加密项目在决定如何优化其自身区块链的基础架构时必须进行的权衡。用简单的话来说,区块链的设计无法同时兼顾性能、安全、去中心化这三项要求,只能满足其中两项而牺牲另外一项。因此,不同的区块链系统会根据特定的应用来进行权衡。例如:比特币和以太坊两大公有链设计成去中心化和安全的结构,性能问题一直被人们所诟病。而EOS追求区块链的可扩展性和安全性,降低了去中心化的程度。

区块链的三大属性

  • 去中心化。网络中的数据分布在不同的节点同时存储,因此,区块链系统具有抗审查性和民主性。这是区块链技术的核心和本质。
  • 可扩展性。对于主流的公有链来说,它每秒必须能够处理数千笔交易。随着节点的增加,所有节点上的分类必须同时更新,可扩展性成为挑战。
  • 安全。为了使区块链上的数据收到信任,应该保护数据不被泄露、丢失或者修改。区块链应该是不变的,并且能够抵抗黑客攻击(例如51% attack、Sybil attack、DDOS等)。这是一个基本而必要的要求。

论文介绍

今天给大家解读一篇最新预发表的关于解决区块链不可能三角问题的理论研究论文——Scaling Blockchains Without Giving up Decentralization and Security,作者为:Gianmaria Del Monte等,原文地址:https://arxiv.org/pdf/2005.06665.pdf。论文介绍了一种新的区块链架构,在作者的研究证明下,这种架构能够随着区块链中的节点增加,区块链的性能同时也能得到扩展。因此,提高可扩展性的同时,也无需在安全性和去中心化上进行权衡取舍。所有的区块链研究者都发现主流公链的瓶颈——可扩展性,大量的文献努力提高一致性算法的可扩展性。比如分片网络,通过将整个网络划分为若干个较小的网络来提高性能,但这种分片导致网络节点比整个网络少,这种形式降低了去中心化和安全性,更有可能分片之间的消息切换也带来性能的挑战。 因此,该文论从理论上提出一种新的区块链架构,作者通过基于随机委员会的共识算法作为基础,不同的节点动态分担负载的两种方式依此来提高区块链的可扩展性。在作者的解决方案中,交易是在管道中处理的。 管道的每个阶段均由几个委员会并行执行,该架构不依赖分片并在不牺牲去中心化和安全性的情况下实现了可扩展性。

可扩展区块链架构

作者为了简化研究,主要关注实现纯加密货币的简单区块链模型。 换句话说,每个地址(或帐户)都与一个非负余额的钱包相关联。创建(或挖掘)新块时,将确认事务。 挖掘新区块需要做的工作主要有:

  1. 选择一组候选交易
  2. 对它们进行排序
  3. 在将交易应用于先前状态时,验证是否满足某些共识规则。

虽然实际上,共识规则可能很复杂,但是在作者的简化模型中,共识规则可以简化为保持非负余额。针对上述共识问题,作者提出了两个主要实现思想:

  1. 委员会(Committees):进行多个委员会同时工作。 他们共同执行验证和确认交易以及计算新区块所需的计算。 为简单起见,假定所有委员会的规模均相等。 它们的大小是固定的,并且在网络中的节点数更改时不会更改。 委员会成员可能是固定的,也可能会定期更改以提高安全性。
  2. 管道(Pipelining):考虑验证和确认事务所需的计算,然后计算要包含在新块中的新状态根哈希。 这项任务所需的工作量显然与负载成比例。 从规模上讲,重要的是将这种计算分布在多个委员会中。 因此,作者引入了一个分阶段执行计算的管道。 每个阶段均由一个或多个委员会执行, 同时采用并行方法将计算结果进一步分布到多个委员会中。

#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_第1张图片

上图就是作者提出的区块链整个架构,从左向右向我们展示交易从创建,再到确认和验证的整个流程。任何节点都可以创建一笔交易。新的候选交易应附带所涉及帐户的余额以及与上一轮有关的相应完整性证明。 这可以从存储节点获得。 候选交易不会广播到网络中,但是会发送到有限数量的节点。确认委员会(Confirmation Committes, CC)对必须包含在区块中的一组交易进行验证。 用

#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_可扩展性_02
表示每个不同的CC,其中
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_解决方案_03
,其中
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_数据_04
是确认委员会的数量。 用
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_解决方案_05
打算表示在第
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_并行执行_06
中运行的第
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_可扩展性_07
确认委员会。 创建新交易
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_08
,其中
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_09
其中
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_10
是其余额由
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_08
收取的帐户。 比如在第
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_并行执行_06
轮开始之前
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_13
收到
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_08
,因此
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_13
可以在第
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_并行执行_06
轮中对其进行处理。 我们说
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_13
负责该交易。执行过程:

  1. #私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_可扩展性_18
    负责一笔交易,获取该笔交易相关的
    #私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_并行执行_19
    余额状态,以检查
    #私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_解决方案_20
    是否符合非负余额规则。不负责规则的交易将被舍弃。
  2. 当符合共识规则,则将该已经确认的交易打包进默克尔树
  3. 同时,并不需要所有的节点进行该笔交易的存储,只需将该区块链状态存入进存储节点,从而达成动态分担负载的功能。

下图展示了一个执行带有四个阶段的管道的示例。 在图中,可以看到对

#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_区块链_13
#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_并行执行_22
的输入。

#私藏项目实操分享# 提高区块链的可扩展性并不需要牺牲安全和去中心化_第2张图片

论文总结

论文对该可扩展架构进行了相应的证明:

去中心化。节点随机分配给每个委员会,而且可能会周期性地更改它们,从而不会影响去中心化。但是作者认为该方法独立于委员会的选择方式,可以使用共享的随机方法或使用可验证随机函数来进行选择。

安全性。区块链的系统安全性都基于共识算法的安全性,共识算法由组成委员会的一组受限节点运行。 在这种情况下,许多破坏都要求做坏者控制大多数委员会成员。 但是,当委员会随机选择时,随着节点数量的增加,这变得更加困难。 如果共识算法足够健壮,则几个委员会的存在对安全性的影响可以忽略不计。

可扩展性。论文在众多并行执行委员会上分担下一个区块的处理负载,从而可能覆盖所有节点,如果存在损害扩展性的情况下避免委员会的通信。 作者提供了该方法的可扩展性及其正确性的形式证明。 作者认为该架构可以被视为解决区块链可扩展性难题的一种解决方案。从理论上讲,应该更好地研究委员会间的通信和同步,以实现在实践中高效且可用的解决方案。 从实践的角度来看,需要具有实际参数的实验或仿真。