织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

zkEVM 设计构想:如何运作?有哪些挑战?还能带来什么?(5)

时间:2021-10-14 19:11来源:未知 作者:admin 点击:
因此,显而易见的是,zkEVM 的证明需要包含以下几个方面(与执行流程对应): 字节码从永久存储项中正确加载(你正在运行从某个地址加载的正确操作

  因此,显而易见的是,zkEVM 的证明需要包含以下几个方面(与执行流程对应):

  •   字节码从永久存储项中正确加载(你正在运行从某个地址加载的正确操作码)

  •   字节码中的操作码始终逐一执行(字节码按顺序执行,不会遗漏或跳过任何操作码)

  •   每个操作码均正确执行(每个操作码中的三个子操作都正确执行,R/W + 计算)

zkEVM 设计亮点

  在为 zkEVM 设计架构时,我们需要分别采取措施满足上述三个方面的需求。

我们需要为某个密码学累加器设计一个电路。

  这是为了起到 「可验证存储器」 的作用,我们需要通过某种技术来证明读取过程是准确无误的。密码学累加器可以更高效地实现这一点 6。我们以默克尔树为例。已部署的字节码会被存储为默克尔树上的叶节点。然后,验证者可以使用简洁证明来验证该字节码是否正确加载自某个地址(即,验证电路中的默克尔路径)。针对以太坊存储,我们需要这个电路同时兼容默克尔-帕特里夏树和 Keccak 哈希函数。

我们需要设计一个电路将字节码与实际的执行追踪关联起来。

  将字节码转移到静态电路中会带来一个问题:像 jump 这样的条件式操作码(与智能合约中的 loop、if else 语句相对应)可能会跳转到任何地方。在某个人使用特定输入运行该字节码之前,跳转目的地都是不确定的。这就是为什么我们需要验证实际的执行踪迹。执行踪迹可以被认为是 「展开的字节码」,包含按实际执行顺序排列的操作码(即,如果你跳转到另一个位置,踪迹中将包含该目标操作码和位置)。

  证明者将直接提供执行踪迹作为电路的见证数据。我们需要证明该执行追踪确实是特定的字节码使用特定的输入 「展开」 的。我们的想法是强制让程序计数器的值保持一致。针对目的地不确定的问题,解决思路 是让证明者提供一切数据。然后,你可以使用查找参数高效地检查一致性(即,证明带有准确全局计数器的操作码包含在 「总线」 中)。

我们需要为每个操作码设计电路(证明每个操作码中的读、写和计算都是正确的)。

  这是最重要的部分 —— 证明执行追踪中的每个操作码都是正确且一致的。如果你直接将所有东西都放在一起,会产生高昂的成本。此处重要的优化思路是:

  •   我们可以将 R/W 和计算分成两个证明。一个证明会将所有操作码用到的元素都放到 「总线」 中。另一个证明会证明对 「总线」 上元素的计算是正确执行的。这会大幅降低每个部分的成本(即,你在生成计算证明时无需考虑整个 EVM 存储)。在 更详细的规范 中,前者被称为 「状态证明」,后者被称为 「EVM 证明」。另一个发现是,查找声明可以有效处理 「总线映射」 。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容