rSnark
Write zero-knowledge circuits in Rust for multiple prover systems.
rSnark is a Rust library for writing zero-knowledge circuits and generating proofs. It provides a core library to write circuits and a provers library to generate proofs using various backend implementations like Gnark.
Features
- Simple Circuit Definition: Use derive macros to easily define circuits
- Multiple Backend Support: Write circuit once, prover on multiple prover system
- Nested Circuits: Compose complex circuits from simpler ones
- Type Safety: Leverage Rust's type system for circuit safety
Getting Started
Add rSnark to your Cargo.toml:
[]
= "0.1.0"
Writing Your First Circuit
Defining a circuit requires two simple steps:
- Define the circuit's inputs and outputs using the
#[derive(Circuit)]macro - Implement the
Circuittrait to define the circuit's constraint rules
use ;
Circuit Visibility Rules
The #[derive(Circuit)] macro treats Rust's visibility modifiers as indicators:
- Fields without
pubare treated as private inputs - Fields with
pubare treated as public inputs
Supported Prover Triples
Similar to compiler target triples, rSnark uses backend triples to define which backend, curve, and proving system to use. The format is: {proving_system}-{curve}-{backend}.
Currently supported backend triples:
| Triple | Description |
|---|---|
groth16-bn254-gnark |
Groth16 with BN254 curve using Gnark backend |
groth16-bls12-381-gnark |
Groth16 with BLS12-381 curve using Gnark backend |
groth16-bls24-317-gnark |
Groth16 with BLS24-317 curve using Gnark backend |
groth16-bls12-377-gnark |
Groth16 with BLS12-377 curve using Gnark backend |
groth16-bw6-761-gnark |
Groth16 with BW6-761 curve using Gnark backend |
groth16-bls24-315-gnark |
Groth16 with BLS24-315 curve using Gnark backend |
groth16-bw6-633-gnark |
Groth16 with BW6-633 curve using Gnark backend |
Project Structure
This workspace contains several crates:
rsnark- Main library and unified APIrsnark-core- Core circuit definition and API traitsrsnark-macros- Derive macros for circuit definitionrsnark-provers-core- Common prover traits and interfacesrsnark-provers-gnark- Gnark backend implementationrsnark-provers-mock- Mock prover for testing
Examples
Check out the examples/ directory for more detailed examples of how to use rSnark.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.