arnaucube
arnaucube/sonobe-docsPublic Self-hosted repository
sonobe-docs/src/usage/decider-prove.md
src/usage/decider-prove.mdRaw
 1# Decider prove
 2
 3Two options:
 4
 5- onchain (Ethereum's EVM) mode
 6- offchain mode
 7
 8Once we have been folding our circuit instances, we can generate the *"final proof"*, the Decider proof.
 9
10
11#### Onchain Decider
12
13![](../imgs/decider-onchain-flow-diagram.png)
14
15Generating the final proof (decider), to be able to verify it in Ethereum's EVM:
16
17```rust
18type DECIDER = Decider<
19    Projective,
20    GVar,
21    Projective2,
22    GVar2,
23    CubicFCircuit<Fr>,
24    KZG<'static, Bn254>,
25    Pedersen<Projective2>,
26    Groth16<Bn254>, // here we define the Snark to use in the decider
27    NOVA,           // here we define the FoldingScheme to use
28>;
29
30// generate Groth16 setup
31let circuit = DeciderEthCircuit::<
32    Projective,
33    GVar,
34    Projective2,
35    GVar2,
36    Pedersen<Projective>,
37    Pedersen<Projective2>,
38>::from_nova::<CubicFCircuit<Fr>>(nova.clone());
39let mut rng = rand::rngs::OsRng;
40
41let (pk, vk) =
42    Groth16::<Bn254>::circuit_specific_setup(circuit.clone(), &mut rng).unwrap();
43
44// decider proof generation
45let decider_pp = (poseidon_config.clone(), g16_pk, kzg_pk);
46let proof = DECIDER::prove(decider_pp, rng, nova.clone()).unwrap();
47```
48
49As mentioned above, complete examples can be found at [sonobe/folding-schemes/examples](https://github.com/privacy-scaling-explorations/sonobe/tree/main/folding-schemes/examples)
50