# ZK Rollup：以太坊扩容的未来

By [Lewis](https://paragraph.com/@bubai) · 2022-03-04

---

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=HZnzmb6YqHk)

文章是视频中前 26 分钟的简短的结构化文字版介绍。

一、以太坊扩容
=======

以太坊拥堵问题，已经是一个普遍共识。以太坊的拥堵主要体现在两个方面：交易费用高和交易 TPS 低。在以太坊上，这两点是不能分割来看的。

自 2016 年以来，不断有号称『下一代』区块链出现，都以高 TPS 为卖点，但他们都会遭遇著名的『三难问题』，即可扩展性、安全和去中心化三者不可兼得。

![三难问题](https://storage.googleapis.com/papyrus_images/90c67e1c8b7fcccc1bdc78812127b13b4aecfee10e3c1cf9399fc0189b7b1a1a.png)

三难问题

这是因为，TPS 越高，运行网络的成本（财务和计算）就越高。现在大多数增加 TPS 的区块链都是通过一下几点进行：

1.  加速共识
    
2.  增加块大小
    
3.  减少出块时间
    

要实现以上几点，那必然要通过使用更高性能的机器作为区块链节点（来加速计算，存储更大量的数据）或者使用更少的节点（加速共识）或者进一步缩短出块时间来达成。这些都是不可持续的，机器的性能不能无限大，更高的性能要求也会导致更少的节点，更少的节点会导致更中心化，从而导致更不安全的区块链。

例如，Solana 已经拥有任何前 20 种加密货币中最昂贵和最专业的硬件要求，并且随着 Solana 交易和价格的上涨，运行节点、成为验证者和处理交易的硬件成本也在增加。

硬件要求

*   比特币¹：350GB HDD 磁盘空间，5 Mbit/s 连接，1GB RAM，CPU >1 Ghz。节点数量：~10,000
    
*   Ethereum²：500GB SSD 磁盘空间，25 Mbit/s 连接，4–8GB RAM，CPU 2–4 核。节点数量：~6,000
    
*   Solana³：1.5TB SSD 磁盘空间，300 Mbit/s 连接，128GB RAM CPU 12 核。节点数：~1,200
    

以下是加密货币和网络安全专家 Jameson Lopp 在 [2020 年比特币节点](https://blog.lopp.net/2020-bitcoin-node-performance-tests/)和 [2021 年节点同步测试](https://blog.lopp.net/2021-altcoin-node-sync-tests/)中所经历的经验数据。该表比较了在普通消费级 PC 上同步比特币、以太坊和 Solana 的完整节点所需的时间。

![区块链吞吐量和节点同步比较](https://storage.googleapis.com/papyrus_images/70e5fec967e1ae51e570a7a46fb297a2607f819b64f1c19554c8c05262d18b43.png)

区块链吞吐量和节点同步比较

即便如此，Solana 所能够达到的 TPS 也不够全球采用。它所遇到的状态增长和集中化问题，也并不是个例。

毫无疑问，目前的 Layer 1 替代方案并不能很好地解决以太坊遇到的问题，向外寻找解决方案并不能一劳永逸。以太坊也积极探索自身的扩容，分片（链上扩容） + Layer 2（链下扩容）是其最终拥抱的解决方案。

![扩容方案一览（Source: @yasminekarimi_）](https://storage.googleapis.com/papyrus_images/f8edbec74fbd3006dc6fa0e209093ac581e168a9b527a77a69f3d723d6be9bb2.png)

扩容方案一览（Source: @yasminekarimi\_）

使用 L2 解决方案的主要优点是主链保持不变，不受其上构建的内容的影响。任何“在堆栈上”（例如在另一层）发生的问题都不会损害基础层——相反，可以将 L2 视为与以太坊上的智能合约交互的链下软件存在。

使用 Rollups 扩容可以在不牺牲安全性的情况下实现指数级的可扩展性增益。Rollups 的主要创新在于它们将计算移到链下，同时仅在链上存储最少的交易数据。Rollups 链处理所有昂贵且计算密集的数据处理，使以太坊执行交易的能力呈指数增长。

二、ZK Rollup
===========

Rollup
------

Rollups 本质上是一条独立的链，该技术的实现是在自己的 Rollup 链上执行以太坊交易，将它们“rolled up”成一批，以太坊接收并存储结果。然而，为了做到这一点，以太坊主网需要某种方式来验证链下发生的交易是否有效。这里有两个主流的验证方式：

1.  欺诈证明（Optimistic Fraud  Proof）：使用该证明的技术叫乐观汇总（Optimistic Rollup），它“乐观地”假设所有交易都是有效的，但允许/使用争议解决、退出期（7天左右）和加密经济激励措施来保持数据的完整性。从本质上讲，这是一个“在被证明有罪之前是无辜的”模型，有监督机构。
    
2.  零知识证明（Zero-knowledge Proof）：使用该证明的技术叫零知识汇总（Zero-knowledge Rollup），ZK Proof 是通过高度复杂的密码学方法，允许某人在不实际透露信息内容的情况下，证明他们拥有特定的信息。密码学的保证使得其无需监督机构。
    

这两种证明分别由两种不同的 Rollup 技术所采纳，也正因为证明方式的差别，导致这两种证明各自具有一些优缺点：

![Optimistic Rollups vs ZK Rollups](https://storage.googleapis.com/papyrus_images/7ec7c27af7b03e4147e467f3f847413e6350f9389e726b1528a8f3b0b9bf810c.png)

Optimistic Rollups vs ZK Rollups

想要进一步理解 Rollup 技术在干嘛，这里需要介绍一下单片（Monolithic）区块链和模块（Modular）区块链的概念。Monolithic 是指一个区块链，其中每个节点都执行区块链的所有部分：执行、共识和数据可用性。

*   **执行**是指交易的计算。它是执行事务的面向用户的层。
    
*   **共识**是指对交易和节点达成一致的状态进行排序。
    
*   **数据可用性**保证块完全发布到网络，共识层加上数据可用性保证了所有区块链数据都已发布并可供任何人访问。
    

如比特币所使用的区块链就是单片区块链，还有 Solana、Polygon Pos 和 BSC 等，而 Cosmos、Polkadot 和 Near 等，则属于模块区块链。

![不同区块链 L1 设计Source: Delphi Digital](https://storage.googleapis.com/papyrus_images/bb52d5867a556da1c74ac3a7db31a0f6d7c2a62669d00daa3ea107028db25e5f.png)

不同区块链 L1 设计Source: Delphi Digital

所谓模块区块链，就是把单片区块链节点所要完成的三件事情拆分开来，分开执行，最终再组合起来，将节点的功能『模块化』。Rollup 技术就是『模块化』技术之一，它将节点的执行功能模块化，抽离出来到 Rollup 链上执行，然后提交给主链进行达成共识，并保持主链节点的数据可用性。同样的，也存在一些技术将节点的数据可用性进行抽离，这个之后我们会提到。

Zero Knowledge
--------------

零知识证明（Zero-Knowledge）是指一方(证明者)向另一方(验证者)证明一个陈述是正确的，而无需透露除该陈述是正确的外的任何信息。其数学基础是同态隐藏，即：

1.  如果 𝑥 , 𝑦 不同，那么它们的加密函数值𝐸 ( 𝑥 ) 和𝐸 ( 𝑦 ) 也不相同。
    
2.  给定𝐸 ( 𝑥 ) 的值，很难反推出 𝑥 的值（椭圆曲线、抗碰撞哈希函数）。
    
3.  给定𝐸 ( 𝑥 ) 和𝐸 ( 𝑦 ) 的值，我们可以很容易地计算出某些关于 𝑥 , 𝑦 的加密函数值。
    

    - 同态加法：通过𝐸 ( 𝑥 ) 和𝐸 ( 𝑦 ) 计算出𝐸 ( 𝑥 + 𝑦 ) 的值

    - 同态乘法：通过𝐸 ( 𝑥 ) 和𝐸 ( 𝑦 ) 计算出𝐸 ( 𝑥𝑦 ) 的值

    - 扩展到多项式

举个例子来说，一个简单的版本是『Alice想要向Bob证明她知道一组数𝑥和𝑦使得𝑥 + 𝑦 = 7， 同时不让Bob知道𝑥和𝑦的具体数值』。那么 Alice 该怎么做呢？通过零知识证明，Alice 可以：

1.  Alice把𝐸(𝑥)和𝐸(𝑦)的数值发给Bob
    
2.  Bob通过收到的𝐸(𝑥)和𝐸(𝑦)计算出𝐸(𝑥 + 𝑦)的值 (利用了性质3)
    
3.  Bob同时计算𝐸(7)的值，如果𝐸(𝑥 + 𝑦) = 𝐸(7)，那么验证通过，否则验证失败。
    

这个例子比较简单，而且是可以通过暴力进行破解的，真正的零知识证明是无法通过暴力破解的，比如下面的盲签的方法：

1.  用户A提供SerialNum，银行在不知道SerialNum的情况下返回签名Token，减少A的存款
    
2.  用户A把SerialNum和Token交给B完成交易
    
3.  用户B拿SerialNum和Token给银行验证，银行验证通过，增加B的存款
    
4.  银行无法把A和B联系起来
    

ZK Rollup
---------

ZK Rollups (ZKRU) 是具有很少特定节点（称为证明者）的独立区块链网络。通过加密证明链接到以太坊的主网。此链接可防止汇总审查或窃取资金，同时保持以太坊 L1 的不可变属性。这种证明称为有效性证明，确保链下交易的有效性，使其立即可验证，并且无需提款/质询期。详细描述该过程：

1.  高度压缩的批量交易与当前状态根（state root）组合在一起
    
2.  组合被发送到链下证明者
    
3.  证明者计算交易，生成结果的零知识证明
    
4.  证明者然后将其发送给链上验证者（以太坊节点）
    
5.  验证者验证有效性证明
    
6.  维护 Rollup 状态的以太坊 L1 上的智能合约更新为新状态
    

![Hermez ZK RollupsSource: Coingenius.news](https://storage.googleapis.com/papyrus_images/3073593a44862d9ea288497ae84863ec730eef38c90b1c878ade1bb6c108edc9.png)

Hermez ZK RollupsSource: Coingenius.news

这里有三个主要参与方：链下证明者、零知识证明和链上验证者。

1.  链下证明者：是一组精选的节点，只需要一个节点负责计算所有交易并将它们聚合成一个零知识证明（如 zkSNARK），由于涉及复杂的计算，证明者在专用硬件上运行，更加集中和不透明。
    
2.  零知识证明：保证了数学上保证证明者不可能提交欺诈数据（即使它非常集中和不透明），唯一涉及的信任是对密码学/数学的信任，证明允许每个节点验证提供的状态是否有效。
    
3.  链上验证者：即以太坊节点，验证证明比实际计算它要少得多，这就是可扩展性改进的地方，节点只需要处理和存储状态转换和少量调用数据。节点可以很容易地就一个共同的状态达成一致，并将执行的负担放在单个节点而不是整个网络上。
    

**优点**

*   每个事务中包含的数据更少，增加了第 2 层的吞吐量和可扩展性，与 Optimistic Rollups 相比，更大的可扩展性和降低交易成本的好处
    
*   无需任何人监控 ZKR
    
*   不需要像 Optimistic Rollups 中那样的欺诈争议窗口，将提款时间从大约 2 周减少到几分钟；
    
*   默认启用隐私。
    

**缺点**

*   计算零知识证明的难度将需要数据优化以获得最大吞吐量
    
*   ZK-rollups 的初始设置促进了中心化方案
    
*   最初构建和集成到以太坊网络比 Optimistic rollups 更难
    

三、zkSNARKs and zkSTARKs
=======================

在以太坊汇总空间中，有两个领导者：[zkSync](https://zksync.io/) 正在使用 zkSNARKs，[StarkWare](https://starkware.co/) 正在使用 zkSTARKs。除了这两个之外，还有[Loopring](https://loopring.io/)、[Aztec](https://aztec.network/)、[Polygon Hermez](https://hermez.io/) (SNARKs)、[Polygon Miden](https://github.com/maticnetwork/miden) (STARKs) 等等。

zkSNARK（Zero-Knowledge Succinct Non-interactive ARgument of Knowledge）和 zkSTARK（Zero-Knowledge Scalable Transparent ARguments of Knowledge）最大的区别就在于，前者使用的是椭圆曲线来确保证明所需的随机性，而后者使用的是抗碰撞的哈西函数来确保这一点，初始化随机性对于零知识证明技术来说至关重要，这也一定程度上导致了两种技术的优缺点。

首先是 zkSNARK 的优缺点，其计算更复杂，但其计算产生的证明大小更小，而且最近 zkSync 发布了 2.0 的测试网，能够兼容 EVM。

**优点**

*   更小的证据大小和更少的验证时间
    
*   对开发者更友好的EVM兼容
    
*   更大的开发者社区和库
    

**缺点**

*   需要受信任设置（涉及到初始参数的设定，影响到有效性证明）
    
*   无 quantum-resistance（zkSync 正在开发 Redshift 致力于解决这两个问题）
    
*   更低的吞吐量和 TPS
    

zkSTARK 在一定程度上解决了 zkSNARK 的缺点，但是同样地，它也有一些其他的缺点，不兼容 EVM 是比较致命的，它使用 Cairo 作为变成语言，开发者需要学习新的语言以布置应用。

**优点**

*   无需信任设置且具有 quantum-resistance
    
*   更快的计算速度（10倍）和可扩展性（吞吐量、TPS）
    
*   来自以太坊基金会的声音支持
    

**缺点**

*   更大的证据大小——更多的gas费和更长的验证时间
    
*   更不开发者友好（Cairo）
    
*   更小的开发者社区和库
    

链下存储数据
------

基于 Rollup 技术，有一种方案可以达到更高的 TPS，那就是 zkSync 发布的 zkPorter 技术和 StarkWare 发布的 Validium 和 Volition 技术。它们所做的是将单片区块链节点三大功能之一的『数据可用性』也进行了抽离，将数据可用性存储在链下，从而进一步提高区块链的 TPS。

Validium 的机制几乎与 ZK Rollup 相同，唯一的区别是 ZK Rollup 中的数据可用性是在链上的，而 Validium 保持在链外。这意味着 ZK Rollups 在第一层区块链本身上发布数据，而 Validiums 在链上发布有效性证明，但数据保留在单独的网络上。

这种链下存储方案提供隐私优势，因为用户的交易和余额信息存储在 validium 运营商处，而不是公开在区块链上。但是，由于交易数据未在链上发布，用户被迫信任运营商在需要时提供数据。这一关键区别使 Validiums 更类似于一个高性能的托管 PoA 系统，Validium 运营商可以在该系统中冻结但不能窃取用户的资金。

在链下存储数据的权衡是它需要对第三方的信任，第三方可能会阻止用户访问他们的余额。 Starkware 旨在通过数据可用性委员会 (DAC) 来解决这个问题，该委员会由 8 名独立成员组成，他们拥有自己的交易副本。他们还需要通过随时提供这些数据来维护这些数据。如果运营商阻止用户访问他们的资金，委员会成员可以覆盖他们以确认他们的请求是否有效。使用 Validium 的示例：Loopring (LRC) 和 StarkEx。

多个项目使用 Starkware 的 [StarkEx 平台](https://starkware.co/starkex/)启动了 [Validiums](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two)，包括：

*   DeversiFi DEX - [June 2020](https://deversifi.com/blog/deversifi-2-0-launch-was-a-huge-success/)
    
*   ImmutableX NFT platform - [April 2021](https://www.immutable.com/blog/immutable-x-alpha-trading-launch)
    
*   dYdX DEX - [April 2021](https://dydx.exchange/blog/public)
    
*   Sorare Fantasy Soccer - [July 2021](https://medium.com/sorare/were-live-on-our-scaling-solution-starkware-62438abee9a8)
    

Volitions 是 ZK-rollup 和 Validium 混合解决方案，使用户能够选择链上或链下的数据可用性，即通过以太坊或通过验证。

zkPorter 是 zkSync 2.0 中数据可用性的内部共识机制，支持大 TPS 数。zkSync 2.0 作为标准 ZKRU 可以处理 ~1,000 到 5,000 TPS，但使用 zkPorter，它可以处理 ~20,000 到 100,000 TPS（取决于每个事务的复杂性）。但是需要注意的是，在使用 zkPorter 时，用户依赖的是 zkSync 的内部共识机制。这要求用户信任 Matter Labs，并依赖利用 L1 共识机制的不太安全或分散的汇总解决方案。zkPorter 和 Starkware 的 Volition 之间的主要区别在于，用户必须在每个 zkPorter 账户中选择是否产生具有链下数据可用性的交易，而在 Volition 中，用户可以选择账户内的每笔交易。

它们的关系汇总如下表所示。

![](https://storage.googleapis.com/papyrus_images/72a3d6ae5698c08a121c9b96835af57feee1f938947b7ca5be0e199a5b0c6cd0.png)

ZK Rollup 与其他扩容方案的小比较
---------------------

最后，有几张图能够比较直观的比较一下 ZK Rollup 和其他扩容技术在四个维度（三难问题+可编程性）的差别。这边主要是以 zkSync 为例子。

zkSync 2.0 的设计最大限度地利用了所有 4 项功能，并结合了以下 2 项技术突破：

1.  zk EVM：为我们的 EVM 兼容 zkRollup 提供动力的引擎，这是唯一具有 L1 安全性和可靠智能合约支持的解决方案。
    
2.  zkPorter：一个链下数据可用性系统，其可扩展性比 rollups 高 2 个数量级。
    

![Source: Matter Labs](https://storage.googleapis.com/papyrus_images/04bf8b731b09fafb82d740069175124e74b314277124e1874f854ed843370cd4.png)

Source: Matter Labs

![Source: Matter Labs](https://storage.googleapis.com/papyrus_images/45a77ee58c77ba89ed7cfc04f7ec0d422277f4e4ddb142b1fbfd16afc9807cbd.png)

Source: Matter Labs

由于 zkEVM 和 zkPorter 是可互操作和可组合的，zkSync 2.0 能够显着优于所有其他扩展解决方案。

目前的共识是[Eth2 数据分片](https://vitalik.ca/general/2021/04/07/sharding.html) 将在 [2022 年底](https://ethereum.org/en/eth2/shard-chains/)在不牺牲去中心化的情况下提供指数级更大的数据可用性层。 **zkSync 的 zkRollup 技术与 Eth2 数据分片相结合是最终目标，在不牺牲任何 4 个因素的情况下达到 100,000 TPS。**

（完）

最近在体验zk的产品，这边就放一个zk捐赠链接，点击下面链接请我喝茶，谢谢老板们！

[https://link.zksync.io/?MHhDZDdDMTIxNDM1OTc0NkUxQTAxRWY0YWE4ODU3QzQzYTcwOTA2MkQxfEVUSHwwLjAx](https://link.zksync.io/?MHhDZDdDMTIxNDM1OTc0NkUxQTAxRWY0YWE4ODU3QzQzYTcwOTA2MkQxfEVUSHwwLjAx)

---

*Originally published on [Lewis](https://paragraph.com/@bubai/zk-rollup)*
