dusk-network/plonk

GitHub: dusk-network/plonk

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

Stars: 637 | Forks: 163

# PLONK ![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/cas/33/33f02bfadadac5fa7441d5ac0978c729692bcb8d7e73001178132231950e2e08.svg) [![代码库](https://img.shields.io/badge/github-plonk-blueviolet?logo=github)](https://github.com/dusk-network/plonk) [![文档](https://img.shields.io/badge/docs-plonk-blue?logo=rust)](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, 可视化界面, 密码学, 密码学库, 手动系统调用, 椭圆曲线加密, 网络流量审计, 通知系统, 零知识证明