本文介绍了零知识虚拟机(ZK-VM)的工作原理,通过“Proof of Meow”的例子,解释了如何证明程序的正确执行。文章将程序编译成字节码,然后在虚拟机中执行,生成执行跟踪。Prover验证执行跟踪的正确性,Verifier验证Prover生成的证明。
喵的证明:ZK-VM 如何工作
摘要
如果你想知道 ZK-VM 是如何工作的,下面我们用一张图来解释,并以“喵的证明”为例。对于更严肃的人,在第二部分中,我们将重新绘制这张图来证明 EVM 而不是喵。
免责声明: 在此解释中,我们使用一些心理模型来提供“ZK-EVM 如何工作”背后的直觉。 事实上,还有更多的细节和细微之处,请查看 PSE 小组关于 ZK-EVM 的 系列 文章 文章,以便在更技术的上下文中探索它。
对于那些为“喵的证明”而来的人——让我们开始吧。
“程序”可以是任何程序。 在我们的例子中,“meow(喵)”是一个程序。 该程序通常用用户友好的语言编写,如 Solidity、Rust、Noir 等。
为了证明该程序,它应该被编译为字节码。
编译器将源代码(即,由开发人员编写)转换为字节码(即可供计算机读取)。
字节码看起来比高级语言更神秘:
然而,正如我们在上面看到的,字节码只是一组指令,用于向虚拟机解释该做什么。 例如,PUSH1 表示“将 1 字节的数据放入堆栈”,EXP 用于执行求幂,而 SUB 表示减法。 因此,字节码实际上是一组指令,告诉 VM 如何逐步执行程序:先执行这个,再执行这个,然后再执行这个,等等。
当字节码被编译后,它会在 VM 内部执行。 也就是说,VM 获取指令列表并逐个执行它们。 此执行的结果称为“执行轨迹”。
执行轨迹包含为程序的特定调用而执行的 操作码 (opcodes) 列表。
执行轨迹的例子:
证明者 (Prover) 取得执行轨迹并检查 字节码 (bytecode)(的某个指令集)是否被正确执行。 证明者是硬件和软件的组合。 要作为证明者工作,会得到一个约束列表和所需的数据来证明它们。
ZK-VM 是一段软件,一个电路,被编译成一组约束。 证明输入包含程序输入和输出。 因此,证明者可以将这些特定的输入放入提供的约束中,并检查它们是否产生特定的输出。 电路的设计使得只有特定的输入集才能满足它。 如果证明者能够满足电路,那么就足以让验证者相信该证明是有效的。
验证者 (Verifier) 是一种验证证明的算法。 它可能是一个智能合约(例如,在 Taiko 中)或由任何人运行的一段软件。
对于那些对证明“喵 (meow)”不太感兴趣的人,同样的直觉也可以用来证明 EVM。 正如我们在本文开头所说,“ZK-VM 证明程序被正确执行。” “程序”可以是任何程序,包括节点运行的软件(例如,以太坊节点或 Taiko 节点)。
如果我们证明节点正确运行该软件,这意味着 EVM 也被正确执行。 这正是 ZK-Rollups 使用 ZK-EVM 以更简洁的方式证明区块有效,而不是重新执行所有交易的方式。
在我们的 招聘板 上探索空缺职位。
从 Taiko 获取最新信息:
Discord:https://discord.gg/taikoxyz.
GitHub:https://github.com/taikoxyz.
Twitter:https://twitter.com/taikoxyz.
Youtube: https://www.youtube.com/@taikoxyz.
在 GitHub 上为 Taiko 做出贡献并获得 GitPOAP! 你也将作为贡献者出现在我们的 README 中。 从 投稿手册 开始。
- 原文链接: taiko.mirror.xyz/Q0J6Jme...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!