# 探索 zkEVM 与 Polygon zkEVM

> 从设计上看，Polygon zkEVM 是一个兼容 EVM 的 zk-rollup。它的目标是提升吞吐量、性能和效率。

作者 Shodipo Ayomide，发布于 2022年10月4日。网页版本：https://blog.shodipoayomide.com/zh/an-exploration-of-the-zkevm-the-polygon-zkevm

![探索 zkEVM 与 Polygon zkEVM](https://blog.shodipoayomide.com/banners/An-Exploration-of-the-zkEVM-The-Polygon-zkEVM.png)

## 简介

从设计上看，Polygon zkEVM 是一个兼容 EVM 的 zk-rollup。它的目标是提升吞吐量、性能和效率。借助 Plonky2（一项前沿的 zk 扩容技术），它能够生成轻量级的证明，同时支持对 SNARK 进行递归验证，从而让用户可以快速地验证证明。

除了缩短证明生成时间之外，zkEVM 现在还能让交易变得非常便宜，使 zkEVM 上的每一个去中心化应用都更具成本效益。

## Ethereum 的可扩展性问题

目前，想要在 Ethereum 上构建面向大众的去中心化应用并不现实，因为交易需要很长时间才能被处理，而且费用相当昂贵，这会带来糟糕的用户体验，也阻碍了真正有意义的普及。

这个问题背后的原因在于，参与网络的每一个节点都需要处理每一笔交易，导致每秒只能处理 13 笔交易。

## ZK-rollup 的作用

Zk-Rollup 是继 Optimistic Rollup 之后的第二类 rollup。它们与 Optimistic Rollup 的不同之处在于，它们通过生成被称为零知识证明（zk-proof）的密码学证明来验证已经打包成批次的交易，而不是像 Optimistic Rollup 那样使用延迟期（挑战期）机制，这让 zk-rollup 的速度更快。

Zk-rollup 的成本要低得多，因为它们会把交易打包成一个批次，并且只提交这些交易的证明。在此之前，支持智能合约的 ZK-rollup 都要求开发者离开 Ethereum 生态，因为它们与 EVM 并不兼容。

Polygon 已经率先构建了一个 ZK-rollup，它带有一个支持 Ethereum 字节码的代码运行时环境，这就是 Polygon zkEVM。这让开发者免去了从零开始编写代码的麻烦，他们可以轻松地把自己的智能合约迁移到 zkEVM 上。

{" "}

![探索 zkEVM 与 Polygon zkEVM](https://i.ibb.co/hyjX19m/images-40.jpg)

*Hermez zk-rollup 架构.*

## 为什么说 zkEVM 是未来

在讨论 zkEVM 为什么比传统 EVM 更好之前，我们需要先了解传统 EVM 是如何工作的。

Ethereum 虚拟机（EVM）是一个图灵完备的虚拟机，它充当智能合约的运行时环境。当一笔交易发生时，所有的合约字节码都会从源代码编译而来，并上传到 EVM 的存储中，点对点网络中的节点会在这里执行。这些节点会使用相同的交易输入，确保它们得到正确的结果。

接下来，EVM 的操作码（opcode）会与 EVM 的不同状态进行交互，从状态存储中读取值，然后把新的值写入 EVM 的存储。

最后，新的值会被新的节点复制，这个状态会一直保持，直到下一笔交易被处理。

![探索 zkEVM 与 Polygon zkEVM](https://i.ibb.co/WW0HD8M/images-1.png)

*Ethereum 虚拟机：EVM 执行模型示意图.*

zkEVM 也基于同样的原理运行，但它更进一步，确保数据得到更好的校验。除了 EVM 中提到的那些步骤之外，zkEVM 还会检查加载的字节码是否正确、是否来自正确的地址。它还会确保区块链上的数据与 EVM 中的数据保持一致。

## Polygon zkEVM 架构

和 EVM 一样，zkEVM 的主要功能是支持智能合约。它会编译 L2 交易、执行状态转换，并通过生成有效性证明来证明这些状态变更的有效性。

**zkEVM 有 5 个主要组成部分：**

- 发送交易的用户
- 一种名为效率证明（Proof-of-Efficiency）的共识机制
- 一个 LX-to-LY 跨链桥，它是一个智能合约，用户可以用它在不同层之间转移资产
- 一种生成有效性证明的专用硬件，称为 zkProver
- 一个名为 zkNode 的软件，网络参与者用它来治理网络以及进行同步。

![扁平化合约](https://i.ibb.co/80ZNzyG/fig-simple-poe.png)

*PoE 智能合约示意图*

### 排序器（Sequencer）

排序器从网络用户那里收集 L2 交易，然后把这些交易打包成一个批次，并把这个批次提交给 PoE 智能合约。排序器这个角色是无需许可的，任何人只要在自己的机器上运行 zkNode 软件，就可以成为排序器。这提升了网络的去中心化程度。

想要在 L1 上提交批次的排序器，必须支付 L1 的 gas 费用，并额外存入一笔代币费用。这有助于防范垃圾交易，同时也激励排序器只提交有效的交易。用户支付的批次费用，就是排序器获得激励的方式。

提交的批次会以 calldata 的形式发布到 L1 上。任何新的无需许可节点都会重建这些数据，并同步自己的状态。一旦被打包上链，L1 交易就决定了 L2 交易的执行顺序。此时会产生一个确定性的新状态，但只有当有效性证明被发送到 L1 之后，这个新状态才会真正确立。这正是聚合器（aggregator）发挥作用的地方。

{" "}

![扁平化合约](https://i.ibb.co/q5C6WCk/png-20220911-144628-0000.png)

*排序器是如何工作的*

### 聚合器（Aggregator）

聚合器的作用是为排序器提交的 L2 交易批次生成有效性证明。批次被提交时，会按照它们的位置进行排列，并且包含交易数据。

接下来，聚合器会使用一种名为 zkProver 的专用硬件，竞相为每个批次生成有效性证明。第一个生成证明的聚合器，将获得排序器存入的 Matic 费用作为奖励。

聚合器这个角色同样向所有人开放，只要安装了 zkNode 软件并且能够运行 zkProver 即可。

![扁平化合约](https://i.ibb.co/syX6vXM/png-20220911-145742-0000.png)

*聚合器是如何工作的*

## zkEVM 设计的特点

**等效 EVM（EVM-Equivalent）** - Polygon 的 zkEVM 具备“字节码级别”的兼容性。这意味着它在 EVM 操作码层面和 Solidity 语言层面都完全兼容。所有在 Ethereum 上运行的工具和智能合约，都不需要做任何修改就能在 zkEVM 上运行。
**安全** - zkEVM 的大部分安全性继承自 Ethereum，与此同时，它还采用了 zk-STARK 和 zk-SNARK 等零知识证明来确保：状态变更发生时是正确执行的；会生成证明状态变更的证明；并且这些证明会在链上公开以供验证。
**去中心化且无需许可** - 任何人只要根据自己想要扮演的角色具备相应的工具，就可以参与到网络中。
**高效** - 由于效率是网络性能的关键，最高效的聚合器才能提供有效性证明并获得激励，同时所有计算都在链下完成，只有零知识证明和必要的数据会保存在链上。

---

## 总结

zkEVM 是普通虚拟机的改进版本，它能以更快、更安全的方式执行交易。Polygon 将会把整个项目开源，任何想要以更好、更便宜、更快的方式使用 Ethereum 的人都可以使用它。

这是一项非常复杂的技术，但我们正在全力推进开发，迫不及待地想向你展示我们一直在做的东西。
