2 个不稳定版本

0.7.0 2024年4月30日
0.6.1 2024年3月28日
0.6.0 2024年3月28日

#6 in #nova


用于 rings-node

GPL-3.0 许可证

770KB
2K SLoC

Rings Network

Rings SNARK

======================

rings-node cargo docs GitHub

此 crate 包含基于 Nova 的 Rings SNARK 的实现

TL;DR

Rings SNARK 是一种基于 NOVA 的 SNARK 证明系统。它自动将用 circom 语言编写的电路转换为 Rings SNARK 使用的 bellpepper 证明系统。此外,它利用 Nova 进行折叠操作。这有助于分解大型 zkSNARK 计算,并启用并行处理。

工作流程

以下图表说明了 Rings SNARK 的核心逻辑。顶部表示来自 circom 的输入,包括编译的 r1cs 和 wasm。右侧显示电路的输入,包括公共和私有输入。

Snark workflow

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