利用 Pickles SNARK(以及其他的 SNARK)实现的在EVM内验证Mina的完整状态,为Ethereum-Mina 跨链桥奠定了基础。
作者:Mikhail Komarov、Ilya Shirobikov、Alisa Cherniaev 2021年9月30日
翻译:Junwei
介绍
早在 2021 年 4 月,Mina 基金会就与以太坊基金会一起宣布征集设计实现方案,在以太坊上验证Pickles SNARK:https ://minaprotocol.com/announcements/mina-foundation-and-ethereum -foundation-launch-joint-rfp。最后,经过严格的筛选过程, =nil; Foundation的=nil; Crypto3 团队获得了构建该类项目的机会。
因此,这是涵盖此类桥接实施某些方面的博文系列中的第一篇。
所以是什么?
由于Mina的协议状态(除了存档节点)可以被打包在单个 Pickles SNARK 证明中(注意只有22kb)(https://medium.com/minaprotocol/meet-pickles-snark-enabling-smart-contract -on-coda-protocol-7ede3b54c250),这意味着可以将整个 Mina 协议状态直接放到以太坊上。此外,这意味着Mina的整个协议状态,可以在在合理的 gas 成本内在 EVM 中得到验证。
在EVM内验证Mina的完整状态,意味着可以将 Mina 链上发生的所有事情带到以太坊,包括金融应用程序、可证明的计算等等。
具体是什么?
不幸的是,在 EVM 上直接验证 Pickles SNARK 似乎成本太高。但是设计一个可以对 Pickles SNARK 执行预处理的系统似乎是可能的(例如,通过计算基于Placeholder证明系统的辅助证明来验证 Pickles SNARK,而辅助证明本身可以高效得在 EVM 上得到验证)。
特别的是。Mina 中使用的 Pickles SNARK 验证器有如下几步:
- 从证明的数据中计算几个哈希值。这涉及在有限域Fp 和有限域Fq上都进行 63 次完整轮次的 Poseidon 哈希函数,和特定的 MDS 矩阵 。这一步相当便宜,可以在 EVM 上以合理的 gas 成本实现。
- 检查几个算术方程。该步骤同样相当便宜,可以直接在 EVM 上实现。
- 执行一次规模为 的多标量乘法 (MSM),其中一些基数是固定的,一些是可变的。该步骤也可以在合理的效率下直接在 EVM 上实现,尽管它可能比步骤 1 和 2 更昂贵。
- 对于每个 i,在群 上执行规模为 的固定向量基数的多标量乘法,以及可以从证明中非常有效地计算出的标量。
事实证明,第 4 步无法直接在 EVM 上进行有效地计算,除非计算被拆分到几个区块中。
所以,这正是我们所采用的方法。
基于Placeholder证明系统的证明
Mina 状态验证的门槛成本设置为 5M gas。直接验证Pickles证明会花费更多。以太坊基金会和 Mina 基金会的提案中提出了一种方法,向 EVM 提交一个额外的基于Placeholde证明系统的证明,以证明 Pickles SNARK 证明部分得到验证成功,这可以被视为在 EVM 内部确认了 Mina 系统中发生的一切都是正确的。这种方法——提交证明验证成功的证明——可以在5M Gas内完成。前途一片光明。
应该为如下基本约束生成证明(代表验证算法的第 4 步)。 令:
- 是 MSM 的结果。
- 是 MSM 的规模。
- 是固定点的集合。
对于 :
- 其中 通过将前一个标量在点 上相乘,得到新的标量
基本的约束(使用加法链、类似流水线的方法和对占位符友好的数学),以便为证明者提供更好的性能,为验证者提供更低的 gas 成本。进一步的研究将确定验证算法的第 3 步是否需要包含在辅助证明中,或者是直接在以太坊智能合约上进行验证。
但是突然间,即使是 5M 的gas也变得非常昂贵(谢谢你,2021 年!)。
让证明更便宜
事实证明,基于Placeholder的辅助证明验证对于验证来说也过于昂贵了。所以我们开始寻找在辅助证明中使用不同的 SNARK 证明系统。
经过简短的讨论后,基于 R1CS 的 SNARK 也被划掉了,因为它们成本太高。即使考虑到其中一些是透明且非常有前景的(例如 Spartan),其会带来一个很好的特性,即无需信任任何一方参与者来生成以太坊提交的证明。想象一下,如果你需要信任一群进行可信设置的人,那么任何生成 Mina 状态证明的人都要依赖他们?这里需要太多的信任假设,这就是为什么 SNARK 的透明度是一个必需的要求。
R1CS 系统的使用费用大概是多少?好吧,让我们计算一下。我们需要在不同的曲线中,执行一个大小为 和一个大小为 的multiexp
运算。R1CS 系统中约束的最低成本是,在 1 比特的标量中实现 6 个约束。个标量乘法 × ( 每个标量乘法 255 比特 × ( 6个约束 / 1个比特 )) = 401,080,320个约束因此,鉴于此,如果我们使用基于 sqrt(N)-cost DLOG 的多项式承诺方案来实例化多项式承诺方案,则验证者将必须执行大小为 的multiexp
运算。如上的估计是使用简单的多重表达式算法进行的。如果改为使用流水线的 > 算法,该算法大致执行 ,其中 是 multiexp 的大小(即 ) 和 是标量的大小(即 )。 使用雅可比坐标,每个群运算中大约是16个场乘法,在 EVM 上每个场乘法操作大约需要 8 gas。所以总的来说,(非常乐观的估计下)EVM 成本是:然后还需要做一个大小为 $$2^{17}$$ 的multiexp
运算,结果需要14161个约束:所以总共大约是 101,101,661 gas。这是在非常乐观的估计下的约束成本,因为在电路内部有更多的计算也在进行,gas 成本也是乐观情况下的估计,因为流水线算法除了群运算外,还有其他可能在 EVM 昂贵的计算,同时因为链上验证者必须执行额外的运算操作没有基于 R1CS 的系统可用于此类任务。
基于 PLONK 的证明方案通常被认为是验证成本较低的方案。但是他们中的大多数(因为通常使用KZG承诺方案)需要可信设置。
那么如何在保持跨链桥费用便宜的同时,保证跨链桥无需信任呢?
那就是为辅助证明设计自定义的SNARK证明系统。好吧,不是真正的自定义(我们不能夸大),而是一种新颖的证明方案。
具体来说,我们名为Placeholder的自定义证明系统,正是出于这些原因而发明的。其基于 PLONK 的语法叠加 LPC 承诺方案。LPC 承诺方案为辅助 SNARK 证明带来了透明度,并且使用基于 PLONK 的语法可以减少生成的电路。
这也带来了更低的成本:单次验证消耗 3,594,270 gas。
具体来说。现在验证者的主要成本是 Merkle 证明验证()和低度测试 (), 其中 是多项式承诺的次数。根据https://eprint.iacr.org/2019/1400.pdf, 。为简单起见,对于低度测试只考虑最主要的成本,两次有限域上的反演大约需要 30000 gas。Keccak256 消耗 30 gas。标量乘法仍然是这两个组件中消耗最多的部分,因此需要完成正确的 PLONK 门构造。根据 Daira 的结果: https://github.com/zcash/zcash/issues/4254#issuecomment-565761663 ,似乎可以在每个标量比特下,在 3 个 PLONK Gate(多项式约束为3) 中执行 1 次标量乘法(3 列,每次乘法 3 行)。行数:低度测试:Merkle验证:整体Gas成本:因为它也同样需要做一个大小为 的multiexp
运算,对不同的规模重复上述相同的步骤需要 行,这需要 个低度测试增加merkle运算:整体Gas成本:主要的验证成本是这两个 MSM ,因此它们总共大约消耗: 。因为上限是5M gas,存在一些低估,这种标量乘法的证明系统看上去是可行的(即使这是一个非常粗略的估计)。Poseidon 哈希计算和线性大小的 MSM 计算将带来更多的验证成本。
什么时候上线?
第一个里程碑是引入一个特殊且优化良好的辅助验证电路设计,并且一丝不苟得执行(同时进一步降低验证成本)。预计这将在 2021 年第四季度(最有可能是 2021 年 11 月)完成。生产版本预计在 2022 年第一季度末左右推出。
之后将会有来另一篇博客解释这种特殊的设计。