# zkPorter：超越 zkRollup 的 L2可组合可扩展性

By [白开水](https://paragraph.com/@baikaishui) · 2022-05-20

---

10亿区块链用户——一个可扩展的架构提案
--------------------

![](https://storage.googleapis.com/papyrus_images/1686edc9022cb3e89677c9eb4af998b621b88244639c7715770651aea3c555af.jpg)

TLDR
----

我们介绍了 zkPorter：一种在高度可扩展但原子可组合的区块链网络中结合 zkRollup 和分片的新 L2 扩展技术。

问题#1：吞吐量≠可扩展性⚖️
===============

吞吐量以网络处理的总交易量来衡量。可扩展性是单个节点处理的事务量。zkRollup 可以说是安全性和可用性方面[的终极 L2 扩展解决方案。](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955)然而，与主网相比，zkRollup 仅提供了约 100 倍的可扩展性提升，因为交易数据仍必须传播到所有完整节点。可以说 zkRollup[线性增加吞吐量，但无法提供指数可扩展性](https://twitter.com/_prestwich/status/1284174486674083840)。

zkRollup 可以在 Eth1 上处理高达 3,000 TPS，保守地说——取决于 Eth2 的实现细节——在分片的 Eth2 上至少可以处理 20k TPS。这已经是一项巨大的成就，可与[Visa 高达 24k TPS 的容量](https://usa.visa.com/run-your-business/small-business-tools/retail.html)相媲美，但由于我们渴望容纳目前不受当今银行基础设施支持的数十亿人，我们正在努力争取更多。

问题 #2：隔离中的可扩展性是一个死胡同🛑
======================

DeFi 的惊人崛起表明可组合性是成功的关键。可组合的“[金钱](https://medium.com/totle/building-with-money-legos-ab63a58ae764)乐高积木”，DeFi 应用程序展示了通过将去信任协议相互叠加来解锁的潜在价值。限制自己的扩展解决方案的项目将发现自己与社区共享、可组合扩展机制的安全和网络效应隔离。

介绍 zkPorter 🎉
==============

在这篇文章中，我们将介绍一种基于 zk 扩展的新方法，它有可能解决上述两个问题：zkPorter。

简而言之 zkPorter 🥜
================

zkPorter 是一个基于账户的、无需信任的扩展协议，由简洁的零知识证明保护。与 zk 系列中的其他扩展技术（例如 zkRollup 和 Validium）类似，zkPorter 中的计算以指数方式扩展：可以以大致恒定的成本验证任意多笔交易。每笔交易都将通过 L1 上的智能合约进行验证，因此 zkPorter 中帐户状态的正确性与 L1 具有相同的安全保证。

另一方面，基于 zk 的扩容不能直接解决的是数据可用性问题：如果状态数据不可用，资金就会被冻结。zkRollup 和 Validium[以不同的方式](https://medium.com/matter-labs/zkrollup-vs-validium-starkex-5614e38bc263)处理数据可用性问题。

zkPorter 通过结合 zkRollup 和分片思想的混合方法来处理数据可用性。它可以支持任意多个分片，每个分片都有自己的数据可用性策略，由分片的智能合约定义。分片的选择在个人帐户级别进行控制。

zkPorter 将状态有效性和数据可用性的关注点分开。状态有效性——即从一个状态到下一个状态的转换总是有效的——通过零知识证明统一执行，它提供指数可扩展性，同时继承底层 L1 的安全保证。相比之下，数据可用性被委托给各个分片，这些分片可以自由地尝试不同的解决方案。在 necessariis unitas 中，在 dubiis libertas 中！

zkPorter 中的可组合性：类固醇上的区块链互联网💊
=============================

同步跨分片（或跨区块链）互操作性被[认为是极其困难](https://near.org/blog/the-authoritative-guide-to-blockchain-sharding-part-1/)的。这就是为什么大多数现有的分片解决方案（Cosmos、Polkadot、Eth2）通过[交易收据](https://ethresear.ch/t/implementing-cross-shard-transactions/6382)选择更简单的异步互操作性。从同步互操作性到异步互操作性的转变将在协议互操作性和用户体验方面产生重大问题，特别是对于那些相对时间敏感的（即 Aave 的 15 秒闪贷）。

输入 zkPorter！zkPorter 中的所有帐户共享相同的地址空间，并且可以通过在 zkPorter 的基本分片 shard 0 中运行的 zkRollup 彼此无缝互操作。具有大流量和/或特定数据可用性需求的协议可以将其协议接口提升到自己的分片中zk波特。下一节将讨论将协议提升到自己的分片中所涉及的安全性、成本和吞吐量权衡。

zkPorter 实现了任意多个协议的平滑互操作性。单个原子交易可以在不同的 zkPorter 分片上调用任意数量的智能合约。此外，分片内交易将可以**访问整个 zkPorter 状态**——包括任何其他分片中的数据。例如，这可以用于读取 oracle 提要。

您可以将 zkPorter 模型视为 zk 类固醇上的区块链互联网。

zkPorter 分片：安全性和成本💸
====================

zkPorter 的 Shard 0 是一个简单的 zkRollup，具有底层以太坊 L1 的完整数据可用性和安全保证。Shard 0 将是 zkPorter 内部运行成本最高的分片，大约是在主网上交易成本的 1/100。

分片 0 以外的分片在自己的智能合约上定义自己的数据可用性策略。zkPorter 的分片交换链上数据可用性，使交易成本进一步降低 10-100 倍，吞吐量增加超过基础分片。zkPorter 引入了一种可选的验证器机制，我们称之为“zkPorter Guardians”，这将使协议能够邀请协议利益相关者作为协议分片上的数据可用性保证人参与。启用 Guardians 的分片将运行某种形式的权益证明共识，其中分片的用户可以选择带着他们的数据退出，只要至少 1/3 的参与验证者保持诚实。

协议可以自由地实施自己的数据可用性策略，包括或排除 zkPorter Guardians。协议选择的数据可用性策略的效率将影响吞吐量和交易成本值。

![](https://storage.googleapis.com/papyrus_images/059f9253bd7aa59b9aef185538634c962e4731c7aec5d61ab210145bf8e78e70.png)

灵活的数据可用性是 zkPorter 的核心设计目标。通过允许协议设计他们自己的策略，zkPorter 支持广泛的可能的解决方案，以适合每一个。安全假设允许受信任的中心化方作为担保人的应用程序可以实现权威证明共识。具有治理令牌的应用程序可以选择实施自己的权益证明共识以保护其分片 - 但必须避免允许分片存款量超过质押量。[纠删码机制](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding)可用于证明验证者不删除。鉴于比特币网络的相对简单性和低交易量，zkPorter 分片的验证者甚至可以在其分片内创建比特币的实现，在基于 Nakamoto Proof of Work 的共识上运行。所有这些都可以与 zkPorter Guardians 验证器设置合并或独立运行。

zkPorter 在设计时考虑了规模。zkPorter 协议将数据可用性和正确性的证明减少到每个分片上的少量开销。提升新分片的边际成本与将嵌套数据包含在基础 zkRollup 中的成本成对数。这将使 zkPorter 能够有效地扩展以支持数亿个帐户。

最后，用户隐私伴随着零知识领域。使用 zkRollup 作为 L2 的基本元素的内在优势是可以证明状态转换的有效性，而无需透露这些交易的内容。

建筑🏛
====

在底层，zkPorter 类似于 zkRollup 和 Validium。L1 上的合约持有一些资金和账户状态的 Merkle 根记录。实际的状态数据由 zkPorter 验证器和每个分片的数据保持器在链下维护：我们将其称为_状态树_。

分片的智能合约定义了自己的规则，用于何时接受 zkPorter 块。当区块被接受时，该区块会进行状态转换：L1 上的交易将 Merkle 根替换为新值。该交易必须验证新值有效的零知识证明：即区块中的每笔交易都是有效的。

在 zkPorter 中，每个分片的帐户必须存储在状态树的单独子树中。此外，每个分片子树必须包含有关其类型的信息以及对定义其数据可用性策略的智能合约帐户的引用。

如果分片类型是 zkRollup，那么任何修改该分片中账户的交易都必须包含必须作为 L1 调用数据（与 zkRollup 相同）发布的状态更改。

任何修改至少两个不同分片中账户的交易都必须在 zkRollup 模式下执行。

所有其他仅在特定分片的帐户上操作的交易都可以在正常分片模式下执行（我们将它们称为分_片交易_）。如果一个块包含一个分片_S_的一些分片交易，那么必须遵守以下规则：

1.  _分片S_的子树的根哈希必须发布一次，作为 L1 上的 calldata。这保证了所有其他分片的用户将能够重建他们的状态部分。
    
2.  必须调用该分片的数据可用性策略的智能合约来强制执行附加要求（例如验证大多数分片共识参与者的签名）。
    

案例研究💼
======

我们想展示四个案例研究，展示 zkPorter 与其他应用程序无缝组合的潜力，同时根据每个应用程序的需求扩展交易量。

案例研究 1：Reddit 社区积分
==================

2020 年 6 月，Reddit 推出了[The Great Reddit Scaling Bake-Off](https://www.reddit.com/r/ethereum/comments/hbjx25/the_great_reddit_scaling_bakeoff/)，让社区有机会通过社区积分系统拥有其子版块的一部分，并让 L2 解决方案展示其满足要求的能力。也就是说，社区积分系统的任何解决方案都需要安全、去中心化和易于使用，同时保持与其他第三方应用程序（钱包、合约）的互操作性，当然还要处理数十万笔交易。社区积分可以使用 zkPorter 以三种不同的方式实现。

**_选项 1：在 zkSync 上操作（zkPorter shard 0）_**

为了将[社区积分](http://reddit.com/community-points)引入以太坊主网上，Reddit 可能会简单地与 zkSync 上现有的 zkRollup 功能[集成](https://zksync.io/)。如上所述，zkSync 在 Eth1 上具有 3,000 TPS 的容量。假设所有 5 亿月活跃 Reddit 用户都积极参与。假设平均每月 1 次铸造 tx、1 次燃烧 tx（订阅付款）和 2 次转账，社区积分将需要平均负载：

500,000,000 \* 4 / (30 \* 24 \* 60 \* 60) ~ 700 TPS（每秒事务数）。

这将占据 zkRollup 现有总容量的约 1/4（3,000 TPS）。

**_选项 2：提升到由 zkPorter Guardians 验证的 Reddit 特定分片_**

为了增加可行的交易带宽，同时降低用户的成本，Reddit 可以将 Reddit 交易从基本分片提升到其用户的 Reddit 特定分片。Reddit 可以选择如何为其用户提供数据可用性保证。最简单的方法是利用现有的 zkSync Guardians 实施，为用户提供 Proof of Stake 数据可用性保证。我们建议 Reddit 扩展 Guardians 模板以在 Reddit 的服务器上额外托管数据。在这种模式下，Reddit 甚至可以绕过 Guardians 的三分之二攻击，从而为 Reddit 用户提供强大的数据可用性保证。同样，用户的数据将受到保护，免受 Reddit 服务器故障、黑客攻击等的影响。

**_选项 3：使用特定于 Reddit 的数据可用性策略提升到特定于 Reddit 的分片_**

第三，Reddit 可以选择最大化交易吞吐量，同时最小化成本，方法是将 Reddit 社区提升为具有自定义数据可用性策略的 Reddit 特定分片，无 zkPorter Guardians。基于权益证明共识的可能方案可能依赖于社区驱动的数据可用性，如上所述，并结合三分之二的多重签名。

在一种可能的方案实现中，Reddit 和 Reddit 的用户将提交签名来证明每个状态转换的有效性。例如，Reddit 可能拥有总签名权重的三分之一，而将剩余的三分之二分配给用户。三分之二的签名权重足以允许 Reddit 分片上的状态转换。如果用户要识别无效状态转换，则可能会激励用户发布无效转换的证明，从而削减无效状态转换发布者的股份。

拟议方案中的交易成本将仅涵盖 zk 证明生成（目前每笔交易约 0.001 美元，预计在不久的将来会暴跌几个数量级）。

**_互操作性_**

在任何这些情况下，Reddit 社区积分持有者都能够：

1.  轻松与其他分片上的智能合约交互，例如使用部署在 zkSync 上的 DeFi 协议进行交易/借贷/借贷（zkSync 上的 Curve，zkSync 上的 Compound 等）
    
2.  将他们的社区点数移至 zkRollup 分片上的帐户，以获得最大的安全性
    
3.  快速将他们的代币提取到以太坊主网以与非 zkSync 智能合约进行交互
    

案例研究 2：智能钱包/加密银行（Argent、Dharma、MyKey 等）
=======================================

智能钱包是与智能合约集成的钱包，可以为用户处理隐私和互操作性功能（例如，将钱包与 L2 扩展无缝集成）。一些钱包，比如[Argent](https://www.argent.xyz/)，甚至选择在新用户入职时支付一部分用户 gas 费。以目前的[gas 价格](https://ethgasstation.info/)75 Gwei 和[Eth 价格](https://coinmarketcap.com/currencies/ethereum/)320 美元，即每笔简单交易 50 美分。智能钱包可以集成他们的智能合约来调用 zkRollup 函数来降低他们的总 gas 成本。

这是一个可能的实现，只需三个简单的步骤。

**_第 1 步：zkRollup 分片_**

智能钱包账户现在可以迁移到像[zkSync这样的 zkRollup 解决](https://zksync.io/) **方案**。zkSync 内部钱包之间的交易很便宜，而从 zkSync 到主网的交易会稍微贵一些，并且需要更长的时间（约 5-10 分钟才能完成）。

**_第二步：zkSync Guardians + Wallet operator shard_**

在加入大量新用户后，运营 zkRollup 的成本可能会促使钱包运营商考虑开设自己的分片。在上面的 Reddit 部分中，我们详细介绍了这会是什么样子：将他们的用户群转移到一个单独的分片，其中数据可用性由 zkSync Guardians（Reddit 的社区成员，可能是这里的[协议政治家](https://bankless.substack.com/p/the-rise-of-the-protocol-politicians)）和钱包运营商保护。只要钱包运营商或 zkSync 监护人多数不受影响，分片就会保持安全。此选项还为与钱包运营商分享有机费用开辟了道路。

**_第 3 步：钱包 DAO 分片_**

在某个时候，用户群可能会变得如此庞大，以至于钱包可能决定迁移到由治理代币持有者管理的分片上。这个分片将仍然是 zkSync 网络的一部分，并且可以在 zkRollup 模式下访问所有其他分片中的服务。

**_隐私注意事项_**

还应该注意的是，隐私可以很容易地在上述 3 个步骤中的任何一个中实现。如果没有零知识证明的集成，隐私是不容易实现的。zkRollup 的美妙之处在于，账户同时可以访问隐私，并显着降低参与网络的成本，而不会牺牲安全性或去中心化。

案例研究 3：DeFi 协议和 DEX（Loopring、IDEX、Curve、Compound 等）
===================================================

预见到扩展瓶颈，几个主要的 DeFi 协议（例如 IDEX 或 Loopring）投资部署了自己的可扩展性解决方案。这是一个明智的举措，因为它一方面让他们在油价飙升的时代获得了竞争优势，另一方面也让他们对扩展技术/权衡取舍有了更深入的了解。

此外，对于力求实现高频交易的 DEX，必须将单笔交易的价格保持在绝对最低水平，因为关闭订单需要大量交易。

但是，这种方法会产生两个问题：

1.  孤立的可扩展性解决方案缺乏**可组合性**和**网络效应**。
    
2.  随着零知识证明的全部潜力的展现，越来越多的人认识到 ZKP 是真正大规模采用的关键。同时，ZKP 领域的创新速度如此之快，以至于需要自己专门的研发团队才能跟上。未能正确审计和实施复杂的加密算法会导致潜在的破坏性安全漏洞。密码学的黄金法则是正确的：[不要滚动自己的密码](https://security.stackexchange.com/questions/25585/is-my-developers-home-brew-password-security-right-or-wrong-and-why)。
    

zkPorter 解决了这些问题。DeFi 协议可以建立在具有强大网络效应的最先进的扩展技术之上，同时控制交易成本。为此，协议可以在 zkPorter 中创建自己的分片，由协议代币持有者的共识保护。这也将为费用共享或费用补贴提供有机机会。

案例研究 4：微交易（Brave、Livepeer、Storj 等）
==================================

需要执行大量低价值传输（微交易）的协议可能会实现类似 Validium 的分片（即数据可用性由多个验证器的简单多重签名保护的分片），将交易成本保持在最低限度涵盖 ZK 证明生成（目前每笔交易约 0.001 美元，预计在不久的将来会暴跌几个数量级）。

与微交易平台的集成可以包括一个选项，让用户可以定期或在余额超过一定数量后自动将其余额转移到 zkRollup 分片上。

前进的道路🛣
=======

zkPorter 将作为 zkSync 路线图的一部分逐步实施。

实现这一愿景的下一步是：

*   为 zkSync带来[通用的智能合约支持。](https://zinc.matterlabs.dev/)
    
*   实施多验证者共识机制。
    
*   分发 zkSync 代币来为 Guardians 分片提供燃料。
    

[zkSync](https://zksync.io/)在以太坊主网上运行，现在可以在无需许可的 zkRollup 模式下使用。我们相信它的吞吐能力将足以满足以太坊社区未来 2 年的扩展需求，同时网络过渡到以太坊 2.0。但是，我们愿意尽快讨论和实施自定义分片解决方案，以建立有希望的合作伙伴关系。

结束语
===

zkSync 还没有代币，近期也没有销售或分发的计划。请小心骗子。

---

*Originally published on [白开水](https://paragraph.com/@baikaishui/zkporter-zkrollup-l2)*
