dusk-network/plonk
GitHub: dusk-network/plonk
纯 Rust 实现的基于 BLS12-381 的 PLONK 零知识证明系统,内置 KZG10 承诺方案与自定义门,为区块链和可验证计算场景提供高效的证明生成与验证能力。
Stars: 637 | Forks: 163
# PLONK

[](https://github.com/dusk-network/plonk)
[](https://docs.rs/dusk-plonk/latest/)
_这是基于 BLS12-381 的 PLONK 证明系统的纯 Rust 实现。_
该库包含 KZG10 的模块化实现,作为默认的多项式承诺方案。此外,为了提高效率,它还包含了自定义门。关于我们具体实现的细节可以在[这里](docs/dusk-plonk-specs.pdf)找到。审计报告可以在[这里](https://github.com/dusk-network/audits)找到。
**免责声明**:该库目前不稳定。尽管已经完成了安全审计,但仍鼓励进行更深入的分析和测试。使用风险自负。
## 用法
要了解如何使用此库,请查看 'examples' 目录。
## 功能
此 crate 包含多项功能,简要说明如下:
- `alloc`:启用分配器,允许进行 `Proof` 构建和验证。如果没有此功能,**无法**证明或验证任何内容。
没有此功能时,`dusk-plonk` 仅导出某些固定大小的数据结构,例如 `Proof`。这在也不使用分配器的 no_std 环境中非常有用。
- `std`:在某些证明和验证操作中启用 `std` 的使用以及 `rayon` 并行化。
它还使用椭圆曲线依赖的 `std` 版本,利用了
来自 `dusk-bls12-381` 的 `parallel` 功能。该功能默认开启。
- `debug`:启用运行时调试器后端,将 [CDF](https://crates.io/crates/dusk-cdf) 文件输出到 `CDF_OUTPUT` 环境变量定义的路径中。使用时,二进制文件必须使用 `debug = true` 编译。有关更多信息,请查阅 [cargo 手册](https://doc.rust-lang.org/cargo/reference/profiles.html#debug)。
__建议导出 std 输出和 std 错误,然后将它们放在一个文本文件中,以便进行高效的门分析。__
## 文档
该 crate 文档提供了有关该库提供的所有功能的信息,
以及有关其导出的数据结构的文档。要查看这些内容,请访问[文档页面](https://docs.rs/dusk-plonk/)或运行 `make doc` 或 `make doc-internal`。
## 性能
基准测试在 `Apple M1` 上进行,针对电路大小为 `2^16` 个约束的情况:
- 证明时间:`7.871s`
- 验证时间:`2.821ms` **(此时间不会根据电路大小而变化。)**
如需更多结果,请运行 `cargo bench` 以获取关于约束数量的完整基准测试报告。
## 许可
此代码基于 Mozilla Public License Version 2.0 (MPL-2.0) 获得许可。请参阅 [LICENSE](https://github.com/dusk-network/plonk/blob/master/LICENSE) 了解更多信息。
## 关于
此实现由 [Dusk](https://dusk.network) 团队设计。
## 贡献
- 如果您想为此代码库/项目做出贡献,请查阅我们的 [CONTRIBUTING.md](https://github.com/dusk-network/plonk/blob/master/CONTRIBUTING.md)。
- 如果您想报告错误或请求添加新功能,请在此代码库中打开一个 issue。
标签:PLONK, Rust, 可视化界面, 密码学, 密码学库, 手动系统调用, 椭圆曲线加密, 网络流量审计, 通知系统, 零知识证明