什么是ZK-EVM
(资料图片仅供参考)
ZK-EVM是Zero-Knowledge(零知识证明)Ethereum Virtual Machine的缩写,它是一种基于以太坊区块链技术的应用程序开发平台。可以将EVM合约再无需修改的情况下直接部署运行,同时程序的运行可以通过零知识证明其计算的有效性。
源头还是要从以太坊扩容说起,以太坊扩容主要分为两类:链上扩容(On-Chain)与链下扩容(Off-Chain)。链上扩容这里暂时不表,链下扩容的主要方向就是Layer2,其中Layer2的两个主要方向就是Optimistic和ZK-Rollups,ZK-EVM就是ZK-Rollups重点发展方向。
ZK-Rollups是一种基于零知识证明技术的扩展性解决方案,而早期的零知识证明技术并不是直接针对EVM开发的,所以在很长一段时间内都无法直接应用于以太坊虚拟机(EVM)中,同时早期的以太坊在设计之初也没有考虑到 ZK,ZK不仅涉及密码学、数学也涉及到硬件知识等所以它们不兼容EVM的执行环境和指令集。
随着时间的推移,出现了一些新的零知识证明技术和工具,如ZKP(Zero-Knowledge Proof)和SNARK(Succinct Non-Interactive Argument of Knowledge)等,这些技术可以更好地与EVM兼容,加上EVM的普及和应用,目前EVM几乎成为以太坊生态的代名词,代表以太坊生态的开发者、应用和工具,因此ZK-EVM也就随之应运而生。目前ZK-EVM 主要项目包括 Starkware、zkSync 2.0、Polygon 和 Scroll 。
ZK-EVM的设计标准
目前来说, ZK-EVM 并没有统一的设计规格或者标准,所以每个项目方基于不同角度在兼容 EVM 和支持 ZK 之间权衡设计出各自方案,主要有两个方向:编程语言层面支持 与 字节码层面支持,下面我们比较不同的 zkEVM 协议并解释它们是如何工作的。
Polygon zkEVM
Polygon Hermez 是一个带有零知识虚拟机的Polygon ZK-rollup,旨在支持 EVM 兼容性。为此,EVM 字节码被编译成「微操作码」并在 uVM 中执行——一个使用 SNARK 和 STARK 证明来验证程序执行正确性的虚拟机。
结合这两种证明类型的决定具有战略意义。STARK(可扩展的透明知识论证)证明的生成速度更快,但 SNARK(简洁的非交互式知识论证)证明更小,在以太坊上验证成本更低。
Polygon Hermez zkEVM使用 STARK 证明电路来生成状态转换的有效性证明。STARK 证明验证 STARK 证明的正确性(将其视为生成「证明的证明」)并提交给以太坊进行验证。
zkSync zkEVM
zkSync 是一个与 EVM 兼容的 ZK-rollup,由 Matter Labs 开发并由其自己的zkEVM提供支持。ZkSync 使用以下策略实现与以太坊的兼容性:
将 Solidity 编写的合约代码编译成 Yul,一种中间语言,可以编译成不同虚拟机的字节码。将 Yul 字节码(使用 LLVM 框架)重新编译为专门为 zkSync 的 zkEVM 设计的自定义、电路兼容的字节码集。
与 Polygon Hermez 一样,zkSync zkEVM 在语言级别而不是字节码级别实现 EVM 兼容性。例如,zkSync 的 zkEVM 不支持传统的乘法和加法操作码(ADDMOD、SMOD、MULMOD)。
Scroll zkEVM
Scroll是一个正在开发的新的零知识 EVM 实现。Scroll 团队计划为每个 EVM 操作码设计零知识电路。这将允许开发人员在 Scroll 上部署以太坊原生智能合约 EVM,而无需修改底层 EVM 字节码。
除此之外,Scroll zkEVM 将使用「密码累加器(cryptographic accumulator)」来验证存储的正确性。这用于证明合约字节码是从给定地址正确加载的。
它还提供了一个将字节码与执行跟踪链接起来的电路。执行跟踪是一个序列,指定执行了哪些 VM 指令以及执行顺序。证明者将在证明生成期间提交执行跟踪,以验证计算与原始字节码是否一致。
Applied ZKP zkEVM
Applied ZKP是由以太坊基金会资助的一个项目,旨在开发与 EVM 兼容的 ZK-rollup 以及为以太坊区块生成有效性证明的机制。最后一部分至关重要,因为将块与有效性证明配对将消除节点重新执行块的需要。
Applied ZKP 的创新在于计算与存储的分离。它使用两种类型的有效性证明——状态证明和 EVM 证明:
状态证明
检查涉及存储、内存和堆栈的操作是否正确发生。状态证明本质上是验证读写操作的准确性。
EVM 证明
检查计算是否在正确的时间调用了准确的操作码。EVM 证明验证计算本身,并确认状态证明为每个操作码执行了正确的操作。
AppliedZKP zkEVM 使用总线映射来链接状态证明和 EVM 证明。此外,在以太坊区块被视为有效之前,必须验证这两个证明。
在 Vitalik 的博文里,他将 ZK-EVM 分为几种类型。其中,类型 1 是直接在以太坊上面直接开发 ZK-EVM,这个开发过于复杂而且目前效率太低,以太坊基金正在研究中。类型 2、类型 2.5 和类型 3 是 EVM 等效的 ZK-EVM,Scroll 和 Polygon Hermez 目前处于类型 3 这个阶段,朝着类型 2.5 乃至类型 2 努力。类型 4 是高级语言兼容的 ZK-EVM,包括 Starkware 和 zkSync。这些类型并无好坏之分,而且 ZK-EVM 也没有统一的标准。正如 Vitalik 所说,“从理论上讲,以太坊不需要为 L1 使用单一的 ZK-EVM 实现进行标准化;不同的客户可以使用不同的证明,因此我们继续从代码冗余中受益。”
标签: