10 个版本

新增 0.150.4 2024年8月16日
0.150.2 2024年8月12日
0.150.2-rc.22024年7月31日
0.140.1-gpu-wrapper.12024年8月6日
0.140.0-gpu-wrapper.02024年7月8日

#16神奇豆子

Download history 2018/week @ 2024-07-05 1070/week @ 2024-07-12 2419/week @ 2024-07-19 4208/week @ 2024-07-26 2561/week @ 2024-08-02 2200/week @ 2024-08-09

11,472 每月下载量
用于 3 crates

MIT/Apache

395KB
9K SLoC

电路定义 crate

此 crate 包含多个电路的 '外层'。具体的电路代码位于 era-zkevm_circuits 仓库中。

代码结构

我们拥有 13 个不同的 '基础层' 电路(例如 MainVM、Decomitter),以及 3 个递归电路(Leaf、Node 和 Scheduler)。

基础层电路位于 src/base_layer,递归电路位于 src/recursion_layer

我们还有 'AUX' 电路:压缩器和包装器,它们在最终的 Scheduler 证明之上运行,并位于 src/aux_layer

circuits

src/encodings 目录包含一些测试工具使用的辅助结构体(它们应该与电路本身使用的匹配)。

电路类型

我们拥有 12 种不同的电路类型(在见证中,你可能注意到有 13 种,因为一个电路(events_dedup_and_sort)用于 L1 消息和事件)。

电路名称 位置 描述
Main VM vm_main.rs 执行 VM 的 OpCodes
CodeDecommittmentsSorter sort_code_decommit.rs 验证代码提交流程的顺序(根据哈希获取字节码)。
CodeDecommiter code_decommiter.rs 将匹配给定哈希的字节码解包到内存中。
LogDemuxer log_demux.rs 将队列拆分为6个输出队列(类似于keccak、sha、存储)。
KeccakRoundFunction keccak256_round_functions.rs keccak哈希的轮次
Sha256RoundFunction sha256_round_function.rs sha256哈希的轮次
ECRecover ecrecover.rs 验证ECRecover
RAMPermutation ram_permutation.rs 验证RAM访问的正确性——查看访问队列,并检查读取的字节值是否正确
StorageSorter storage_sort_dedup.rs 类似于RAM置换,但用于存储——检查是否正确存储/读取了字节。
StorageApplication storage_apply.rs 验证基于计算过程中写入的数据的最终Merkle根和存储差异。
EventsSorter events_sort_dedup.rs 验证给定的未排序队列是否与排序后的队列匹配,没有任何重复。在此情况下,用于系统事件。
L1MessagesSorter events_sort_dedup.rs 它重新使用了上面的电路,但这次用于排序用户生成的事件(L2 -> L1消息)。
L1MessageHasher linear_hasher.rs 验证L1消息的线性哈希与队列的内容匹配。

3个递归电路

电路名称 位置 描述
Leaf leaf_layer.rs 聚合32个相同类型的基本电路
Node node_layer.rs 聚合32个相同类型的叶(或节点)电路
Scheduler scheduler.rs 将13个节点(每种类型1个)聚合成一个最终的证明

和“包装器”/AUX电路在最上面

电路名称 位置 描述
Compression compression.rs 压缩最终的调度证明
Wrapper wrapper.rs 将压缩证明包装成SNARK,以在L1上验证。(这是一个SNARK电路)

Dependencies

~25MB
~475K SLoC