这篇文章的缘起,估计大家都知道的。就是这条朋友圈。这篇文章的缘起,估计大家都知道的。就是这条朋友圈。没加我微信的,赶紧来(微信:LongLongBTC)。
V 神的重要性自不必说。GitCoin 捐款的额度匹配算法Quadratic Funding,就是来自 V 神的。具体可以看不管不理的员的这篇文章。灵魂绑定的 NFT——也就是跟钱包绑定, 不能交易、不能转移——这么火。也是出自 V 神的论文。说这么多都没用。毕竟以太坊都是 V 神发明的。
翻译是一件严肃的事情,最高级的翻译标准是“信达雅”,也就是准确、通顺、优雅。这三点往往是不可兼得的,比如大白话是最通顺的,往往不够优雅。在本文的翻译中,不管不理的员优先追求的是准确。所以,会额外增加一些信息,方便大家理解。有任何问题,欢迎加我微信(LongLongBTC)、找我Twitter(LongLongLongBTC)交流
以下是正文
特别感谢Georgios Konstantopoulos、Karl Floersch和Starkware团队的反馈和评审。
在关于二层网络L2的扩展的讨论中,一个经常出现的话题是 "三层网络L3 "的概念。如果我们可以通过二层网络L2协议锚定一层网络L1的安全性,并在一层网络L1上面增加可扩展性,那么我们肯定可以通过三层网络L3协议锚定到二层网络L2的安全性,并在二层网络L2上面增加更多的可扩展性,从而实现更大的扩展性,对吧?
这个想法的一个简单版本是:如果有一个能带来二次方级别扩展的方案,你能不能把这个方案堆叠在自身之上,从而得到指数级的扩展方案?类似的想法包括我2015年的可扩展性论文,Plasma论文中的多层扩展理念,以及更多的其他论文。**不幸的是,如此简单的三层网络L3概念很少那么容易就实现。**设计中总有一些东西是不可堆叠的,总有一些东西只能给你带来一次可扩展性的提升——对数据可用性的限制、对于一层网络L1的紧急提款带宽的依赖,或者是很多其他问题。
围绕三层网络L3的新想法则更加复杂,比如Starkware提出的框架:他们不只是把同样的东西堆叠在自身之上,他们给二层网络L2和三层网络L3赋予了不同的目的。如果得以正确执行的话,这一方法的某种形式很可能是一个不错的主意。在三层架构中,什么可能是有意义的、什么可能是没有意义的,这篇文章将探讨个中细节。
Rollups(见我的这篇长文)是一种扩展技术,它结合了不同的技术以解决运行区块链的两个主要扩展瓶颈:计算和数据。计算是通过欺诈证明或SNARKs来解决的,它依靠极少数的行为者actors来处理和验证每个区块,要求其他任何人只进行极少量的计算来检查其证明过程是否正确执行。这些方案,特别是SNARKs,几乎可以不受限制地扩展;你真的是可以不断地制造 "许多SNARKs之上的SNARK",以将更多的计算扩展到只需要仅仅一次证明。
数据跟计算是不同的。Rollups使用一系列压缩技巧,去减少交易需要在链上存储的数据量:一个简单的货币转账从大概100字节减少到大概16字节,一个兼容EVM的链上的ERC20转账从大概180到大概23字节,一个保护隐私的ZK-SNARK交易可以从大概600字节压缩到大概80字节。在所有情况下,都有大约8倍的压缩。但是,rollups仍然需要确保数据在链上是可以获取的,并保证用户能够访问和验证这些数据,以便用户能够独立地计算rollup的状态,并在现有的证明者provers脱机时能够作为证明者加入区块链网络。数据可以压缩一次,但不能再次压缩——如果可以,那么一般都有办法把第二个压缩器的逻辑放到第一个压缩器中,并通过压缩一次获得同样的好处。因此,"在rollup之上的rollup "实际上并不能在可扩展性方面提供巨大的收益——尽管正如我们稍后将看到的,这种模式可以实现其他目的。
好吧,咱们看看Starkware在他们 关于三层网络L3的帖子 中所倡导的内容。Starkware是由非常聪明的密码学家组成的。这些密码学家实际上是理性的,因此,如果他们支持三层网络L3,他们的版本将比 "如果rollups把数据压缩8倍,那么显然rollups之上的rollups将把数据压缩64倍 "更复杂。
这是Starkware文章中的图片。
引用部分原文如下:
图1描述了这类生态系统的一个例子。其三层网络L3包括:
具有Validium数据可用性的StarkNet,例如,对价格极度敏感的应用程序的一般使用。
为提高应用性能而定制的特定应用的StarkNet系统,例如,采用指定的存储结构或数据可用性压缩方式。
具有Validium或Rollup数据可用性的StarkEx系统(诸如那些服务dYdX、Sorare、Immutable和DeversiFi服务的系统),可以即刻为StarkNet带来经过实践检验的可扩展性优势。
隐私StarkNet实例(在这个例子中同样可以作为四层网络L4),允许保护隐私的交易,而不必将其包含在公开的StarkNets网络里。
我们可以把这篇文章压缩成三个关于 "三层网络L3 "的愿景:
L2是用于扩展,L3是用于定制功能,例如隐私。在这个愿景中,不用尝试提供 "二次方级别的可扩展性";相反,有一层堆栈可以帮助应用程序进行扩展,然后有单独的层用于不同用例的定制功能需求。
L2是用于通用目的的扩展,L3是用于定制的扩展。定制的扩展可能有不同的形式:使用EVM以外的东西进行计算的专门应用,对围绕着特定应用的数据格式进行数据压缩优化的rollup(包括将 "数据 "与 "证明 "分开,并完全用每个区块的单一SNARK代替证明),等等。
L2用于无需信任的扩展,也就是rollups,L3用于弱信任的扩展,也就是validiums。验证体Validiums是使用SNARKs来验证计算的系统,但将数据的可用性留给了可信第三方或委员会来决定。在我看来,Validiums被严重低估了:特别是许多 "企业区块链 "应用,实际上由一个运行validium验证器并定期向链上提交哈希值的中心化服务器提供服务,可能是最佳的方式。Validium的安全等级比rollups低,但成本可以大大降低。
在我看来,这三种设想从根本上说都是合理的。专门的数据压缩需要自己的平台,这一想法可能是最弱的说法——设计一个带有通用基础层压缩方案的二层网络L2是很容易的,用户可以通过特定应用的子压缩器进行自动扩展——但除此之外,这些使用案例都是合理的。但这仍然留下了一个大问题:三层网络L3的结构是实现这些目标的正确方式吗?验证体validiums、隐私系统和定制环境,这一切锚定在二层网络L2而不是直接锚定到一层网络L1,其意义何在?这个问题的答案其实相当复杂。
与两层网络模型相比,三层网络L3模型的一个可能的论点是:三层网络L3模型允许整个子生态系统存在于单一的rollup中,这使得该生态系统内的跨领域操作非常便宜,而不需要通过昂贵的一层网络L1。
但是,事实证明,甚至在两个锚定到同一个一层网络L1的二层网络L2(甚至三层网络L3)之间进行存款和取款也很便宜。实现这个的关键在于,代币和其他资产不是必须在根链上发行。也就是说,你可以在Arbitrum上有一个ERC20代币, 在** Optimism **上进行封装 ,并在两者之间来回移动,而不需要任何一层网络L1的交易。
让我们来看看这样一个系统是如何运作的。有两个智能合约:Arbitrum上的基础合约和Optimism上的封装代币合约。要从Arbitrum转移到Optimism,你将把你的代币发送到基础合约,这将产生一个收据。一旦Arbitrum最终完成,你可以将该收据的Merkle证明——这一证明是根植于L1状态的——并将其发送到Optimism上的封装代币合约。封装代币合约将验证并给你发一个封装代币。要把代币移回来,只需要同样的事情反过来做一遍就可以。
即使证明Arbitrum上的存款所需的Merkle路径是在一层网络L1的状态里的,Optimism只需要读取一层网络L1状态的根来处理存款——这里不需要一层网络L1的交易。需要注意的是,由于rollups上的数据是最稀缺的资源,为了节省空间,这种方案的实际实施会使用SNARK或KZG证明,而不是直接使用Merkle证明。
与根植于一层网络L1的代币相比,这样的方案有一个关键的弱点——至少在optimistic rollup上是这样的:存款也需要等待欺诈证明的时间窗口。如果一个代币根植于一层网络L1上,从Arbitrum或Optimism提取到一层网络L1需要一个星期的延迟,但存款是即时的。然而,在这个方案中,存款和提款都需要一个星期的延迟。也就是说,并不能证明optimistic rollups上的三层架构是更好的:在本身运行在防欺诈游戏上的系统内,要确保防欺诈游戏是安全的,会带来很多技术上的复杂性。
幸运的是,这些问题在ZK rollup上都不会成为问题。由于安全原因,ZK rollup不需要一个星期的等待窗口,但是,由于其他两个原因,它们仍然需要一个较短的窗口(在第一代技术中大概是12小时)。首先,特别是更复杂的通用ZK-EVM rollup需要更长的时间,以覆盖证明一个区块的非并行计算时间。其次,还有一个经济上的考虑,即不要太频繁地提交证明,从而尽量减少与证明交易相关的固定成本。包含专门硬件的下一代ZK-EVM技术,将解决第一个问题,而具备更好架构的批量验证可以解决第二个问题。而我们接下来要讨论的正是优化和批量证明提交的问题。
rollup 的每个交易很低:根据应用不同,大概是16-60字节的数据。但是,每次提交一批交易到链上时,rollups也必须支付高昂的固定成本:optimistic rollups每批需要21000的L1 gas,ZK rollups需要超过400000(如果你想要的是只使用STARK的量子安全级别的东西,则需要数百万gas)。
当然,rollups可以简单地选择等待,直到有价值1000万 gas的L2交易来提交一批,但这将使他们有很长的批次间隔时间,迫使用户等待更长的时间才能得到高安全性的确认交易。因此,他们有一个权衡:长的批次间隔和最佳成本,或者短的批次间隔和大大增加的成本。
为了给我们一些具体的数字,让我们考虑一个ZK rollup,它的每批成本为600,000gas,处理完全优化的ERC20交易(23字节)。每笔交易成本为368gas。假设这个rollup 处于采用的早期到中期阶段,并且平均 TPS 为5。我们可以计算出每笔交易与批次间隔的gas。
如果我们进入一个有很多定制的validiums和特定应用环境的世界,那么很多rollup的TPS会远远低于5。因此,确认时间和成本之间的权衡开始成为一个非常大的问题。事实上,"三层网络L3 "范式确实解决了这个问题。一个ZK rollup内的ZK rollup,即使非常初级,其固定成本也只有大概8,000的L1 gas(只需要500字节进行验证)。上面的表格就调整为。
问题基本解决了。那么,三层网络L3很好吗?也许吧。但值得注意的是,有一种不同的方法来解决这个问题,其灵感来自ERC 4337聚合验证。
该策略如下。现在,每个ZK rollup或validium都会接受一个状态根,如果它收到一个证明Snew=STF(Sold,D):新的状态根必须是在旧的状态根之上正确处理交易数据或状态deltas的结果。在这个新方案中,ZK rollup将接受一个来自批量验证器合约(a batch verifier contract)的消息,说它已经验证了一批语句的证明,其中每一个语句的形式是Snew=STF(Sold,D)。这批证明可以通过一个递归的SNARK方案或Halo聚合进行构建。
这将是一个开放的协议:任何ZK-rollup都可以加入,任何批处理者都可以聚合来自任何兼容的ZK-rollup的证明,并从聚合者那里得到交易费用的补偿。批量处理合同将验证一次证明,然后将一个消息传递给每个rollup,并附上该rollup的三要(Sold,Snew,D) ;三要素来自批量处理合同这一事实将证明该交易是有效的。
如果优化得好,这个方案中每个rollup的成本可能接近8000 gas;5000用于写入新的更新的状态,1280用于新的和旧的根,以及额外的1720用于杂乱数据的处理。因此,它将给我们带来同样的节省。Starkware实际上已经有了类似的东西,叫做SHARP,尽管它(还)不是一个无需许可的开放协议。
对这种方式的一个反应可能是:但这实际上不就是另一个三层网络L3的方案吗?与其说是基础层<- rollup <- validium,不如说是基础层<-批量机制<- rollup 或 validium。从某些哲学的架构角度来看,可能确实如此。但有一个重要的区别是:中间层不再是一个复杂的完整的EVM系统,而是一个简化的、高度专业化的对象,因此它更有可能是安全的,它的建立更有可能不需要另一个专门token,它更有可能被治理最小化、不随时间变化。
由_相同的扩展_方案堆叠在自身之上组成的三层扩展架构一般效果不好。Rollup之上的rollup,也就是两层rollup使用了相同的技术,当然也不行。然而,第二层网络L2和第三层网络L3有着不同目的三层架构,确实是有效的。在rollup之上的Validiums确实有意义——即使长期来看,它们不一定是最佳方式。
然而,一旦我们开始讨论何种架构才有意义的细节,我们就会进入一个哲学问题
基础层<-批处理机制<- rollup或validium 模式,与基础层<-rollup<-rollup或validium 模式做的工作是相同的。但就其工作方式而言,证明聚合层看起来更像ERC-4337,而不是像rollup。通常情况下,我们不把ERC-4337称为 "二层网络L2"。同样,我们不把Tornado Cash称为"二层网络L2"——因此,如果我们要保持一致,我们不会把在二层网络L2之上的以隐私为重点的子系统称做是三层网络L3。因此,有一个尚未解决的语言上的争论,即,首先要解决什么才值使用 "层 "的叫法。
关于这个问题,可能会有很多流派。我个人倾向于将 "二层网络L2 "这一术语限制在具有以下特性的事物上:
它们的目的是为了提高可扩展性
它们遵循 "区块链中的区块链 "模式:它们有自己的机制来处理交易,有自己的内部状态
它们继承了以太坊链的全部安全性
因此,optimistic rollups和ZK rollups是二层网络L2,但validiums、证明聚合方案、ERC 4337、链上隐私系统和Solidity都不是。将其中一些称为三层网络L3,可能是有意义的,但不太可能所有的都能这么叫;无论如何,在多层rollup生态系统的架构远未定型,而且大部分讨论只是纯理论而非实际应用的时候,明确"层"的定义似乎为时过早。
也就是说,语言的争论不如哪些结构实际上最有意义这一技术问题重要。显然 ,在服务像隐私这样的非扩展性需求的时候,某种类型的**" 层 " 可以发挥重要作用;而且显然有一个重要的证明聚合功能,需要以某种方式填补,并且最好是通过开放的协议进行填补。**但与此同时,有很好的技术理由,使得连接面向用户的环境和一层网络L1的中间层尽可能简单;在许多情况下,EVM rollup作为这个"胶合层 "可能不是正确的方法。我猜测,随着二层网络L2的扩展生态系统的成熟,复杂度更高的(也更加简单)结构,如本文所述,将开始发挥更大的作用。