引介 | zkPorter:一种可组合的以太坊Layer 2扩容方案
写在前面:原文作者是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的核心设计目标。通过允许协议设计自己的策略,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的一些分片交易,那么就必须遵守以下规则:
- 分片S子树的根哈希必须作为L1上的calldata(调用数据)发布一次。这保证了所有其他分片的用户将能够重建其状态的一部分;
- 此分片数据可用性策略的智能合约,必须被调用以强制执行其他要求(例如,验证大多数分片共识参与者的签名);
案例研究
我们想提出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社区积分持有者将能够:- 与其他分片上的智能合约轻松交互,例如使用部署在zkSync上的DeFi协议(zkSync上的Curve,zkSync上的Compound等)进行交易或借贷操作;
- 将他们的社区积分移动到一个zkRollup分片上的账户,以获得最大的安全性;
- 快速将他们的代币提到以太坊主网,与非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来说,单笔交易的费用必须保持在绝对低的水平,因为完成一笔订单需要大量的交易。
然而,这种方法有两个问题:
- 独立的可扩展性解决方案,由于缺乏可组合性及网络效应而受到影响;
- 随着零知识证明的潜力全部展现出来,越来越多的人会认识到零知识证明(ZKP)是真正大规模采用的关键。同时,零知识证明(ZKP)领域的创新速度如此之快,要跟上它,需要有自己专门的研发团队。如果没有很好地进行审计,或者实施了复杂的密码学算法,就会导致复杂的安全漏洞。密码学的黄金法则告诉我们:不要开展自己的密码学方案(Don't roll your own crypto)。
案例研究4: 微交易(Brave、Livepeer、Storj等)
需要执行大量低值传输(微交易)的协议可能会实施类似Validium的分片(即数据可用性由简单的多个验证者的多重签名保护的分片),以将交易成本保持在最低水平。
与微交易平台的集成,可以包括一个选项,让用户可定期或在余额超过一定数量后自动将余额转移到zkRollup分片上。
前进之路
zkPorter将作为zkSync路线图的一部分逐步实现。
实现这一愿景的下一步是:
- 为zkSync提供通用智能合约支持;
- 实施一个多验证者共识机制;
- 分发zkSync代币以激励守护者分片;
( 提示:zkSync尚未发行代币,并且短期内也没有出售代币或分发代币的计划,请当心骗子 。)
原文:https://medium.com/matter-labs/zkporter-composable-scalability-in-l2-beyond-zkrollup-2a30c4d69a75 作者:Alex Gluchowski 编译:洒脱喜 稿源(译):巴比特资讯(http://www.8btc.com/media/631262)