以太坊中文 · ETH

2023年07月03日更新 43 人订阅
专栏简介 对话 EthStorage 创始人 Qi Zhou | 数据可用性和去中心化存储 对话张烨@Scroll、Leo Fan@Cysic | 证明者网络和 zk 硬件加速 对话 AltLayer、Scroll、Starknet 团队 | 共享排序器和 L2 共识 对话 Arbitrum 研究员 Patrick McCorry | 如何去中心化 Rollup? 你不是真正的 Rollup :) 上海升级与 Staking 播客系列 ep.2 Rocket Pool 对去中心化流动性质押的开拓与探索 PoS 系列 #2-Epoch,Slot 与信标区块 PoS 系列 #1-模块化设计和两个区块链 以太坊的上海升级将如何影响 Staking 的未来 理解以太坊质押提款 验证者必读:ETH 提款 FAQ 理解验证者的生命周期 从合约部署的角度区分不同的 zkEVM 如何在证明中使用 KZG 承诺 以太坊路线图:账户抽象 Primer:简介区块提议和 MEV-boost 处理过程 L2 桥接风险架构 模块化结构下 EIP-4844 的设计逻辑 ZK 身份 : 为什么需要及怎样做到?(第二部分) ZK 身份: 为什么需要及怎样做到?(第一部分) “模块化”区块链简介 以太坊的基本:交易 哪种 Optimism 节点更好?公共节点 vs. 私人节点 vs. 自托管节点 深入了解 Arbitrum 机制:二维费用(2-Dimensional Fees) Calldata 压缩实验 以太坊协议开发治理和网络升级协作 ERC-20、ERC-721、ERC-1155、ERC-4626 和可组合性 Rollup 生态系统的可组合性 代币经济学 L1 和 L2 的思维模式差异 去中心化社会:寻找 Web3 的灵魂 去中心化身份:通往 Web3 的护照 新手最全攻略:以太坊简易指南 详解 EVM 等效性:推动 L2 开源生态发展 用于合并的 Flashbots 架构 MEV-Boost 及其实现计划 以太坊分布式验证者规范 关于 PoS 你所需要知道的事 LayerZero:一种实现“全链互操作性”的协议 为什么“使用以太坊登录”具有革命性 Optimism 开销优化:通往美分级手续费之路 到底什么是零知识证明 (ZKP)? 从第一原理理解 rollup 经济学 crList:PBS 的抗审查替代解决方案 NFT 平台安全指南 分形式扩容:从 L2 到 L3

从合约部署的角度区分不同的 zkEVM

本文通过解释在 EVM 以及不同类型的 zkEVM 中如何部署合约以区别不同兼容程度的 zkEVM。

来源 | pseudotheos.mirror.xyz

翻译 | Franci, ECN

以太坊虚拟机 (EVM) 是在以太坊区块链上管理状态和执行智能合约的虚拟机。zkEVMs 旨在通过零知识电路来证明 EVM 的执行,这个领域在过去的一年里已经有了显著的增长并扩张为一个行业。在该领域涌现了许多不同的项目和社区,每个项目和社区都采取了自己独特的方案来应对这两种技术交叉带来的挑战和机遇。

对比不同 zkEVM 项目的一个维度是 EVM 的兼容程度。虽然 EVM 兼容是一个连续介质,但有两种主要的方案:语言层面的兼容和字节码层面的兼容。

要理解这些方案之间的区别,很重要的一点是了解 EVM 如何执行用 Solidity 或 Vyper 等高级语言编写的代码。

为了使 EVM 能够运行智能合约所指定的行为,有这样一个过程:高级语言被编译成字节码,与 EVM 相连接。对于 Solidity,典型的流程如下:

  1. 首先,合约是用 Solidity 编程语言编写的,并保存为一个 .sol 文件。这个文件包含合约的函数、变量和其他元素。Solidity 代码通常使用集成开发环境 (IDE) 编写,并遵循特定的语法和结构。

  2. 接下来,使用 Solidity 编译器将 .sol 文件编译成字节码[1]。字节码是一种有效存储的、机器可读的操作码表示,可以在 EVM 上执行。操作码 是 EVM 能够直接解释和执行的低层级指令。编译过程包括几个步骤,如语法检查、类型检查和优化,以确保字节码的正确和有效的。

  3. 一旦合约被编译成字节码,它就可以被部署到以太坊。这通常涉及到向交易池发送一个带有合约字节码的交易。该交易最终被纳入以太坊区块,然后合约被创建。

  4. 合约部署后,它可以与以太坊上的其他合约和用户进行互动。

上述流程描述了合约如何被部署到以太坊。部署到 zkEVM 的流程将根据它是字节码层面兼容的还是语言层面兼容的而有所不同。

1676856820418.png

执行和证明具有与 EVM 相同的字节码的 zkEVM 被称为“字节码层面兼容”。在字节码兼容的 zkEVM 中,除了合约部署地方的不同,对开发者的体验没有任何改变。这种 zkEVM 上可以使用同样的 Solidity 代码、编译器和字节码。开发者可以继续使用他们往常使用的编程语言和工具,同时还可以利用零知识电路的可扩展性和加密安全性。这类 zkEVM 需要能够通过处理相同的低层级操作码和复制相同的结果来复制 EVM 的行为。这涉及到将操作码映射到自定义的 ZK 电路上。从工程的角度来看,这种映射是具有挑战性的,而且操作码的映射导致更庞大的电路和更高的证明生成成本。然而,它最终会给开发者带来更简单的体验。

语言层级兼容性是指 zkEVM 与高级代码 (如Solidity) 一起运行的能力。开发者仍然可以用 Solidity 或其他高级语言编写代码,但这种高级代码必须被编译成与 EVM 不同的字节码。这需要一个特定于部署合约的 zkEVM 网络的编译步骤。非 EVM 的字节码可以被设计为更加电路友好,从而使证明生成更高效。

[1]: Solidity 首先被编译成一种中间语言,称为 Yul,然后再编译成字节码。

本文首发于:https://www.ethereum.cn/Technology/distinguishing-zkevms

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论