{"content":{"title":"探索 zkEVM","body":">- 原文链接：https://medium.com/@chaisomsri96/an-exploration-of-zkevm-7ef744849866\r\n>- 译者：[AI翻译官](https://learnblockchain.cn/people/19584)\r\n>- 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/8039)\r\n    \r\n\r\n## 摘要\r\n\r\n在深入讨论这个主题之前，让我们花点时间探讨 zkEVM 是什么，零知识证明的理论基础，以及它如何在各种Layer2项目中迅速发展。本文旨在比较当前利用 zkEVM 的 ZK rollups 的特征，假设读者对以太坊、Layer2解决方案和零知识证明有基本了解。\r\n\r\n\r\n## 1. 扩展以太坊\r\n\r\n区块链**三难题**指的是在区块链系统中同时实现去中心化、安全性和可扩展性的困难。区块链**三难题**的概念始于 2014 年左右，但至今仍是第一层解决方案尚未解决的挑战。已经提出了各种策略来增强第一层的可扩展性，在以太坊的情况下，它被认为在所有区块链中提供了最高水平的去中心化和安全性。然而，由于高交易费用和处理速度缓慢，它在可扩展性方面面临挑战。\r\n\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377888202)\r\n\r\n一个最关键的解决方案是提高以太坊可扩展性的 Layer 2，通过在链下处理交易来提高速度并降低成本。Layer 2 解决方案可以根据其验证方法和数据可用性分为几种类型，如 Rollups、Plasma 和 Validium。在这些解决方案中，Rollups 是一种在链上发布交易数据的方法。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377815291)\r\n\r\nRollups 可以广泛分类为 ZK-Rollups 和乐观 Rollups，主要区别在于是否提交有效性证明。乐观 Rollups 在“**无罪推定**”上运作，在Layer2不提交任何有效性证明，而是被动接受挑战。相反，ZK-Rollups 在每次将数据发布到第一层块时主动提交有效性证明。\r\n\r\n本文将专注于使用 zkEVM 或 zkVM 生成证明的通用 ZK-Rollups。\r\n\r\n## 2. ZK-SNARK\r\n\r\n在深入研究 zkEVM 之前，了解 ZK-SNARK 是很重要的，它主要用于生成有效性证明。ZK-SNARK 代表零知识简洁非交互式知识论证，这是一种证明构造，其中可以证明拥有某些信息（例如秘密密钥）而不泄露该信息，并且在证明者和验证者之间没有任何交互。它同时满足 ZK（隐藏）和 SNARK（非交互）的属性，允许简洁验证。\r\n\r\n### 术语和概念解释\r\n\r\n**Setup**\r\n证明者和验证者各自具有用于生成和验证证明的参数的约定设置。\r\n\r\n**证明者(Prover)**\r\n\r\n将希望证明的功能转换为算术电路。然后将此电路转换为 Oracle（通常是多项式）形式。Oracle 经过密码编译成特定形式的承诺值，然后提交给验证者。\r\n\r\n**验证者(Verifier)**\r\n\r\n验证者通过验证逻辑计算从证明者接收的证明值，然后决定是否接受或拒绝证明。\r\n\r\nZK-SNARK 可以分为两部分：一部分表示程序的有效性作为一组约束，称为电路，另一部分将电路加密地转换为证明值。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377815289)\r\n\r\n### ZK-SNARK 的特征\r\n\r\nZK-SNARK 中有各种方案，每种方案都有其优缺点。因此，在选择用于 zkEVM 的证明方案时，重要的是仔细考虑 zkEVM 的形式和涉及的权衡。主要要考虑的特征主要包括：\r\n\r\n1. **可信设置**：\r\n每个电路的可信设置 — 需要为每个电路进行不同的可信设置（例如，Groth16）。\r\n- 通用可信设置 — 可以为所有电路使用单个可信设置（例如，KZG）。\r\n- 透明设置 — 不需要可信方，透明设置（例如，FRI）。\r\n\r\n2. **证明成本**：证明者生成证明所涉及的复杂性。\r\n\r\n3. **验证成本**：由于 ZK rollup 验证通常发生在链上，它直接影响Gas费用。\r\n- 证明大小 — 证明大小相对于电路大小的大小（例如，KZG — O(1)，IPA — O(log N)）。\r\n- 验证器时间 — 验证者的证明验证逻辑的时间复杂度（例如，KZG — O(1)，IPA — O(N)）。\r\n\r\n### 密码系统和证明方案\r\n\r\n证明方案可以根据其使用的密码系统进行分类。每种方案的密码基础影响其成本（证明大小和验证器时间）。\r\n\r\n1. 基于配对的：利用椭圆曲线上的双线性配对的方案（例如，KZG）。\r\n2. 基于离散对数的：依赖于椭圆曲线离散对数问题（ECDLP）的方案（例如，Bulletproofs）。\r\n3. 基于哈希的：使用哈希的方案（例如，FRI）。\r\n\r\n此外，这些密码系统需要设置来生成协议中使用的参数。设置可以广泛分类为三种类型：\r\n\r\n1. **非通用设置**：需要一个可信方和一个唯一的设置用于每个电路。\r\n2. **通用设置**：需要一个可信方，但从单个设置生成的参数可以在所有电路中重复使用。\r\n3. **透明设置**：不需要可信方。\r\n\r\n由于可信设置中参数的安全性取决于可信方，因此与透明设置相比，它被认为不太安全。此外，非通用设置需要为每个电路进行新设置，使得透明、通用和非通用设置的首选顺序依次为透明、通用和非通用。\r\n\r\n下面是一个表格，说明了每种方案的复杂性和设置方法。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377859209)\r\n\r\n证明方案的分类 | 来源：[zk-learning.org](https://zk-learning.org/)\r\n\r\n因此，考虑到每种方案的复杂性和设置方法的差异，选择最符合使用协议特征的方案至关重要。\r\n\r\n## 3. 什么是 zkEVM？\r\n\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240429161327.jpeg)\r\n生成零知识证明的证明需要大量计算，但 ZKP 技术的进步，如查找和递归，使得能够高效生成更大电路的证明成为可能。\r\n第一代 ZK-Rollups，如***Polygon Hermez v1.0***，是特定应用程序的 Rollups，只能处理特定功能，如转账。\r\nZK 技术的进步为构建通用 ZK-Rollups 奠定了基础。\r\n通用 ZK-Rollups 利用 zkEVM，可以证明以太坊虚拟机上的操作的计算有效性。\r\n\r\n现在，是时候更仔细地看一下**zkEVM**了。\r\n\r\n## 4. zkEVM 的架构\r\n\r\n如前所述，ZK-SNARK 是一种证明方法，它使用加密协议从一组约束（称为电路）生成证明。在 zkEVM 中，程序可以被视为以太坊虚拟机（EVM）本身，与 EVM 的逻辑有效性相关的约束可以被视为 zkEVM 电路。\r\n\r\n### zkEVM 证明数据\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377888042)\r\n\r\nzkEVM 是一个电路，用于证明所有交易是否已正确执行，从根本上验证 EVM 执行跟踪的正确性。需要证明的方面包括 EVM 中的字长是否为 256 位，操作码执行的结果是否正确，以及堆栈和内存中的值是否已正确读取和写入，涵盖了 EVM 执行有效性的所有方面。\r\n\r\nzkEVM 证明者使用的输入数据如下：\r\n- **输入**：以太坊当前的世界状态 *t*，新的世界状态 *t*+1，以及 L2 交易。\r\n- **见证**：执行跟踪。\r\n\r\n利用这些数据，证明者验证所有执行跟踪的有效性，包括代码哈希、Gas 使用情况，以及程序计数器和堆栈指针处读取和写入的数据，还有操作码和执行有效性的所有其他方面。\r\n\r\n### 示例 — ADD\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377859218)\r\n\r\n来源：[zk-learning.org](https://zk-learning.org/)\r\n\r\n上图是一个示例，展示了 ADD 操作的有效性。在 zkEVM 电路中，每个执行跟踪步骤有三种主要类型的约束：\r\n\r\n1. **步骤上下文**\r\n   \r\n   与上下文相关的约束，如程序计数器和堆栈指针，以及 Gas 使用情况。在示例中，它验证程序计数器和堆栈指针是否都增加了一个，并且是否消耗了 3 个 Gas 单位。\r\n2. **Case 开关**\r\n   \r\n   这检查该步骤中使用的操作码。每个操作码都存在作为选择器，并验证每个步骤中仅使用了一个操作码。\r\n3. **操作码特定见证**\r\n   这些是针对需要验证的每个操作码的附加约束。在示例中，它检查加法操作生成的 Carry 的大小是否为 2¹²⁸。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377888054)\r\n\r\n来源：[zk-learning.org](https://zk-learning.org/)\r\n\r\n此外，为了确定每个步骤中的值是否已在堆栈、内存和存储中正确读取和写入，使用了一个 Lookup 参数。Lookup 参数是一种证明查找表中某个值存在的方法。\r\n\r\n### zkEVM 结构\r\n\r\nzkEVM 的结构因项目而异，但使其能够证明如此庞大电路的因素之一是上述的 Lookup 参数。\r\nLookup 是一种创新方法，不直接处理电路内的操作，而是证明预编译表中的值存在。\r\n大多数 zkEVM 基本上都有一个 EVM 电路，用于验证 EVM 跟踪的正确性，以及用于希望证明的值的几个预编译 Lookup 表。例如，在电路中计算以太坊中使用的 Keccak 哈希函数将是昂贵的，但使用用于查找的预编译 Keccak 表可以减少约束。\r\n因此，zkEVM 通常由用于验证执行跟踪的主要 EVM 电路和用于查找的辅助电路组成。\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377823807)\r\n\r\nzkEVM 的另一个关键任务是如何减少证明数量，这取决于所使用的证明方案。在 ZCash 使用的 Halo2（IPA）中，证明通过使用 Pasta 曲线进行递归累积。而使用 Halo2（KZG）的 Scroll 则采用不支持循环的 BN254 曲线，需要另一个聚合电路来组合证明。\r\n\r\n## 5. 优化\r\n\r\n因此，zkEVM 利用 ZK-SNARKs 的特性 — 最小的证明大小和验证成本 — 将有效性证明提交到Layer1，有效解决了可扩展性问题。然而，使用 zkEVM 的 ZK-Rollup 面临的主要挑战是高昂的证明成本。正在努力从各个角度优化 zkEVM 以克服这一挑战。优化方法可以大致分为两类：\r\n\r\n- **理论优化**：旨在在理论上优化现有方案或设计更高效的证明方案的研究。最近的发展包括对 Folding 技术的研究，如 Hyper Nova 和 Protostar，以及新的 Lookup 方案，如 MVLookup 和 Baloo。\r\n- **工程优化**：包括软件级别的优化，如内存优化和并行处理，以及硬件优化延伸到 GPU、FPGA 和 ASIC。\r\n\r\n## 6. zkEVM 的类型\r\n\r\n![img](https://img.learnblockchain.cn/attachments/migrate/1714377551722)\r\n\r\n不同类型的 ZK-EVM | 来源：[Vitalik’s 博客](https://learnblockchain.cn/article/5024)\r\n\r\nVitalik Buterin 对**zkEVM**的分类系统将其分为四类：\r\n\r\n1. **Type 1**：与以太坊共存的 zkEVM，完全兼容以太坊共识层。这种类型继承了以太坊的安全性和所有基础设施，提供了显著的好处。但是，证明成本相当高。Taiko 目前正在开发一种类型 1 的 zkEVM。\r\n2. **Type 2**：与 EVM 兼容的 zkEVM。这些涉及对 ZK 进行的更改，例如用 ZK-Trie 等 ZK 友好结构替换以太坊的 MPT，同时仍在 EVM 层保持兼容性。Scroll 是这一类别中的领先项目。\r\n3. **Type 3**：此类型删除了 ZK 不友好的操作码或结构，这意味着以太坊 DApp 不能直接接入而需要进行一些修改。\r\n4. **Type 4**：利用自己的 ZK 友好语言和虚拟机，使其与以太坊不兼容。然而，与其他类型相比，它具有生成证明速度更快的优势。StarkNet 和 zkSync 是这种类型的突出示例。\r\n\r\n从Type 1 到Type 4，与以太坊的兼容性逐渐降低，但好处是生成证明的成本降低。\r\n尽管**Type 1** zkEVM 尚未商业化，但随着计算中的优化，如 Lookup 和 Recursion，变得足够先进，未来可能会出现它们的使用。\r\n\r\n## 7. 结论\r\n\r\nZK-Rollup 仍然是一项新兴技术，还有很长的路要走。尽管已经尝试了许多优化计算的方法，但生成证明仍然需要高昂的成本，硬件要求也很高。\r\n此外，这一领域的技术复杂性带来了很高的准入门槛，导致缺乏能够引领这一领域的专家和支持。\r\n然而，不可否认的是，ZK-Rollup 正在以非常快的速度发展，并且是有望解决以太坊可扩展性问题的有希望的解决方案之一。\r\n\r\n## 参考资料\r\n\r\nhttps://zk-learning.org/\r\n\r\nhttps://vitalik.eth.limo/general/2022/08/04/zkevm.html\r\n\r\nhttps://docs.scroll.io/en/technology/zkevm/zkevm-overview/\r\n\r\nhttps://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf\r\n\r\nhttps://zcash.github.io/halo2/\r\n\r\nhttps://ethereum.org/en/layer-2/\r\n\r\nhttps://ethereum.org/en/developers/docs/scaling/zk-rollups/\r\n\r\nhttps://chain.link/education-hub/zero-knowledge-rollup\r\n\r\nhttps://chain.link/education-hub/what-is-layer-2\r\n\r\n \r\n\r\n> 本文由 AI 翻译，欢迎小伙伴们来[校对](https://github.com/lbc-team/Pioneer/blob/master/translations/8039.md)。"},"author":{"user":"https://learnblockchain.cn/people/19584","address":"0xbEb536001cB9c343447519ad32F6db2bB7d45D3D"},"history":null,"timestamp":1714379051,"version":1}