链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

Polygon zkEVM
扫地僧
2022-10-10 12:11:08

Polygon zkEVM 是一种基于加密证明的去中心化以太坊第 2 层可扩展性解决方案,可为交易提供验证和快速确定性。

本文档介绍了 Polygon zkEVM。从 Polygon zkEVM 的架构概述开始,文档逐步级联到 zkEVM 子组件的更详细的细节。

然而,我们强调此文档仍处于工作中(WIP)。有些方面已经更详细地介绍了,而其他方面仍需要进一步扩展。此外,本文档的部分内容可能会在以后重新组织,以实现更好的流程。

一. zkEVM 的架构概述

除了其前身的设计目的之外,zkEVM 的主要功能是提供智能合约支持。它执行由以太坊第 2 层交易执行(用户发送到网络的交易)产生的状态转换任务。随后,通过采用零知识证明技术,它生成有效性证明,证明这些在链下执行的状态更改计算的正确性。

zkEVM 的主要组件有:

  • 效率证明 (PoE) 共识机制。
  • zkNode 软件包括 synchronizer, sequencer and aggregator.
  • LX 到 LY bridge。
  • zkProver
  • 创建交易的 zkEVM 网络的活跃用户。

zkEVM 的架构如下图所示:

二. 共识算法:效率证明

我们的早期版本 Polygon Hermez 1.0 基于捐赠证明 (PoD) 共识机制。该模型决定谁将成为下一批创建者。PoD 是一种自动进行的去中心化拍卖,参与者(协调者)投标一定数量的代币,以便他们有机会创建下一批。

但是,对于当前 2.0 的实施,需要用更简单的效率证明 (PoE) 模型替换 PoD。让我们看看为什么 PoE 优于 PoD。

1.为什么 PoD 不是最佳选择?

PoD 模型超出了我们的首选选项,原因如下:

  • PoD 作为一种拍卖模型,已被证明对于协调者和验证者来说都相当复杂。此外,它也被证明在经济上不太可行。
  • 这种共识机制容易受到攻击,尤其是在引导阶段。在任何给定时间点,网络都由未经许可的参与者控制。如果此类第三方变得恶意或遇到操作问题,这会增加网络遭受服务级别延迟的风险。
  • PoD 分配了在特定时间范围内生产批次的权利,如果要获得任何经济激励,验证者需要非常有竞争力。
  • 选择“最佳”运营商的效果相当于“赢家通吃”的模式,这对性能略逊一筹的竞争对手不公平。因此,只有少数选定的运营商比其他运营商更频繁地验证批次,这违背了网络去中心化的概念。
  • 另一个缺点是拍卖协议对于验证者来说非常昂贵和复杂。拍卖需要提前一段时间出价。

2.为什么 PoE 是更好的模型?

效率证明 (PoE) 模型利用现有的捐赠证明机制,并支持多个协调者的无许可参与在 L2 层生产批次。这些批次是从第 1 层的汇总事务创建的。与 PoD 相比,PoE 采用更简单的机制,并且由于其更高效地解决 PoD 固有的问题而被首选。

PoE 的战略实施承诺确保网络:

  • 保持其“无许可”功能以生产 L2 批次
  • 是否有效,这是衡量整体网络性能的关键标准
  • 达到可接受的去中心化程度
  • 免受恶意攻击,尤其是验证者的攻击
  • 在整体验证工作和网络价值之间保持成比例的平衡。

注意:目前正在探索将 PoE 与 PoS(权益证明)耦合的可能性。

3. 链上数据可用性的混合模式

完整的 zk-rollup 模式要求数据(用户重建完整状态所需的数据)和有效性证明(零知识证明)都在链上发布。然而,考虑到以太坊的设置,在链上发布数据会产生汽油费,这是第 1 层已经存在的问题。这使得很难在完整的 zk-rollup 配置和混合配置之间进行选择。

在混合模式下,以下任一情况都是可能的:

  • Validium:数据存储在链下,只有有效性证明在链上发布。
  • Volition:对于某些交易,数据和有效性证明都保留在链上,而对于其余交易,只有证明在链上。

除非可以高度加速证明模块以降低验证者的成本,否则混合模式仍然可行。该团队尚未最终确定最佳共识配置。

四. PoE 智能合约

zkEVM 中的底层协议通过使用有效性证明来确保状态转换是正确的。为了确保遵循一组预先确定的规则以允许状态转换,使用了智能合约。智能合约对有效性证明的验证检查每个转换是否正确完成。这是通过使用 zk-SNARK 电路实现的。这种机制需要两个过程:交易批处理和批处理交易的验证。zkEVM 使用两种类型的参与者来执行这些过程:Sequencer 和 Aggregator。在这个两层模型下:

  • 排序器向网络提出交易批次,即将交易请求汇总到批次,并将它们添加到 PoE 智能合约中。
  • 聚合器检查交易批次的有效性并提供有效性证明。任何未经许可的聚合器都可以提交证明来证明状态转换计算的正确性。

因此,PoE 智能合约进行了两个基本调用:一个调用从排序器接收批次,另一个调用聚合器,请求验证批次。请参见下面的图 2:

五. 效率证明 代币经济学:定序器和聚合器

PoE 智能合约对定序器和聚合器提出了一些要求。

1.定序器

Sequencer 接收来自用户的 L2 交易,将它们作为新的 L2 批次进行预处理,然后将该批次作为有效的 L2 交易提交给 PoE 智能合约。

  • 任何拥有运行 zkEVM 节点所需软件的人都可以成为 Sequencer。
  • 每个 Sequencer 都必须以 MATIC 代币的形式支付费用,以获得创建和提议批次的权利。
  • 提议有效批次(由有效交易组成)的排序器会受到交易请求者或网络用户支付的费用的激励。

2.聚合器

聚合器从排序器接收所有交易信息,并将其发送给证明者,证明者在复杂多项式计算后提供小型 zk 证明。智能合约验证了这个证明。这样,聚合器收集数据,将其发送给证明者,接收其输出,最后将信息发送给智能合约,以检查来自证明者的有效性证明是否正确。

  • Aggregator 的任务是为 Sequencers 提出的 L2 交易提供有效性证明。
  • 除了运行 zkEVM 的 zkNode 软件外,聚合器还需要专门的硬件来创建零知识有效性证明。我们在这里称其为 zkProver。(您将在本文档后面部分了解它)。
  • 对于给定的一个或多个批次,提交有效性证明的聚合器首先获得 Matic 费用(由批次的排序器支付)。
  • 聚合者需要表明他们验证交易的意图,然后他们根据自己的策略竞争产生有效性证明。

4.zkNode

zkNode 是运行 zkEVM 节点所需的软件。它是网络实现同步和管理参与者(排序器或聚合器)角色所需的客户端。

1. zkNode 架构

zkNode 架构由以下部分组成:

  • Sequencers and Aggregators:Polygon zkEVM 参与者将选择他们的参与方式;要么作为节点了解网络的状态;或作为两个角色中的任何一个参与批量生产过程:Sequencer 或 Aggregator。聚合器运行 zkNode,但也使用 zkEVM 的核心部分执行验证,称为 zkProver(在下面的图 3中标记为Prover。)
  • Synchronizer:除了排序和验证过程之外,zkNode 还可以同步批次及其有效性证明,这仅在将它们添加到 L1 之后才会发生。这是使用称为同步器的子组件完成的。同步器负责从智能合约中获取所有数据,其中包括排序器(交易)发布的数据和协调器发布的数据(这是有效性证明)。所有这些数据都存储在一个巨大的数据库中,并通过名为“JSON-RPC”的服务提供给第三方。
  • Synchronizer负责从以太坊区块链读取事件,包括新批次以保持状态完全同步。从这些事件中读取的信息必须存储在数据库中。Synchronizer 还处理可能的重组,这将通过检查最后一个ethBlockNum和最后一个ethBlockHash是否同步来检测。

  • RPC : RPC (Remote Procedure Call) 是一个与以太坊兼容的 JSON RPC 接口。对于与以太坊区块链交互的软件应用程序(通过读取区块链数据和/或向网络发送交易),它必须连接到以太坊节点。RPC 支持 zkEVM 与 Metamask、Etherscan 和 Infura 等现有工具的集成。它将事务添加到池中并使用只读方法与状态交互。
  • State:实现 Merkle Tree 并连接到 DB 后端的子组件。它检查块级别的完整性(与气体和块大小相关的信息等)和一些与交易相关的信息(签名、足够的余额)。State 还将智能合约代码存储到 Merkle 树中,并使用 EVM 处理交易。
  • zkProver:交易有效的所有规则都在 zkProver 中实施和执行。zkProver 以多项式和汇编语言的形式执行复杂的数学计算;然后在智能合约上验证这些。这些规则可以被视为事务必须完成的约束,以便能够修改状态树或退出树。zkProver 是最复杂的模块;它需要开发两种新的编程语言来实现所需的元素。阅读下文以了解有关 zkProver 的更多信息。

5. zkProver

zkEVM 采用先进的零知识技术来创建有效性证明。它使用零知识证明器 (zkProver),旨在在任何服务器上运行,并且被设计为与大多数消费类硬件兼容。每个聚合器都将使用这个 zkProver 来验证批次并提供有效性证明。zkProver 有自己的详细架构,如下所述。它由一个主状态机执行器、一组辅助状态机(每个都有自己的执行器)、一个 STARK 证明构建器和一个 SNARK 证明构建器组成。zkEVM zkProver 的简化图参见下图

简而言之,zkEVM 以多项式形式表示状态变化。因此,每个提议的批次必须满足的约束实际上是多项式约束或多项式恒等式。也就是说,所有有效批次必须满足某些多项式约束。

5.1. zkProver 架构

zkNode 架构由以下部分组成:

  1. 主状态机执行器:主执行器处理 zkEVM 的执行。这是使用团队专门开发的新零知识汇编语言(或 zkASM)解释 EVM 字节码的地方。执行器还设置了每批有效交易必须满足的多项式约束。该团队专门开发的另一种语言称为 多项式标识语言(或 PIL),用于对所有多项式约束进行编码。

  2. 辅助状态机:证明交易正确性所需的每个计算都在 zkEVM 中表示为状态机。zkProver 是整个项目中最复杂的部分,由几个状态机组成;从执行按位功能(例如,XORing、填充等)到执行散列(例如,Keccak、Poseidon),甚至验证签名(例如,ECDSA)。

因此,次要状态机的集合是指 zkProver 中所有状态机的集合。它本身不是子组件,而是各个辅助状态机的各种执行器的集合。状态机的集合是:

  • Binary SM
  • Memory SM
  • Storage SM
  • Poseidon SM
  • Keccak SM
  • Arithmetic SM

有关这些 SM 之间的依赖关系,请参见下面的图 。

虽然一些 SM 同时使用 zkASM 和 PIL,但其他 SM 仅依赖其中一种语言,具体取决于每个 SM 负责的具体操作。

  • STARK Proof Builder: STARK 代表“可扩展的透明知识论证”,是一种证明系统,它使证明者能够在不需要可信设置的情况下生成可验证的证明。一个 STARK 证明生成器是指用于生成零知识 STARK 证明的子组件,它是证明所有多项式约束都得到满足的事实的 zk 证明。状态机生成多项式约束,并且 zk-STARK 用于证明批次满足这些约束。特别是,zkProver 使用“Fast Reed-Solomon Interactive Oracle Proofs of Proximity (RS-IOPP)”,俗称FRI来促进快速 zk-STARK 证明。
  • SNARK Proof Builder:SNARK 代表“简洁的非交互式知识论证”,是一个产生可验证证明的证明系统。由于 STARK 证明比 SNARK 证明大,zkEVM zkProver 使用 SNARK 证明来证明这些 STARK 证明的正确性。因此,在 L1 上验证成本要低得多的 SNARK 证明作为有效性证明发布。目的是生成可用于生成或验证 SNARK 证明的CIRCOM电路。zkEVM 是否会使用 PLONK 或 GROTH16 SNARK 证明是一个需要讨论的问题。

六. LX 到 LY 桥

LX-LY 桥是一种智能合约,允许用户在 LX 和 LY 两层之间转移他们的资产。zkEVM 中的 L1-L2 是用于安全存取资产的去中心化桥梁;它是两个智能合约的组合,一个部署在一个链上,另一个部署在另一个链上。

zkEVM 中的 L1 和 L2 合约是相同的,只是分别部署在哪里。Bridge L1 合约位于以太坊主网上,用于管理 rollup 之间的资产转移,而Bridge L2 合约位于特定的 rollup 上,负责主网和 rollup(或 rollup)之间的资产转移。第 2 层互操作性允许本地机制在不同的 L2 网络之间迁移资产。该解决方案嵌入在桥接智能合约中。

1. bridge L1 合约

Bridge L1 Contract 执行两个操作:bridge和claim。该bridge操作将资产从一个汇总转移到另一个汇总,而该claim操作适用于合约从任何汇总中提出索赔的情况。

桥 L1 合约需要两棵 Merkle 树才能执行上述操作:globalExitTree和mainnet exit tree。globalExitTree包含所有汇总的退出树的所有信息,而包含与mainnet exit tree主网交互的用户进行的交易的信息。名为全局出口根管理器 L1的合约负责管理跨多个网络的出口根。

出口树结构如下图所示

2. bridge L2 合约

桥接 L2 合约部署在 L2 层上,上面有以太币。以太币将设置在创世币上,以便能够铸造/燃烧原生以太币。

globalExitTreeBridge L2 Contract 还需要Merkle 树中包含的所有 rollup 的退出树的所有信息。在这种情况下,名为全局出口根管理器 L2的智能合约负责管理跨多个网络的出口根。

注意:在 L1 的 PoE 智能合约中验证批次时,会在全局出口根管理器 L1 中更新汇总出口根。bridgeBridge L2 Contract 处理和操作的汇总端,以及与和claim交互,主要是更新出口根。globalExitTreerollup exit tree

3. LX 到 LY 桥

通常,桥接智能合约是 L2-to-L1 桥接,但 zkEVM 桥接更灵活且可互操作。它可以充当任意两个任意第 2 层链 L2_A 和 L2_B 之间或任何第 2 层(例如 L2_X)和 L1(以太坊区块链)之间的桥梁。因此,它允许在多个汇总之间转移资产。因此,术语“LX 到 LY 桥”。

七. zkEVM 设计特点

上述部分中描述的架构细节(用于工程和实现)将帮助 zkEVM 实现其设计目标。这将意味着一个网络:无需许可、去中心化、安全、高效并带有可验证的块数据。

开发工作的目标是无许可,即允许任何拥有 zkEVM 软件的人参与网络。例如,共识算法将使每个人都有机会成为 Sequencer 或 Aggregator。

数据可用性对于去中心化至关重要,每个用户都有足够的数据来重建汇总的完整状态。如上所述,团队仍然必须决定数据可用性的最佳配置。目的是确保没有审查制度,并且任何一方都无法控制网络。

zkEVM 的设计考虑了安全性。作为 L2 解决方案,大部分安全性都继承自以太坊。智能合约将保证执行状态更改的任何人首先必须正确执行;其次,创建一个证明状态变化有效性的证明;第三,利用链上的有效性证明进行验证。

1.效率和总体战略

效率是网络性能的关键。因此,zkEVM 应用了几种实现策略来保证效率。下面列出了其中的一些:

  • 第一个策略是部署 PoE,它激励最高效的聚合器参与证明生成过程。
  • 第二种策略是在链下执行所有计算,同时仅将必要的数据和 zk 证明保留在链上。

在 zkEVM 系统的特定组件中还实施了其他策略。例如:

  • 桥接智能合约的实现方式,例如以 UTXO 方式结算账户,仅使用 Exit Tree Roots。
  • 在 zkProver 中使用专门的加密原语来加速计算并最小化证明大小,如下所示:
    • 运行一种特殊的零知识汇编语言 (zkASM) 来解释字节码
    • 使用 zk-STARKs 等零知识工具进行证明;这些证明速度非常快,尽管它们的尺寸更大

因此,与其发布大量的 zk-STARK 证明作为有效性证明,不如使用 zk-SNARK 来证明 zk-STARK 证明的正确性。这些 zk-SNARK 反过来作为状态变化的有效性证明发布。这有助于将 gas 成本从 5M 降低到 350K。

八.最后的评论和下一步是什么......

鉴于 EVM 操作码的兼容性,zkEVM 旨在无缝处理智能合约并有效验证状态更改。它不仅保证安全和高效,而且还可以实现竞争性的去中心化。为了实现高速证明和快速验证的简洁证明,团队专注于 zkProver 的优化。

该团队还利用不同 Polygon 团队之间的协同作用,这些团队也在研究 zk-rollup 解决方案以实现以太坊的可扩展性。尽管开发距离主网还很远,但自巴黎的 EthCC[5] 以来,zkEVM 代码的 alpha 版本(连同所有文档)已经开源。

这样做是为了与开源项目的透明度原则保持一致,并让 Polygon Hermez 1.0 的开发人员和用户的 Polygon 社区随着即将发生的变化而更新。我们的下一步将是一个公共测试网。虽然很难确定固定日期,但我们计划在 2022 年第三季度推出。

原文翻译自:https://github.com/0xPolygonHermez/zkevm-doc/blob/main/mkdocs/docs/zkEVM/Overview/Overview.md

合作伙伴