Function o1vm::pickles::prover::prove

source ·
pub fn prove<G: KimchiCurve, EFqSponge: FqSponge<G::BaseField, G, G::ScalarField> + Clone, EFrSponge: FrSponge<G::ScalarField>, RNG>(
    domain: EvaluationDomains<G::ScalarField>,
    srs: &SRS<G>,
    inputs: ProofInputs<G>,
    constraints: &[Expr<ConstantExpr<G::ScalarField, BerkeleyChallengeTerm>, Column>],
    rng: &mut RNG
) -> Result<Proof<G>, ProverError>where
    G::BaseField: PrimeField,
    RNG: RngCore + CryptoRng,
Expand description

Make a PlonKish proof for the given circuit. As inputs, we get the execution trace consisting of evaluations of polynomials over a certain domain domain.

The proof is made of the following steps:

  1. For each column, we create a commitment and absorb it in the sponge.
  2. We compute the quotient polynomial.
  3. We evaluate each polynomial (columns + quotient) to two challenges ζ and ζω.
  4. We make a batch opening proof using the IPA PCS.

The final proof consists of the opening proof, the commitments and the evaluations at ζ and ζω.