2 个不稳定版本
0.7.0 | 2024年4月30日 |
---|---|
0.6.1 |
|
0.6.0 | 2024年3月28日 |
#6 in #nova
用于 rings-node
770KB
2K SLoC
Rings SNARK
======================
此 crate 包含基于 Nova 的 Rings SNARK 的实现
TL;DR
Rings SNARK 是一种基于 NOVA 的 SNARK 证明系统。它自动将用 circom
语言编写的电路转换为 Rings SNARK 使用的 bellpepper 证明系统。此外,它利用 Nova 进行折叠操作。这有助于分解大型 zkSNARK 计算,并启用并行处理。
工作流程
以下图表说明了 Rings SNARK 的核心逻辑。顶部表示来自 circom
的输入,包括编译的 r1cs 和 wasm。右侧显示电路的输入,包括公共和私有输入。
WASM 读取器
Rings SNARK 包含用于 Circom 证人计算器 (Wasm) 的加载模块。它使用 wasmer 读取 wasm 并将其转换为与 Nova 标准兼容的电路。
RICS 加载器
Rings SNARK 可以读取 circom 生成的 r1cs 并将其转换为 bell pepper 证明系统。这是基于 Circom-Scotia 的工作,并进一步增加了对浏览器的支持。
Nova 折叠器
通过 Nova,Rings SNARK 对电路执行折叠计算。一组递归电路可以折叠成两个基于 Relax R1CS 的电路。这使得 Rings SNARK 可以任意分割电路列表,并通过 Rings 网络将其分布到各个节点。
递归 SNARK
环SNARK支持大多数递归电路。它要求电路的输入和输出数量相等。一个步骤的输出成为下一个步骤的输入,从而创建递归过程。对于最初未设计为递归SNARK的电路,可能需要进行简单修改。例如,可以使用辅助变量使输入和输出递归,或者将内部循环重写为递归结构。更多详情,请参考示例部分的默克尔树示例。
依赖关系
~31-49MB
~815K SLoC