zkMIPS-验证流程
作者:Ben

在我们关于zkMIPS的系列的续集中,我们将探讨验证链下MIPS程序正确执行的具体证明过程。在这里,我们将介绍分段程序所涉及的结构化步骤、模块化证明结构和所使用的密码证明。

在不涉及输入标准的复杂细节的情况下,第一步涉及将原始程序(可能用各种高级语言编写)编译成 MIPS 汇编代码。这使后续分段和模块化处理的输入标准化,专门为 zkMIPS 架构量身定制。编译后,zkMIPS 将 MIPS 程序分成几个部分,从而简化了复杂的验证任务并允许并行处理。每个部分进一步细分为四个模块表,对指令进行分类。该组织隔离并独立验证不同类型的操作。

在这些模块表中,zkMIPS 利用 STARK 证明来独立确认每条指令是否正确执行,符合程序的逻辑。该过程的核心涉及将验证步骤和程序值编码为多项式,具体而言,验证步骤的约束多项式和程序值的见证多项式。通过对这些多项式的深思熟虑的组合,整个算法的执行以单个多项式表示。使用FRI协议评估该组合多项式的有效性,该协议检查多项式的度数是否合适。使用 FRI 的结构化评估可确保程序的执行正确无误,从而有效地匹配见证和约束多项式。

在这次模块化验证之后,该架构利用复杂的交叉查找方案来确保一个分段的所有指令都在其模块表中得到正确考虑,从而验证了每个分段证明的结构完整性。所选的查询方案是 LogUP 协议,以 STARK 格式编写。此外,查询增强了系统管理和验证本质上不是直接多项式的复杂运算(例如逻辑运算)的能力,从而促进了不同操作类型证明的实现。使用 PLONK 证明对正确的分段序列进行递归验证,从而确保整个程序执行与预期的逻辑和顺序相匹配。此步骤确认了程序的连续性和顺序完整性。

为了增强链上可验证性,特别是对于以太坊等平台,可以选择生成最终的 Groth16 证明。该证明系统对证明进行了优化,以确保它们与区块链集成兼容且高效。

校对步骤全部使用 Plonky2 库实现,该库旨在高效编写 STARK 和 PLONK 校样。