编者按:
12 月 13 日,以太坊联合创始人 Vitalik Buterin 发文深入探讨了「ZK-EVM」(Zero-Knowledge Ethereum Virtual Machine)的可能实现形式,并对不同版本 ZK-EVM 的设计进行探讨。
Vitalik 提出的 ZK-EVM 概念,旨在减少 Layer-2 项目对 Ethereum 协议功能的重复实现,并提高其在验证 Layer-1 Ethereum 区块时的效率。文章指出,当前的 Layer-2 EVM 协议(如 Optimistic Rollups 和 ZK Rollups)需要依赖于 EVM 的验证机制,但这同时意味着他们必须信任庞大的代码库。一旦代码库中存在漏洞,这些虚拟机可能面临被攻击的风险。
此外,他还提到了对「almost-EVM」的支持,即允许 L2 的 VM 在与 EVM 只有微小差异的情况下,仍能使用协议内的 ZK-EVM,同时也为 EVM 的部分定制化提供了灵活性。以太坊上的 Layer-2 EVM 协议,包括 op rollup 和 ZK rollup,依赖于 EVM 验证。然而,这要求它们信任一个庞大的代码库,如果该代码库存在漏洞,这些虚拟机面临被黑客攻击的风险。此外,即使是希望与 L1 EVM 完全等同的 ZK-EVM,也需要一定形式的治理,以将 L1 EVM 的更改复制到它们自己的 EVM 实现中。 这种情况并不理想,因为这些项目正在复制以太坊协议中已经存在的功能,而以太坊治理已经负责升级和修复错误:ZK-EVM 基本上执行与验证 L1 以太坊区块相同的工作!此外,未来几年内,我们预计轻客户端将变得越来越强大,很快就会使用 ZK-SNARKs 完全验证 L1 以太坊执行。此时,以太坊网络将有效地拥有一个内置的 ZK-EVM。因此,问题出现了:为什么不将该 ZK-EVM 本地化提供给 rollup 项目呢? 本文将描述几个可能实现的「被奉为圭臬的 ZK-EVM」版本,并探讨权衡和设计挑战,以及不选择特定方向的原因。这些实现协议特性的优势应该与留给生态系统的好处和保持基础协议简单的利益相权衡。 我们对被奉为圭臬的 ZK-EVM 有哪些关键属性的期望?基本功能:验证以太坊区块。该协议特性(目前仍未确定是操作码、预编译还是其他机制)应至少接受预状态根、区块和后状态根作为输入,并验证后状态根是否确实是在预状态根的基础上执行区块的结果。 与以太坊多客户端理念的兼容性。这意味着我们希望避免奉行单一的证明系统,而是允许不同的客户端使用不同的证明系统。这反过来又意味着一些要点: · 数据可用性要求:对于使用被奉为圭臬的 ZK-EVM 证明的任何 EVM 执行,我们希望能够保证底层数据是可用的,以便使用不同证明系统的证明者可以重新证明执行,依赖该证明系统的客户端可以验证这些新生成的证明。 · 证明存在于 EVM 和区块数据结构之外:ZK-EVM 特性不会直接将 SNARK 作为 EVM 内输入,因为不同的客户端期望不同类型的 SNARK。相反,它可能类似于 blob 验证:交易可以包含需要证明的(预状态、区块主体、后状态)语句,操作码或预编译可以访问这些语句的内容,客户端共识规则将分别检查每个在区块中提出的声明的数据可用性和证明的存在。 可审计性。如果任何执行都得到证明,我们希望底层数据是可用的,以便在发生任何问题时,用户和开发者可以检查。在实践中,这增加了数据可用性要求重要性的另一个原因。 可升级性。如果发现特定的 ZK-EVM 方案存在漏洞,我们希望能够快速修复。这意味着不需要硬分叉来进行修复。这增加了证明存在于 EVM 和区块数据结构之外的重要性的另一个原因。 支持 almost-EVM 的网络。L2 的吸引力之一在于创新执行层的能力,并对 EVM 进行扩展。如果某个给定的 L2 的虚拟机(VM)与 EVM 仅有细微差异,那么如果 L2 仍然可以使用与 EVM 相同的原生协议内 ZK-EVM,仅对与 EVM 相同的部分依赖其自身代码,对于不同的部分则依赖于他们自己的代码,那将是很好的。这可以通过设计 ZK-EVM 特性的方式来实现,该特性允许调用者指定由外部提供的表处理的一些操作码、地址或位域,而不是由 EVM 本身处理。我们还可以在有限的范围内使燃气成本开放定制。 「开放」与「封闭」的多客户端系统「多客户端理念」可能是这个列表中最有主张的要求。有放弃这一理念的选择,集中精力研究一个 ZK-SNARK 方案,这将简化设计,但代价是对以太坊的一个更大的「哲学转变」(因为实际上这将是对以太坊长期多客户端理念的放弃)和引入更大的风险。在长期未来,例如形式化验证技术变得更好的情况下,可能更好地选择这条道路,但目前来看,风险似乎太大。 另一种选择是封闭的多客户端系统,在协议内已知一组固定的证明系统。例如,我们可能决定使用三个 ZK-EVMs:PSE ZK-EVM、Polygon ZK-EVM 和 Kakarot。一个区块需要携带这三个中的两个的证明才能被视为有效。这比单一的证明系统要好,但它使系统变得不太适应性,因为用户必须为每个已知的证明系统维护验证器,必然会存在政治性的治理过程来纳入新的证明系统等等。 这促使我更倾向于采用开放的多客户端系统,其中证明被放置在「区块之外」,并由客户端分别验证。个别用户可以使用他们想要的客户端来验证区块,只要至少有一个生成该证明系统证明的证明者。证明系统将通过说服用户运行它们而获得影响力,而不是通过说服协议治理过程。然而,这种方法确实具有更多的复杂性成本,我们将会看到。 我们希望 ZK-EVM 实现具备哪些关键特性?除了基本的正确功能和安全性保证之外,最重要的特性是速度。虽然可以设计一个协议内的 ZK-EVM 特性,其是异步的,仅在经过 N 个时隙的延迟后为每个声明返回一个答案,但如果我们可以可靠地保证在几秒内生成证明,那么每个区块中发生的一切都是自包含的问题将变得更容易。 尽管今天生成以太坊区块的证明需要很多分钟或小时,但我们知道没有理论上的阻止大规模并行化的原因:我们总是可以组合足够多的 GPU,分别证明区块执行的不同部分,然后使用递归 SNARKs 将这些证明组合在一起。此外,通过 FPGAs 和 ASICs 的硬件加速可能有助于进一步优化证明。然而,实际达到这一点是一个重要的工程挑战,不应该被低估。 协议内的 ZK-EVM 特性可能具体是什么样子?类似于 EIP-4844 Blob 交易,我们引入了一种包含 ZK-EVM 声明的新交易类型:





