一般来说,有以下几种方法可以做到这一点: 通过将EVM执行轨迹转换为可验证电路,直接证明EVM执行跟踪 创建一个自定义虚拟机,将EVM操作码映射到该虚拟机的操作码中,然后在该自定义环境中证明跟踪的正确性 创建一个自定义虚拟机,将Solidity转换为自定义虚拟机的字节码(直接或通过自定义高级语言),并在你的自定义环境中进行验证 方案1:证明EVM执行轨迹 Scroll 让我们从最直观的方法开始:证明EVM执行轨迹本身,这种方法目前正由Scroll团队(与Ethereum基金会的Privacy Scaling Group一起)进行研究。为了实现这个目标,我们将需要: 为一些密码累加器设计一个电路(允许我们验证我们正在准确地读取存储和加载正确的字节码) 设计一个电路,将字节码与真正的执行跟踪连接起来 为每个操作码设计一个电路(使我们能够证明每个操作码的读、写和计算的正确性) 在电路中直接实现每一个EVM操作码是具有挑战性的,但由于这种方法完全反映了EVM,它对可维护性和工具支持有很大好处。下图显示,Scroll和Ethereum之间唯一的理论差异是实际的运行环境。然而,值得注意的是,Scroll目前并没有通过这种机制支持所有的EVM操作码。 Optimism团队对此写了一篇精彩的讨论,尽管是在optimistic rollup的背景下。Optimism最初创建了一个定制的Optimistic虚拟机(OVM),作为他们rollup的执行环境。OVM是 “以太坊兼容的”,这意味着它可以运行修改后的Solidity代码,但低水平失配的几个领域意味着以太坊工具和复杂的代码经常需要重新编写。由于这个原因,Optimism改用 “EVM等效”,直接使用确切的EVM标准,并正在开发第一个EVM等效的欺诈证明系统。然而,optimistic rollup不需要担心电路或验证器的效率——Optimism的正确选择可能不是我们rollup的正确选择。 方案2:自定义虚拟机+操作码支持 这种认识促使团队采用上面提到的 “EVM兼容”的方法:创建一个具有优化性能的自定义虚拟机,然后将EVM字节码直接转换为虚拟机的字节码。 Polygon 一个专注于这种方法的团队是Polygon Hermez(最近改名为Polygon zkEVM)。Polygon的方法是建立一个zkEVM( “操作码级的等价物”),这听起来最初与Scroll采取的方法相似。然而,与Scroll不同的是,Polygon的备用运行时(“zkExecutor”)运行定制的 “zkASM''操作码,而不是EVM操作码,来优化EVM解析(即减少限制的数量,直接证明EVM)。Hermez团队将此描述为 ”基于操作码的方法,因为核心挑战是在他们的定制虚拟机中重新创建每一个EVM操作码(你可以在这里查看代码),这样它们就可以快速从EVM字节码变成可验证的格式。 (责任编辑:admin) |