10 个版本
新增 0.150.4 | 2024年8月16日 |
---|---|
0.150.2 | 2024年8月12日 |
0.150.2-rc.2 | 2024年7月31日 |
0.140.1-gpu-wrapper.1 | 2024年8月6日 |
0.140.0-gpu-wrapper.0 | 2024年7月8日 |
#16 在 神奇豆子
11,472 每月下载量
用于 3 crates
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
。
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