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, };
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}