zksync项目架构全分析(电路部分 -介绍zksync的zk)
全文内容来自C4对zksync项目审计的文档
我从电路部分开始看的,所以就先写电路部分了,其余部分后面可能会更新
第一章 合约部分(没看)
第二章 虚拟机部分(没看)
第三章 电路部分
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
Intro to zkSync’s ZK
作为 ZK 的升级版,我们希望一切都能通过加密技术进行验证,并由以太坊提供安全保障。ZK 的强大功能可以压缩交易,为用户减少费用,同时继承相同的安全性。
ZK 证明允许验证者轻松检查证明者是否正确完成了计算。对于 zkSync,证明者将证明 zkSync EVM 的正确执行,以太坊上的智能合约将验证证明的正确性。
具体来说,有以下几个步骤。
- Witness generation:见证生成可视为用户(验证者)生成交易有效性证明过程的一部分。例如,当用户发起一笔交易时,就会生成相应的见证,作为交易有效并遵守网络共识规则的证明。零知识方面确保了见证人不会透露任何有关交易细节的信息,从而维护了用户隐私和数据安全。新交易是分批证明的。这些批次将被处理并发送到电路。
- Circuits:我们的虚拟机需要证明执行已正确完成,以便正确生成证明。这可以通过电路来实现。为了让证明发挥作用,必须将正常的代码逻辑转换成证明系统可读取的格式。虚拟机读取将要执行的代码,并将各部分归类为各种电路。然后,这些电路分解代码的各个部分,并将其发送给证明系统。
- Proof system:我们需要一个证明系统来处理 ZK 电路。我们的证明系统称为 Boojum
以下是我们使用的不同资源库:
- Boojum: 将其视为工具箱。它包含一些重要的工具和部件,如验证器(帮助确认电路的功能)、校验器(对所有内容进行双重校验)以及其他各种后端组件。这些都是技术上的零碎部分,比如定义电路中会用到的布尔值、数值和变量。
- zkevm_circuits: 这是我们构建和存储实际电路的地方。电路由 Boojum 构建,旨在复制 EVM 的行为。
- zkevm_test_harness: 这里就像是我们的试验场。在这里,我们有不同的测试来确保电路正常工作。此外,它还包含必要的代码,帮助顺利启动和运行这些电路。
What is a circuit ?
ZK 电路的名称来自算术电路,它看起来像这样(见图)。您可以从底部的输入开始阅读电路,然后沿着箭头边走边计算每个运算。
求证器将证明电路 "满足 "输入,即每一步都计算正确,从而得到正确的输出。
非常重要的一点是,每一步实际上都是 "受限 "的。证明者必须被迫计算正确的值。如果电路缺少一个约束,那么恶意证明者就可以创建通过验证但无效的证明。ZK 术语对此的解释是,约束不足的电路可能导致健全性错误。
What do zkSync’s circuits prove?
我们电路的主要目标是证明虚拟机的正确执行。这包括证明虚拟机内运行的每个操作码,以及其他组件,如预编译、存储和连接其他一切的电路。细节Circuits
More details
将代码转化为约束的过程称为算术化。我们的算术化基于 "Plonk "的变体。具体细节已从电路中抽象出来,但如果你想了解更多信息,可以看 Vitalik’s blog 讲解的Plonk或者直接看 Plonky2 paper.
更多证明系统的信息在这篇论文Redshift Paper.