您好,欢迎您来到国盈网!
官网首页 小额贷款 购房贷款 抵押贷款 银行贷款 贷款平台 贷款知识 区块链

国盈网 > 区块链 > Scroll:探讨 ZK Rollup 中「证明溢出」问题,有哪些解决方案?

Scroll:探讨 ZK Rollup 中「证明溢出」问题,有哪些解决方案?

区块链 岑岑 本站原创

在Scroll,我们正在公开构建zkEVM,并希望保持我们正在构建的协议的各个方面的公开和透明。

本文描述了我们称之为“证据溢出”的问题,这是由ZK汇总中执行和证据生成的分离引起的。

后台滚动的滚动过程可以大致理解为:

1.用户向Scroll的内存池提交事务。

2.sequencer节点将一些事务打包到一个块中。

3.洗澡者将一些积木打包成一批。

批量数据(包括其所有交易数据)被发布或“提交”到以太坊L14。认证者获得该批次并生成证书。

该证明可以证明本批次所有交易均已正确执行。此证书提交给L1邰方公司审核。相应的批次被视为“最终确认”。我们在Alpha测试网络中遇到的一个问题是有些批次无法证明。我希望它们“太大”而不适合我们的zkEVM电路。

人们可以认为zkEVM电路由许多子电路组成,比如n个子电路,这些子电路通过查找表相互连接。每个子电路用于约束特定的操作,例如,Keccak电路计算Keccak散列,取幂电路计算取幂。我们的zkEVM电路设计中的当前限制是每个子电路必须具有相同数量的行,例如m行。

根据每个子电路中消耗的行数,每个传入的事务都有一个唯一的配置文件。例如,可能有一个事务需要许多Keckak操作,因此Keckak电路中占用了许多行,而取幂电路中没有占用任何行。相反,可能有一个事务在Keccak电路中占用几行,而在取幂电路中占用许多行。

由于批处理由块组成,而块由事务组成,因此批处理的行消耗配置文件由组成它的事务决定。如果一个批处理的行消耗超过最大行数m,该批处理将无法证明(即证明“溢出”)。当一个批次不能被证明时,它不能在L1上被最终确认,并且任何后续批次都不能被证明(取决于不可证明批次的结果状态)。

值得注意的是,即使只包含单个事务的批处理也可能溢出电路。

要解决“证据溢出”问题,需要解决以下几个问题:如何防止产生超过电路容量的批次?

长期解决问题源于我们电路架构的限制:所有子电路必须有预先确定的固定行数。我们正在研究重新设计我们的架构,以便我们可以独立地动态调整子电路——每个子电路的大小可以根据批量认证的要求放大或缩小。例如,如果一批在Keccak电路中需要2 ^ 20行,但在取幂电路中只需要2 ^ 14行,则子电路可以独立缩放。

这种类型的动态设计带来了挑战,我们正在努力解决这些问题。然而,与此同时,我们需要解决固定大小电路的问题。

当前解决方案1。根据最坏情况操作码设置阻塞气体限制。

这里的想法是根据最坏情况(就电路线路消耗而言最昂贵)操作码来设置块的气体限制。换句话说,设置块气限制,即使填充了最贵的操作码,块依然可以适应我们的电路。这确保了没有块可以填充电路。

优点:简单缺点非常低效分析表明,最贵操作码(SHA)的验证线与EVM燃气的比值约为11倍。每个额外的Keccak字节占用大约2.2行,消耗大约6/32 EVM气体。对于m = 2^20(大约一百万行),我们可以容纳大约2 ^ 20/2.2 keccak字节。这对应于(2 20/2.2)*(6/32)~= 89,000气体的最大阻塞极限。太小了!!2.天然气重新定价

我们可以修改操作码到Gas的映射表来反映证明的代价,而不是执行的代价。这将涉及从每个操作码到它在所有子电路中占据的最大行数的静态映射,然后修改我们的Geth分支(“L2Geth”)以使用这个新的Gas定价。

优点:证明了溢出问题是作为执行层的“没气”错误处理的。这些缺点可能会破坏基于正常EVM天然气定价的合同。很难以编程方式将操作码映射到行消耗。这种映射应该是可编程的,因为zkEVM的电路库会随时间变化,而且由于人工分析容易出错,这里稍有差错就会导致溢出漏洞,所以需要保持L2Geth燃气定价与zkEVM的电路库的同步& # 8211;不同步会导致漏洞。3.引入额外的“标准气体”测量。

除了正常的EVM气体,我们还可以有一个单独的概念“ProofGas”。ProofGas将用于量化我们电路中的事务所消耗的空请注意,这个“ProofGas”应该是多维的——因为不同的操作码在不同的电路中占据不同的行。

一旦引入“ProofGas”度量的概念,就会出现用哪个层次来约束的问题。

3a。在执行层面限制标准气体。

该解决方案类似于解决方案2,除了它保留了EVM气体和标准气体的概念。这将再次涉及将每个操作码静态地映射到它在每个电路中占据的行数,然后修改L2Geth以添加验证气体的概念。如果特定交易超过标准气体限制,交易将被取消,并且会出现一些用户定义的“超出标准气体”错误。这将确保没有块可以超过行约束,因为执行层将在此之前停止交易。

优点:证明了溢出问题是作为执行层的“超出证明气体”错误来处理的。缺点:很难生成从操作码到行消耗的静态映射。保持L2Geth和zkEVM电路库的同步是很有必要的。有必要对L2Geth和zkEVM电路库中的逻辑进行重大更改,以支持验证气体的额外概念。3b。限制执行层外的防护气体。

我们可以从zkEVM电路库中公开API来报告给定执行跟踪所需的行数,而不是生成操作码到电路行的静态映射。L2Geth可以生成块的执行轨迹,然后查询电路行消耗——如果超过最大行数,就不会创建块。

优点:不需要通过编程将操作码映射到行来消耗复杂性。缺点:当必须构造一个块时,L2Geth会增加一些计算开销,因为它需要进行额外的计算来估计电路线路消耗。使强制包含变得复杂。强制纳入是一种机制,用户可以通过L1直接提交L2交易。作为一种反审查机制,这些交易被“强制”纳入L2链。我们无法将交易映射到它在L1上消耗的电路线数,所以无法判断它是否能证明结论。看来方案3b是最简单、风险最小、可行的方案。

该方案的主要挑战是如何处理强制事务,因为可能存在太大而无法放入电路的强制事务。这里的一个思路是用方案1的思路来限制强制交易的气限,这样即使在最坏的情况下,强制交易也不会溢出电路。

从长远来看,我们的目标是开发一个更灵活的支持动态子电路的证明系统,从而完全避免这个问题。

本网站声明:网站内容来源于网络。如有侵权,请联系我们,我们会及时处理。

温馨提示:注:内容来源均采集于互联网,不要轻信任何,后果自负,本站不承担任何责任。若本站收录的信息无意侵犯了贵司版权,请给我们来信(j7hr0a@163.com),我们会及时处理和回复。

原文地址"Scroll:探讨 ZK Rollup 中「证明溢出」问题,有哪些解决方案?":http://www.guoyinggangguan.com/qkl/150964.html

微信扫描二维码关注官方微信
▲长按图片识别二维码