Ragu is a Rust-language proof-carrying data (PCD) framework that implements a modified version of the ECDLP-based recursive SNARK construction from Halo [BGH19]. Ragu does not require a trusted setup. Developed for Project Tachyon and compatible with the Pasta curves employed in Zcash, Ragu targets performance and feature support that is competitive with other ECC-based accumulation/folding schemes without complicated circuit arithmetizations.
⚠️ Ragu is under heavy development and has not undergone auditing. Do not use this software in production.
- The Ragu Book provides high-level documentation about Ragu, how it can be used, how it is designed, and how to contribute. The source code for the book lives in this repository in the
booksubdirectory. - Crate documentation is available for official Ragu crate releases.
- Unofficial (internal) library documentation is continually rendered from the
mainbranch. This is primarily for developers of Ragu.
- The minimum supported Rust version is currently 1.90.0.
- Ragu requires minimal dependencies and currently strives to avoid using dependencies that are not already used in Zebra.
Ragu's approach to std and no_std follows four principles:
no_stdcompatible. All library crates are#![no_std]and gate standard-library usage behind an optionalstdfeature flag. The defaultmulticorefeature impliesstd; to build without it, use--no-default-features.allocis required. All library crates depend on thealloccrate for heap-allocated types such asVecandBox, gated behind a default-onallocfeature flag. In practice this means Ragu can target environments that provide a global allocator but lack a fullstdruntime, such as WebAssembly or embedded platforms.- Performance features may depend on
std. Optional features likemulticoreenable multi-threaded parallelism and implystd. stdis required on the host. Build scripts, procedural macros, tests, and benchmarks all run on the host and requirestd. This is a common requirement even forno_stdlibraries in the Rust ecosystem.
This library is distributed under the terms of both the MIT license and the Apache License (Version 2.0). See LICENSE-APACHE, LICENSE-MIT and COPYRIGHT.
