L2BEAT推出了ZK Catalog,旨在汇总链上ZK验证器的源代码验证信息。由于ZK项目验证过程复杂且依赖定制工具,L2BEAT将提供验证状态的认证徽章,并鼓励社区贡献,以提高ZK程序的透明度并促进行业标准化。
介绍 ZK Catalog,一个用于汇总关于链上 ZK 验证器源代码验证信息的地方。
未验证的合约应被视为具有潜在恶意,不应被信任。
多年来,Etherscan 提供了一项了不起的服务,用于托管远程验证且易于重现的 Solidity 源代码,但在 ZK 时代,这还不够。 相比之下,这是 Polygon zkEVM 验证器的源代码的样子:
https://etherscan.io/address/0x0775e11309d75aA6b0967917fB0213C5673eDf81#code
我们如何检查Polygon zkEVM 确实在验证 zkEVM,而不是一些虚拟的,或者更糟的,恶意程序? 如果你想找出 ZK 项目欺骗用户的所有方式,请查看 Kobi Gurkan 撰写的这篇精彩文章:
Twitter Embed
Twitter Widget Iframe
ZK 验证器以“验证密钥”或“程序哈希”的形式链上表示被证明的程序。 正如 Solidity 合约通过生成其字节码并将其与链上的字节码匹配来验证一样,ZK 源代码通过重新生成验证密钥或其程序哈希来针对验证器进行检查。
但是,该过程并不那么标准:不同的证明系统需要不同的工具和不同的步骤,例如,取决于是否存在要验证的可信设置。 此外,在递归证明聚合的情况下,或者在将一个证明系统“包装”到另一个证明系统中的情况下,可能存在多个嵌套的 ZK 验证器。 对于复杂的电路,可能需要一台功能强大的机器:在 Polygon zkEVM 的情况下,至少需要一台 具有 16 个内核的 256GB RAM 机器运行 5-6 小时。 由于该领域仍处于早期阶段,许多项目决定构建自己的语言、编译器和工具,这增加了大量的复杂性,因此也增加了对代码库的信任,即使成功地针对验证器进行了检查。
Worldcoin 的 Semaphore 电路验证状态当前显示为不成功。
我们启动这项工作是 Worldcoin 资助的一部分。 Worldcoin 使用两种相对简单的 ZK 电路:Semaphore,用于以保护隐私的方式检查地址是否包含在匿名集中;以及 Semaphore Merkle Tree Batcher (SMTB),用于更新此类匿名集。
Semaphore 电路由以太坊基金会的 PSE 团队 独立开发。 由于 Semaphore 使用 Groth16 作为其证明系统,因此它需要一个特定于电路的可信设置(而不是像基于 KZG 的证明系统那样的通用设置)。
为了建立 源代码 和 链上验证器 之间的连接,首先需要从 *.circom
文件生成 *.r1cs
文件,然后检查可信设置的贡献( ***.zkey
),生成密钥,最后生成验证器合约。
虽然可以在(声称的)*.r1cs
文件和链上验证器之间建立连接,但我们无法将 *.circom
源代码编译到其中,因为可信设置时使用的编译器版本似乎是不确定的:即使在将文件编译数千次之后,我们仍然无法重新生成相同的已编译文件。 问题似乎在于约束的写入顺序,目前正在调查解决方案。
我们在验证 SMTB 电路时遇到的另一个障碍是,验证指南未指定验证器生成时使用的工具版本和特定的 repo 提交,这使得调试变得非常困难。 特别感谢 dcbuilder、Marcin Kostrzewa、Eric Woolsey 和 Jakub Trad 花费大量时间与我一起完成该过程,以成功验证其中一个 SMTB 电路。
大小为 10 的 SMTB 删除电路已由 L2BEAT 成功验证。
我们推出 ZK Catalog,作为一个用于汇总 ZK 程序源代码验证信息的地方,并在可能的情况下标准化实践,使每个人都可以轻松地以最小的信任和精力完成该过程。 该 Catalog 还旨在提供有关所列项目的证明系统架构的详细信息。
由于大多数项目都使用自定义工具、流程并且需要特定的硬件,因此目前无法拥有像 Etherscan 那样在一般情况下执行验证的自动化后端。 作为临时解决方案,L2BEAT 将以徽章的形式提供我们已执行重新生成过程的项目的验证状态的证明,目标是创建一个去中心化系统,每个人都可以在其中发布证明并尽可能地自动化流程。
我们邀请大家通过将(任何类型的!)链上验证器提交到 Catalog 来为这项工作 做出贡献,并帮助提高透明度,并为该领域提供更多(超过零)的知识!
- 原文链接: medium.com/l2beat/introd...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!