以太坊拥堵还有救?zkPorter:一种可组合的以太坊Layer 2扩容方案

原文作者:Matter Labs 创始人 Alex Gluchowski

原文翻译:巴比特 

原文作者是 Matter Labs 创始人 Alex Gluchowski,在这篇文章中,他介绍了一种新的结合 zkRollup 和分片思想的 Layer 2 扩容方案:zkPorter。

根据他的介绍,这种方案将作为 zkSync 路线图的一部分逐步实现,而其不仅旨在实现以太坊大规模的扩容及降低相关交易的成本,还有望解决当前 Layer 2 方案普遍存在的可组合性难题,当然,目前这一方案仍处在设(gu)想 (shi) 阶段,因此它的可行性仍有待进一步验证。  

以下是该方案的译文(注:对于案例研究部分内容,由于 Layer 2 赛道的竞争会非常激烈,因此读者需自行判断)。

长话短说:我们介绍了 zkPorter,这是一种新的二层(L2)扩展性技术,它将 zkRollup 和分片技术结合在一个高度可扩展,但原子可组合的区块链网络中。

 

问题 1: 吞吐量≠可扩展性 

网络的吞吐量是通过交易的总处理量来衡量的,而可扩展性是单个节点处理的交易量。在安全性和可用性方面,zkRollup 可以说是终极的二层(L2)扩展性方案。然而,与主网相比,zkRollup 仅仅提升了大约 100 倍的性能,因为交易数据仍必须要广播到所有的全节点。可以说 zkRollup 线性地增加了吞吐量,但没有提供指数级可扩展性的方法。

在以太坊 1.0 上,zkRollup 最多可处理 3000 TPS,保守地说,在采用分片方案的以太坊 2.0 上(取决于 ETH2.0 实现细节),吞吐量可以实现 20000 TPS。这已经是一个巨大的成就,它可以和 Visa 2.4 万的 TPS 相媲美,但由于我们渴望接纳今天不被银行基础设施所支持的数十亿人,因此我们需要争取到更多的 TPS。

 

问题 2: 孤立的扩容之路,行不通 

DeFi 的崛起表明,可组合性是成功的关键,作为可组合的「金钱乐高」,DeFi 应用展示了如何通过将无需信任的协议层叠加在一起来解锁潜在的价值。而将自己局限于自身扩容解决方案的项目,将发现自身与社区共享的、可组合的扩容解决方案的安全性和网络效应相隔离。

 

zkPorter 简介 

在本文中,我们将介绍一种新的基于零知识证明(ZK)的扩容解决方案,它有可能解决上述两个问题,而它的名字叫 zkPorter。

zkPorter 是一种基于帐户的、无需信任的扩容解决方案,它由简洁的零知识证明进行保护。与零知识证明家族中的其他扩容技术(如 zkRollup 和 Validium)类似,zkPorter 中的计算是指数级扩容的:任意多数量的交易可以大致恒定的成本进行验证。每笔交易都将通过 L1 上的智能合约进行验证,因此 zkPorter 中帐户状态的正确性具有与 L1 相同的安全保证。

另一方面,基于零知识证明的扩容解决方案不能直接解决数据可用性问题:如果状态数据变得不可用,资金就会被冻结。关于这一点,zkRollup 和 Validium 是以不同的方式来处理数据可用性问题的。

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

zkPorter 将状态有效性和数据可用性分离开来。状态有效性(即从一个状态到下一个状态的转换始终有效)是通过零知识证明统一实施的,这种证明在继承底层 L1 的安全保证的同时,还提供了指数级的可扩展性。另一方面,数据可用性被委托给单独的分片,它们可以自由地试验不同的解决方案。

zkPorter 的可组合性:区块链的互联网 

同步跨分片(或跨区块链)互操作性被认为是极其困难的。这就是为什么大多数现有的分片解决方案(Cosmos、Polkadot、以太坊 2.0)选择通过交易接收,实现更简单的异步互操作性。从同步互操作性到异步互操作性的过渡,将在协议互操作性和用户体验方面产生重大困难,特别是对于那些对时间敏感的用户来说(比如 Aave 的 15 秒闪电贷)。

那 zkPorter 方案是怎样的呢?zkPorter 中的所有账户共享相同的地址空间,并且可通过运行在 zkPorter 基础分片(分片 0)中的 zkRollup 无缝地互操作。具有高流量和特定数据可用性需求的协议,可将其协议接口移动至自己的 zkPorter 分片中。下一节,我们会讨论将协议移动至自己的分片中,所涉及到的安全性、成本以及吞吐量权衡。

zkPorter 支持任意多个协议的平滑互操作性。单笔原子交易可以在不同的 zkPorter 分片上调用任意数量的智能合约。此外,分片内的交易将可以访问整个 zkPorter 状态,包括任何其它分片中的数据。例如,这可以用来读取一个预言机喂价。

 

zkPorter 分片:安全和成本 

zkPorter 的分片 0 是一个简单的 zkRollup,其具有底层以太坊 L1 的完整数据可用性及安全保证。而整个分片 0 将是 zkPorter 内部最昂贵的分片,其交易成本大约是主网成本的 1/100。

分片 0 以外的分片,在自己的智能合约上定义自己的数据可用性策略。zkPorter 的分片交换链上数据的可用性,以进一步降低 10–100 倍的交易成本,并使吞吐量超过基础分片。zkPorter 引入了一种可选的验证者机制,我们称之为「zkPorter 守护者」,它将使协议能够邀请协议质押者作为协议分片上的数据可用性保证者参与进来。支持守护者的分片将运行一种权益证明(PoS)共识,只要至少 1/3 的参与验证者保持诚实,该分片的用户将可以选择退出。

协议选择的数据可用性策略的效率,将影响吞吐量和交易成本值。

以太坊拥堵还有救?zkPorter:一种可组合的以太坊Layer 2扩容方案

灵活的数据可用性是 zkPorter 的核心设计目标。通过允许协议设计自己的策略,zkPorter 支持各种可能的解决方案。如果应用的安全性假设,允许受信任的中心化各方作为担保方,则可以实现权威共识证明。使用治理代币的应用,可选择实现自己的权益证明共识来保护其分片,但必须避免允许分片存储量超过质押量。可使用纠删码机制来证明验证者的非删除操作。考虑到比特币网络的相对简单性及低交易量,zkPorter 分片的验证者甚至可以在基于中本聪工作量证明的共识基础上在其分片内创建一个比特币实现。所有这些都可以与 zkPorter 守护者验证程序设置合并,或独立运行。

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

最后,用户隐私问题也可以用零知识证明来解决。采用 zkRollup L2 的固有优点是,可以证明状态转换的有效性,而不必透露这些事务的内容。

架构 

在底层,zkPorter 类似于 zkRollup 和 Validium。L1 上的合约包含一些资金和账户状态的 Merkle 根记录。实际的状态数据由 zkPorter 验证者和每个分片的数据保管器进行链外维护:我们将其称为状态树。

分片的智能合约为 zkPorter 区块何时被接受定义了自己的规则。当区块被接受时,区块执行一次状态转换:在 L1 上用新值替换 Merkle 根的交易。此交易必须验证新值为有效的零知识证明:即表明区块中的每笔交易都是有效的。

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

如果分片类型为 zkRollup,那么任何修改该分片中账户的任何交易,都必须包含状态更改,并且必须将其发布为 L1 调用数据 calldata(与 zkRollup 相同)。

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

所有其他只在特定分片账户上操作的交易,都可以在普通分片模式下执行(我们称之为分片交易)。如果一个区块包含分片 S 的一些分片交易,那么就必须遵守以下规则:

1. 分片 S 子树的根哈希必须作为 L1 上的 calldata(调用数据)发布一次。这保证了所有其他分片的用户将能够重建其状态的一部分;

2. 此分片数据可用性策略的智能合约,必须被调用以强制执行其他要求(例如,验证大多数分片共识参与者的签名); 

案例研究 

我们想提出 4 个案例研究,以展示 zkPorter 与其他应用无缝组合的潜力,同时根据每个应用的需求扩展交易量。

案例研究 1:Reddit 社区积分 2020 年 6 月,Reddit 启动了一次 Reddit 扩容竞赛活动,这也为 L2 技术方案供应商提供了展示的机会。简而言之,Reddit 社区积分系统需要同时解决安全、去中心化、易于使用,同时保持与其它第三方应用(钱包、合约)互操作性的问题,当时,它还要能够处理大量的交易。

实际上,Reddit 社区积分可通过 zkPorter 以三种不同的方式来实现。

选项 1:在 zkSync 上操作(zkPorter 分片 0)

为了将 Reddit 社区积分引入以太坊主网,Reddit 可以简单地与 zkSync 上现有的 zkRollup 功能集成。如上所述,zkSync 在以太坊 1.0 平台的吞吐量为 3,000 TPS。假设每个月有 5 亿活跃的 Reddit 用户参与进来,又假设每个用户平均每月进行 1 次 minting 交易,1 次 burning 交易(订阅付款)以及 2 次转账,那么 Reddit 社区积分平均需要的负载为:500000000*4/(30*24*60*60)~700 TPS。

选项 2:转移到 Reddit 特定的分片中,并由 zkPorter 守护者验证

为了增加可行的事交易带宽,同时降低用户的成本,Reddit 可以将 Reddit 交易从基础分片转移到一个特定的 Reddit 分片中。Reddit 可以选择如何向用户提供数据可用性保证。最简单的方法是利用现有的 zkSync 守护者实现,为用户提供权益证明数据可用性保证。我们建议 Reddit 扩展守护者模板,以便在 Reddit 的服务器上额外托管数据。在这个模型中,即使守护者的三分之二攻击也可以被 Reddit 规避,从而为 Reddit 用户提供强大的数据可用性保证。同样,用户的数据也会受到保护,免受 Reddit 服务器故障、黑客攻击等影响。

选项 3:使用特定于 Reddit 的数据可用性策略,转移到一个特定的 Reddit 分片中

第三,Reddit 可选择通过使用自定义数据可用性策略(sans zkPorter Guardians),将 Reddit 社区转移到特定的 Reddit 分片中,从而最大限度地提高交易吞吐量,同时最小化成本。基于利益证明共识的一个可能方案,依赖于社区驱动的数据可用性,如上所述,再结合一个 2/3 多重签名。

在一个可能的方案实现中,Reddit 和 Reddit 用户将提交证明每个状态转换有效性的签名。例如,Reddit 可能拥有总签名权重的三分之一,而剩余的三分之二分配给用户。而只要 2/3 的签名权重就足以在 Reddit 分片上进行状态转换。如果一个用户要标识一个无效的状态转换,可能会激励用户发布无效转换的证明,从而大幅罚没无效状态转换发布者的权益。

拟议方案中的交易成本仅涵盖零知识证明生成成本(目前每笔交易约 0.001 美元,预计在不久的将来还能够大幅缩减)。

互操作性

在上述任何一种情况下,Reddit 社区积分持有者将能够:

1. 与其他分片上的智能合约轻松交互,例如使用部署在 zkSync 上的 DeFi 协议(zkSync 上的 Curve,zkSync 上的 Compound 等)进行交易或借贷操作;

2. 将他们的社区积分移动到一个 zkRollup 分片上的账户,以获得最大的安全性;

3. 快速将他们的代币提到以太坊主网,与非 zkSync 智能合约进行交互; 

研究案例 2:智能钱包/加密货币银行(Argent、Dharma、MyKey 等) 

智能钱包是与智能合约集成的钱包,它们可以为用户处理隐私和互操作功能(例如,将钱包与 L2 扩容方案无缝集成)。一些钱包(比如 Argent),甚至选择在新用户加入时为他们支付一部分 gas 费用。按照目前的 gas 价格(75 Gwei,以及 ETH 币价超过 320 美元),相当于每笔交易超过 0.5 美元。实际上,智能钱包可用它们的智能合约来调用一个 zkRollup 函数,来降低它们的总 gas 成本。

下面是一个可能的实现方案,分三个简单的步骤完成。

步骤 1: zkRollup 分片

智能钱包账户可转移到 zkRollup 解决方案,例如今天的 zkSync。zkSync 内部钱包之间的交易很便宜,而从 zkSync 到主网的交易会稍微贵一些,并且需要花费更长的时间(大约 5-10 分钟才能完成)。

步骤 2 : zkSync 守护者+钱包运营者分片

在迎来一大群新用户之后,zkRollup 的操作成本可能会促使钱包运营商考虑启用自己的分片。在上面的 Reddit 例子中,我们详细描述了这将是什么样子的:将他们的用户群转移到一个单独的分片中,其中的数据可用性由 zkSync 守护者(Reddit 的社区成员,这里可能会是协议政治家)加上钱包运营商来保证。只要钱包运营商或 zkSync 守护者的多数不妥协,分片仍然是安全的。此选项还为钱包运营商提供了一种有机费用共享方式。

步骤 3:钱包 DAO 分片

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

隐私考虑

还应注意的是,上述 3 个步骤中的任何一个步骤,都可以很容易地实现隐私保护。如果不集成零知识证明,那么隐私就不那么容易实现。zkRollup 的优点在于,帐户可同时获得隐私,并显著降低参与网络的成本,而不会牺牲安全性或去中心化特性。

 

案例研究 3: DeFi 协议和 DEX(Loopring, IDEX, Curve, Compound 等) 

考虑到扩展性瓶颈,一些主要的 DeFi 协议(例如 IDEX 或 Loopring)在部署自己的可扩展性解决方案。这是一个明智的举措,因为这可以在 gas 费用飙升的时期为它们带来竞争优势,另一方面,这也让大家对扩展性技术及相应的权衡有了更深入的了解。

此外,对于努力实现高频交易的 DEX 来说,单笔交易的费用必须保持在绝对低的水平,因为完成一笔订单需要大量的交易。

然而,这种方法有两个问题:

1. 独立的可扩展性解决方案,由于缺乏可组合性及网络效应而受到影响;

2. 随着零知识证明的潜力全部展现出来,越来越多的人会认识到零知识证明(ZKP)是真正大规模采用的关键。

同时,零知识证明(ZKP)领域的创新速度如此之快,要跟上它,需要有自己专门的研发团队。如果没有很好地进行审计,或者实施了复杂的密码学算法,就会导致复杂的安全漏洞。密码学的黄金法则告诉我们:不要开展自己的密码学方案(Don’t roll your own crypto)。

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

 

案例研究 4: 微交易(Brave、Livepeer、Storj 等) 

需要执行大量低值传输(微交易)的协议可能会实施类似 Validium 的分片(即数据可用性由简单的多个验证者的多重签名保护的分片),以将交易成本保持在最低水平。

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

 

前进之路 

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

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

1. 为 zkSync 提供通用智能合约支持;

2. 实施一个多验证者共识机制;

3. 分发 zkSync 代币以激励守护者分片;

zkSync 目前已在以太坊主网上线,并且用户可在无许可的 zkRollup 模式下使用它。我们相信,在以太坊网络过渡到以太坊 2.0 的这段期间,zkSync 的吞吐量将足以满足以太坊社区在未来两年内的扩展性需求。当然,我们也愿意早日讨论和实施定制分片解决方案,以建立合作伙伴关系。

(提示:zkSync 尚未发行代币,并且短期内也没有出售代币或分发代币的计划,请当心骗子。)

原文翻译链接