Skip to main content

provekit_common/
prover.rs

1use {
2    crate::{
3        noir_proof_scheme::NoirProofScheme,
4        whir_r1cs::WhirR1CSScheme,
5        witness::{NoirWitnessGenerator, SplitWitnessBuilders},
6        NoirElement, R1CS,
7    },
8    acir::circuit::Program,
9    serde::{Deserialize, Serialize},
10};
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct Prover {
14    pub program:                Program<NoirElement>,
15    pub r1cs:                   R1CS,
16    pub split_witness_builders: SplitWitnessBuilders,
17    pub witness_generator:      NoirWitnessGenerator,
18    pub whir_for_witness:       WhirR1CSScheme,
19}
20
21impl Prover {
22    #[must_use]
23    pub fn from_noir_proof_scheme(scheme: NoirProofScheme) -> Self {
24        let NoirProofScheme {
25            program,
26            r1cs,
27            split_witness_builders,
28            witness_generator,
29            whir_for_witness,
30        } = scheme;
31
32        Self {
33            program,
34            r1cs,
35            split_witness_builders,
36            witness_generator,
37            whir_for_witness,
38        }
39    }
40
41    #[must_use]
42    pub const fn size(&self) -> (usize, usize) {
43        (self.r1cs.num_constraints(), self.r1cs.num_witnesses())
44    }
45}