1use rsnark::core::{API, Circuit, CircuitWitness, circuit, curve::BN254};
2use rsnark_core::{
3 Witness,
4 curve::{BLS12_377, BLS12_381, BLS24_315, BLS24_317, BW6_633, BW6_761},
5};
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
20 let d = api.add(&c, &10);
21
22 api.assert_is_equal(&d, &self.c);
23 }
24}
25
26fn main() {
27 run::<Groth16Backend<BN254>>();
28 run::<Groth16Backend<BLS12_377>>();
29 run::<Groth16Backend<BLS12_381>>();
30 run::<Groth16Backend<BLS24_315>>();
31 run::<Groth16Backend<BLS24_317>>();
32 run::<Groth16Backend<BW6_761>>();
33 run::<Groth16Backend<BW6_633>>();
34
35 run::<PlonkBackend<BN254>>();
36 run::<PlonkBackend<BLS12_377>>();
37 run::<PlonkBackend<BLS12_381>>();
38 run::<PlonkBackend<BLS24_315>>();
39 run::<PlonkBackend<BLS24_317>>();
40 run::<PlonkBackend<BW6_761>>();
41 run::<PlonkBackend<BW6_633>>();
42}
43
44fn run<B: Backend>() {
45 let prover = Prover::<B>::new();
46
47 let circuit_prover = prover.compile_circuit::<TestCircuit>().unwrap();
48 let (pk, vk) = circuit_prover.setup().unwrap();
49
50 let circuit_witness = Witness::<TestCircuit> {
51 a: 3,
52 b: 4,
53 c: 17, };
55
56 let proof = circuit_prover.prove(&pk, &circuit_witness).unwrap();
57
58 let public_witness = circuit_witness.into_public_witness();
59 circuit_prover.verify(&vk, &proof, public_witness).unwrap();
60}