simple/
simple.rs

1use rsnark::core::{
2    API, Circuit, CircuitWitness, circuit,
3    curve::{BLS12_377, BLS12_381, BLS24_315, BLS24_317, BN254, BW6_633, BW6_761},
4};
5use rsnark_core::Witness;
6use rsnark_provers_core::{Backend, Prover};
7use rsnark_provers_gnark::{Groth16Backend, PlonkBackend};
8
9#[circuit]
10pub struct TestCircuit {
11    a: u32,
12    b: u32,
13    pub c: u32,
14}
15
16impl Circuit for TestCircuit {
17    fn define(&self, api: &mut impl API) {
18        let c = api.add(&self.a, &self.b);
19        api.assert_is_equal(&c, &self.c);
20    }
21}
22
23fn main() {
24    run::<Groth16Backend<BN254>>();
25    run::<Groth16Backend<BLS12_377>>();
26    run::<Groth16Backend<BLS12_381>>();
27    run::<Groth16Backend<BLS24_315>>();
28    run::<Groth16Backend<BLS24_317>>();
29    run::<Groth16Backend<BW6_761>>();
30    run::<Groth16Backend<BW6_633>>();
31
32    run::<PlonkBackend<BN254>>();
33    run::<PlonkBackend<BLS12_377>>();
34    run::<PlonkBackend<BLS12_381>>();
35    run::<PlonkBackend<BLS24_315>>();
36    run::<PlonkBackend<BLS24_317>>();
37    run::<PlonkBackend<BW6_761>>();
38    run::<PlonkBackend<BW6_633>>();
39}
40
41fn run<B: Backend>() {
42    let prover = Prover::<B>::new();
43
44    let circuit_prover = prover.compile_circuit::<TestCircuit>().unwrap();
45    let (pk, vk) = circuit_prover.setup().unwrap();
46
47    let circuit_witness = Witness::<TestCircuit> {
48        a: 3,
49        b: 4,
50        c: 7, // 3 + 4 = 7
51    };
52
53    let proof = circuit_prover.prove(&pk, &circuit_witness).unwrap();
54
55    let public_witness = circuit_witness.into_public_witness();
56    circuit_prover.verify(&vk, &proof, public_witness).unwrap();
57}