一文读懂区块链扩容方案全解

Buidler DAO
2022年8月12日 16:32
收藏
链上扩容方案,指的是通过对于原链的设计进行更改,以达到扩容效果的方案。区块链技术可以拆成六大层级结构:共识层、网络层、数据层、激励层、合约层、应用层。其中前三个是区块链的底层基础,也是链上扩容方案操作的目标。

作者:Chasey,Buidler DAO

 

每一条区块链,都面临着由去中心化、安全性、可扩展性组成的不可能三角。其中,去中心化是区块链技术最大的优势,需要优先保障;而若是想建立长久、可持续的生态,安全性也是不得不做到极致的要素。这就造成了当前公链普遍可扩展性低下的现状。

image

图源:这么吃藕一看就是自己画的

如何在平衡去中心化与安全性的前提下,提升区块链的吞吐量=扩容,是急需解决的问题。近年来,ETH2.0作为以太坊的扩容愿景,即使经历了多次跳票,仍在世界范围内饱受关注、备受期待。由此也能看出,扩容已经成为了公链用户的群体需求,吞吐量也是在对于一条区块链进行分析、估值时必不可少的指标之一。本文意在提供一个当前区块链扩容方案的全体画像,帮助读者更清晰地理解扩容方案的基础理念。

 

为什么需要扩容

 

在开始讨论具体的扩容方案之前,我们先来梳理一下扩容的作用及其必要性。

区块链上的节点分为全节点和轻节点。为了保证交易数据的完整性和安全性,全节点需要储存整个区块链的交易数据;而轻节点仅需要储存 Block Header,通过向全节点请求相应的 Body 来验证交易。节点的数量越多,则该链的去中心化程度越强,同时为了达成共识需要处理的工作量也就越多,对于吞吐量的负面影响也就越大。此外,如图所示,比特币的区块容量上限为1MB,而以太坊也因为设置了 Gas Limit(防止 DDoS 攻击),导致区块大小的上限被控制在了130KB左右。

image

image

图源:Blockchair

由于区块大小有限,矿工无法将所有交易都放到同一区块中进行打包,因此他们更倾向于按照预期收益的多少(Gas Price)对交易进行排序,并按照价格从高到低有选择性地打包,以确保获得最高的收益。这就导致了 Gas Price 较低的交易延迟时间过长。如下图所示,以太坊上每分钟约有17万笔交易在等待验证。

image

图源:Etherscan

当前,比特币的吞吐量低至7TPS (Transaction-per-second),而以太坊的吞吐量也被限制在了15~20TPS. 为了方便理解,我们将其与传统线上交易方式的吞吐量相比:PayPal 的交易处理速度在200TPS 左右,而 VISA 约为1700TPS,差距颇大。

此外,不断增加的交易数据对于维护区块链所需的存储能力也带来了压力。目前,比特币的储存量已超过400GB,yoy17.4%;而以太坊则将近900GB,平均增速64.30%。

image

image  

图源:Blockchair

如图所示,每天发生在以太坊上的交易数量超过1,250,000笔,并且随着公链生态的逐渐普及,这个数字在未来会越来越大,吞吐量的压力也越来越大,扩容刻不容缓。

image

图源:YChart

读到这里,我们已经了解了扩容的重要性,是时候一起看看究竟可以通过哪些手段来实现扩容了。

 

扩容方案分类

 

下图为 Handbook of Research on Blockchain Technology (2020) 一书中的插图。在本文中,我们将着眼于图中"Write Performance"这一部分,从链上与链下两个角度讲解当前已经出现的扩容方案。

image

图源:Handbook of Research on Blockchain Technology (2020)

链上扩容方案

链上扩容方案,指的是通过对于原链的设计进行更改,以达到扩容效果的方案。区块链技术可以拆成六大层级结构:共识层、网络层、数据层、激励层、合约层、应用层。其中前三个是区块链的底层基础,也是链上扩容方案操作的目标。

1. 共识层 = BFT;中本聪;混合

共识机制,指的是区块链中各个节点对于数据的可用性以及账本状态的一致性达成共识的过程。由于共识机制完全决定了从下载数据到打包出块的整个流程,因此节点对于交易的验证效率严重依赖于共识机制的设计。当前主流的共识机制可以分为BFT类共识、中本聪共识以及混合共识。

  • BFT类共识

    提到BFT计算(Byzantine Fault-Tolerant),需要先讲一下已是老生常谈的拜占庭将军问题:拜占庭帝国(东罗马帝国)致力于开疆扩土,在一场战争中,他们试图派出10支军队分开包围敌人,该敌人最多能够抵御5支拜占庭军队。由于各军队站位较远,各军队的将军们需要通过给其他军队发送进攻/撤退的信号来达成行动共识(算上自己在内,如果收到了6个及以上的进攻信号,则进攻;反之则撤退)。将军们所面临的最大问题是:如果某个军队中出现了叛徒,故意发送错误信号,该怎么办?在区块链中,这个问题类似于:区块链中的各个节点通过向其他节点发送信息的方式达成共识,如果网络中出现了叛徒节点(拜占庭节点),发送了错误的信息,该怎么办?

    最为出名的 BFT 类共识是 PBFT,感兴趣的可以自行查看参考文献[17],表述得非常简单易懂,因此在这里不再赘述。使用此类共识,需要保证各个正常运作的节点使用相同的随机数与区块算法进行计算,并生成区块。当原账本相同时,计算结果相同,生成后的账本不可篡改、永久公开。由于每个节点都需要与其他所有节点同步共识,在节点数量较少时,可以在保证安全性的同时实现极高的吞吐量,随着节点的数量增加,需要处理的数据量也会相应增加,导致处理交易的速度大幅下降。

  • 中本聪共识

    中本聪共识主要有 Proof of Work 工作量证明和 Proof of Stake 权益证明。在这部分我们将附带着 PoS 的变种 DPoS,探讨各个共识机制在吞吐量方面的表现。

    PoW:算力决定记账权(同时也是投票权),不需要设置机制对于节点进行授权。在吞吐量方面,其最大的问题在于难度高导致的出块慢;并且为了保证账本的一致性,还需要故意设置打包延迟。这里的延迟指的是,矿工打包区块后,需要再做至少一个区块的工作量证明,才能确认候选区块。

    PoS:持币获取记账权和投票权(分开),打包节点打包候选区块后进行广播,并由投票节点对于候选区块进行投票以决定是否将其加入区块链,投票采用多数制。PoS 相较于 PoW,由于引入了投票机制,牺牲了部分安全性;而在吞吐量方面,由于打包速度快,并且没有等待时间,因此延迟极低。

    DPoS:持币获取投票权,选出董事会负责记账。在 PoS 之上牺牲了部分去中心化程度,拥有比 PoS 更高的吞吐量。

  • 混合共识

    顾名思义,混合共识指的是结合了不同共识机制优点的共识。如在主链使用 PoW 确保安全的同时在侧链使用 PoS 保证吞吐量;结合 PoS 和 PBFT 以降节点数量减少到恒定值,从而再次提升吞吐量,等。

2. 数据层 = 扩块;缩数据;DAG

除了共识机制,每个区块中可以打包的交易数量也与交易的吞吐量密切相关。我们可以通过扩大区块容量、缩小交易数据的方式提升区块链吞吐,或是直接采用 DAG 的数据结构来处理交易。

  • 放宽/取消区块大小限制

    扩大区块容量,可以使得每个区块中打包进更多笔交易数据,但是同时会使区块广播的时间增加,提升网络延迟,从而增加硬分叉的风险。

  • 缩小区块中储存的数据

    此类方案中,较为出名的有 Segwit 隔离见证:将区块信息中签名的部分以及用于计算交易 ID 的数据进行单独管理,从而压缩60%的交易信息量。作为缓解容量问题的辅助方案较为有效,但是不能解决本质问题。

  • DAG(Directed Acyclic Graph 有向无环图)

    如下图所示,区块链采用链式结构,其区块头中只能包含一个区块的哈希值;DAG 结构下的区块头中可以包含多个区块的哈希值;区块链中新的区块会被添加到链的最后端,不能从链中间续写;DAG 可以从之前的区块续写。

image

图源:Russian Blogs

区块链是同步记账,节点需要在同一时间记录同样的信息;DAG 是异步记账,同一时间内不同的节点可以记录不同的信息。因此 DAG 单位时间内可以打包的交易数量更多,TPS 极高。基于 DAG 的协议目前主要有 SPECTRE 和 PHANTOM 两种。

SPECTRE 协议通过投票的方式抵御攻击

如下图所示,当区块 X 和区块 Y 中所记录的内容相冲突时,记录在区块 X 之后的区块6~8会记录下与区块 X 相同的信息 X;区块9~11会记录下与区块 Y 相同的信息 Y;区块12同时可以回溯到区块 X 和区块 Y,因此它会记录下与上一轮投票相同的结果(虚线内),也就是 X;区块1~5会根据记录着自己区块信息的区块的投票情况进行投票,由于记录着 X 的区块较多,1~5选择投票给区块 X。

由于恶意区块直到开始攻击之前都不会与诚实区块产生关联,使用 SPECTRE 协议时,只要诚实的节点更多,冲突的交易就能够被排除。其问题在于只适用于一般交易,由于没办法对于全部交易按照时间进行线性排序,因此无法运行智能合约。而 PHANTOM 协议可以解决这个问题。

image

图源:An overview of SPECTRE

PHANTOM 协议会先通过投票筛选出诚实区块,并对诚实区块进行拓扑排序

在了解其筛选方式前,需要先理解分叉系数k=可以分叉的个数(比如区块链中不允许分叉,因此k为0)和 GHOSTDAG 算法=通过追溯历史区块,选择链条最长的一条作为主链,形成子集 S,默认该集合中的区块均为诚实区块。此后,针对每一个区块,验证与其没有联系的区块和子集 S 的交集是否小于等于 k,如果小于等于 k,则判断为诚实区块,加入子集 S.

image

图源:An overview of PHANTOM

以下图(k=3)举例说明:假设我们现在需要判断区块I的真实性,由区块I衍生出的区块分别有区块K、M、O、P、R,通过区块I可以追溯到的区块分别有区块C、D、原始区块。这时,与区块I毫不相关的区块分别是区块B、E、F、H、J、L、N、Q、S、T、U,其中与子集S有交集的有区块B、F、J,等于k,因此判断区块I为诚实区块。

image

图源:PHANTOM: A Scalable BlockDAG Protocol

排序方式使用拓扑排序:首先将没有可追溯区块的块作为原始区块0,然后在除去区块0之外的区块中继续选择没有可追溯区块的块作为区块1,如此循环。

image

图源:Kappo's Blog

目前使用了 DAG 结构的项目中心化程度较高,因此这里不再做更深入的讨论。对于 DAG 感兴趣的家人可以搜索 DAGLabs 进行学习。

3. 网络层 = 分片

分片指的是将账本拆分成若干个部分,分别由不同的节点集团进行管理。通过实施状态分片,每个节点需要处理的交易数据变少,不仅可以提升交易处理速度,并且对于节点的性能需求也会相对降低,使得参与挖矿的门槛降低,去中心化程度加强。

image

图源:Why sharding is great: demystifying the technical properties

  • Sharding 1.0

    对于状态分片最初的想法是:将n=64个数据碎片 blob 添加到信标链中,每个周期(epoch)内有n个验证节点广播自己的数据碎片 blob,并由委员会对于数据的真实性与可用性进行确认,确认完成后的 blob 被加入执行链。每经过一个 epoch 重新分配各个分片链所对应的验证者的机制,导致了分片链切换后数据同步不及时的问题,会造成延迟。此外,这种方式还面临着四个问题:无法保证信标链上的每个区块中写入了全部分片需要的交易数据;无法对于全部分片进行全局检查;验证节点可能导致 liveness failure;结合 PoS,只要钱够多,控制的节点够多,更容易控制委员会。在 ETH 发行率降低、验证集中化的背景下,此机制为 MEV 提供了机会。

    image

  • DankSharding

    为了规避 Sharding1.0 中的风险,DankSharding 提出了两个要点:所有 blob 都将被加入信标块;每个委员会的成员只对碎片数据的一个子集进行处理,所有信标数据和分片数据可以一起检查。

    具体来说,Danksharding 的核心机制分为三部分:

    数据可用性抽样:编码者使用 RS 编码进行冗余传输,减少节点的验证压力,同时采用 KZG 多项式承诺来保证编码正确。在此之上,通过将数据块的分片再次进行分片、并在不同数据块分片间重组的方式对 RS 编码进行二位扩展,降低全节点数据重构的门槛,从而降低中心化程度;

    出块者-打包者分离:将全节点分成出块者和打包者两种角色,低配置的出块者负责去中心化选择打包者并获得打包者的竞价,具备高配置高性能的打包者则通过竞价获取打包记账权,从而解决 MEV 的价值分配问题;

    抗审查清单:出块者指定合法的交易列表,打包者证明自己看到了列表并将列表中的交易包含在打包中,以此防止打包者故意忽略合法的交易。

    image

  • Proto-Danksharding/EIP-4844

    DankSharding 的机制实现起来较为困难,作为阶段性的方案,EIP-4844出现了。EIP-4844中引入了具有时效性的 blob,类似于移动硬盘,在被写入主网后,blob 只存在一段时间,随即被销毁。在 EIP-4844的设计中,同样引入了 KZG 多项式承诺,以确保后续 DankSharding 实装时可以向前兼容。

 

链下扩容方案

 

链下扩容方案,指的是在不改变原链构造的前提下,通过在主网之外进行交易处理,来减轻主网的处理压力。主要有状态通道、链下计算、多链三种类型,为了方便理解,我们将侧链和子链全都归在了多链方案之中。

  1.  状态通道

状态通道指的是,在特定参与者之间通过多签等方式锁定区块链状态的一部分(打开通道)->针对通道中出现的状态转换,在所有参与者的同意下,在链下更新状态->确认最终状态,并向主链广播。由于只需要广播最终状态,使用状态通道处理琐碎的相互交易可以有效减少主链上广播的交易数量,降低交易延迟。此外,每个参与者可以通过中介与其他没有打开通道的参与者互动:Alice 和 Bob 之间有通道,Bob 和 Carol 之间有通道,则 Alice 可以在不另外开启通道的情况下,通过 Bob 与Carol 互动。状态通道透明度低,通常只适用于在特定参与者之间发生的频繁交易。

image

图源:EthHub

2. 链下计算

链下计算,意在通过将验证之外的功能全部移至链下的方式提升链上吞吐量。其主要需要保证安全性与隐私性,具体的操作方式可以分为可验证的链下计算、“飞地”型链下计算、链下安全多方计算和激励驱动型链下计算四种。

image

图源:Blockchain-Based Reputation Systems: Implementation Challenges and Mitigation

  • 可验证的链下计算:zk-SNARKs,Bulletproofs,zk-STARKs

    链下的证明者将链下的计算结果上链,并由链上的验证者进行检验。

  • “飞地”型链下计算:Enigma,Ekiden

    在区块链节点上创建可信执行环境(Trusted Execution Environment,TEE)并预设数据接口进行计算。TEE 充当黑箱,可以在有效保护数据隐私的同时实现明文数据运算,提升计算效率。

  • 链下安全多方计算

    将数据拆分并分发给各个节点,节点根据当前区块链的状态以及各自获得的数据计算状态变化,将各个节点计算出的数据结合,即可获得完整的计算后数据。节点需要计算的数据更少,效率更高。

  • 激励驱动型链下计算

    求解者对于交易数据进行计算,在公布结果的同时质押保证金;验证者对于求解者的结果进行验算,如果发现错误,则可以质押保证金并发起链上仲裁,正确的一方将获得用户支付的手续费。

 3. 外链 = 侧链;Rollup

外链指的是,在主链之外创建一条新的区块链,通过跨链将交易处理的一部分(如计算、存储)转移到新的区块链上执行,并将结果广播给主链,从而提升主链的处理效率。

  • 侧链

    侧链是完全独立于主链的区块链,其使用锁定+铸造/销毁的方式将资产从主链投影至侧链,并完全在侧链上完成交易处理与储存的整个流程。侧链的安全性完全依靠于其自身的节点以及共识机制。分为锚定式侧链与联邦侧链(在主链和侧链间增加多签地址用于验证交易,以降低延迟)两种。

    image

图源:EthHub

  • Rollup

    Rollup 与侧链的不同是,其仅在子链上处理交易,数据仍储存在主网上,因此可以在提升交易处理效率的同时享受主网的数据安全性。Rollup 按照数据可用性和交易验证方式可以分成四种:

    欺诈证明(检举无效交易)+ 链下DA(安全性-,扩容效果+)= Plasma

    Plasma 需要在主链上创建一个写入了子链哈希状态转换规则的智能合约,以此连接主链和子链(和孙子链、重孙链...)其扩容机制与状态通道类似,通过减少主链需要处理与保存的交易来提升吞吐,只是其在主链之外建立的并不是特定参与者之间的通道,而是共用的具备独立共识机制的新区块链,子链需要定期向主链上的智能合约提交状态更新,在顺利通过7天的质疑期(乐观证明,为了保证交易安全)后将区块状态写入主链。其集合了状态通道与侧链的优点:在状态通道模式下,如果需要增加新的参与者,需要在链上重新打开新的通道,而在 Plasma 中不需要;状态通道向主链同步状态时需要全部参与者的同意,而 Plasma 不需要;状态通道只保留最终状态,Plasma 的状态转换记录在子链上有完整的记录;侧链上的状态转换会直接影响到主链上的状态,因此其资产安全性取决于侧链本身,而 Plasma 并不是,其安全性依赖于主链。

    Plasma 机制主要面临的问题是:子链节点需要保留子链上的大量交易数据;节点必须在线。

image

图源:Plasma: An Innovative Framework to Scale Ethereum

有效性证明(推理交易有效)+ 链上DA(安全性+,扩容效果-)= ZK-Rollup

zkRollup 可以有效改善 Plasma 所面临的问题。由于这部分的 zkRollup 和 Validium 均使用零知识证明作为验证机制,因此在这部分先简单叙述一下零知识证明的概念:零知识证明,指的是在向其他人证明某个命题为真时,除了命题为真之外,不提供其他的信息佐证。比如,A使用零知识证明向B证明他已经成年了,此时B不会知道A的生日,只会知道A已经成年了的这件事。在 zkRollup 中,使用 zkSNARK 对于大量的交易进行验证,确定了这些交易的有效性后,只需要向主网上传一个证明这些交易都有效的零知识证明即可。这样做大幅压缩了数据量,可以将交易数据写入主网。

zkRollup 也面临着一些问题:零知识证明计算困难;初期需要信任;通用性较差

有效性证明(推理交易有效)+ 链下DA(安全性-,扩容效果+)= Validium

Validium 同样使用零知识证明保证其交易信息的有效性与链下数据的可用性。其与 zkRollup 的唯一区别是,将数据可用性放到了链下,这使得 Validium 拥有了更高的吞吐量,但是带来的后果是数据可用性的管理者稍微修改 Merklized 状态,就可以让用户无法转移资金。如下图,如果d3被修改,d1的所有者将无法获取节点m的信息,而m是证明其账户所有权的必要条件。在 zkRollup 出现后,Validium 基本上是完全失去了竞争力。

image

图源:Validium And The Layer 2

欺诈证明(检举无效交易)+ 链上DA(安全性+,扩容效果-)= Optimistic Rollup

Optimistic Rollup 是 Plasma 的升级版,同时可以解决 zkRollup 通用性的问题。其默认节点提交的交易信息是正确的,向主网提交交易信息后,会有7天的质疑期,供他人检查交易的正确性。其与Plasma 的不同在于,将交易数据写入了链上;与 zkRollup 的不同在于,不使用零知识证明。在中和了其他两种 Rollup 的同时,Optimistic Rollup 也牺牲了部分的吞吐量。

image

图源:ethereum.org

 

总结与未来展望

 

因为不可能三角的存在,注定不会有完美的扩容方案,需要权衡各个方案的代价。 个人认为,由于链上扩容需要支付的代价更高(包括造成硬分叉和技术难度两方面),较为难实现,一般情况下还是会以链下扩容方案为主。

目前的链下扩容方案中,Rollups 因其安全性保持优势。不过,虽然通过 Rollups 可以大幅释放L1的吞吐,在将L2打包的数据传回L1时的速度却仍受以太坊的区块大小所限制。目前以太坊一个块的存储在100kb左右,算下来一分钟内能够处理的 Rollups 打包的数据不足500kb,而主网除了接收打包的数据之外,还需要处理L1上原有的交易信息,共同导致了链下扩容方案吞吐量的瓶颈。

不过好在可以对于不同方案进行组合:链上方案中, DankSharding 的构思正好可以通过使用抽样验证和 RS 编码大幅降低验证节点的工作量与数据下载量,解决交易处理速度的问题,预计在实装后可以与Rollup相辅相成。而如果把分片的实装当作大前提,在当前的几种 Rollups 中,Optimistic Rollup 的成本主要是写入主网的成本,与可以降低该成本的 ProtoDanksharding 最为适配,因此个人认为在近期内(如果EIP-4844成功实装),链下 Optimistic Rollup+链上 ProtoDankSharding 会是最佳选择。

链捕手ChainCatcher提醒,请广大读者理性看待区块链,切实提高风险意识,警惕各类虚拟代币发行与炒作, 站内所有内容仅系市场信息或相关方观点,不构成任何形式投资建议。如发现站内内容含敏感信息,可点击 “举报”,我们会及时处理。
ChainCatcher 与创新者共建Web3世界