第二,EVM 的 word 大小是 256 位。EVM 基于 256 位整数运行(就像大多数基于 32~64 位整数运行的普通虚拟机那样),零知识证明则 「天然」 基于素域运行。在电路中进行 「错配域算术」 需要范围证明,进而给每个 EVM 操作增加大约 100 个约束。这会将 EVM 电路大小增加两个数量级。 第三,EVM 有许多特殊的操作码。不同于传统虚拟机,EVM 有很多特殊的操作码,如 CALL ,以及与执行环境和 gas 相关的错误类型。这会给电路设计带来新的挑战。 第四,EVM 是基于堆栈的虚拟机。SyncVM(zksync)和 Cario(starkware)架构在基于寄存器的模型中定义自己的 IR/AIR。它们构建了一个专门的编译器来将智能合约代码编译成一个新的零知识证明友好型 IR。该方法是语言兼容的,而非原生 EVM 兼容的。无论是证明基于堆栈的模型,还是直接支持原生工具链,都会变得更加困难。 第五,以太坊存储布局带来了高昂的成本。以太坊存储布局高度依赖 Keccak 和一个巨型 MPT4。二者都不是零知识证明友好型的,而且会产生高昂的证明成本。例如,Keccak 哈希的电路大小是 Poseidon 哈希的 1000 倍。但是,如果你将 Keccak 哈希替换成另一种哈希,就会给现有的以太坊基础设施带来一些兼容问题。 第六,基于机器的证明带来了高昂的成本。即使你可以妥善处理上述所有问题,你依然需要找到一种有效的方法来将它们组合起来得到一个完整的 EVM 电路。正如我在上一节中提到的,即使像 add 这样简单的操作码也有可能需要你负担整个 EVM 电路的成本。 为何 zkEVM 在当下有可能实现得益于研究者取得的重大进展,过去两年里越来越多效率问题得到了解决,zkEVM 的证明成本终于不再是障碍!最主要的技术进展体现在以下几个方面: 多项式承诺(polynomial commitment)的使用。过去几年来,大多数简洁零知识证明协议都使用 R1CS,PCP 查询被编码到了特定于应用的受信任起步设置(trusted setup)中。这往往会增加电路的大小,导致很多自定义优化都无法实现,因为每个约束的度必须是 2 (双线性配对(bilinear pairing)只允许进行一次指数乘法计算)。有了 多项式承诺方案,你可以通过通用设置(universal setup)乃至透明设置(transparent setup)将你的约束提高到任何阶,大幅提高了后端选择的灵活性。 查找表参数和自定义小工具的出现。另一个重要优化是查找表的使用。这个优化首次提议于 Arya,然后在 Plookup 中得到实现。对于零知识证明不友好型原语(即,AND 和 XOR 等位运算)来说,查找表可以省很多事。自定义小工具 可以高效实现高阶的约束。TurboPlonk 和 UltraPlonk 定义了优雅的程序语法,降低了使用查找表和定义自定义小工具的难度。这对于降低 EVM 电路的成本帮助很大。 (责任编辑:admin) |