constant/
constant.rs

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, // 3 + 4 = 7
54    };
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}