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:
- For each column, we create a commitment and absorb it in the sponge.
- We compute the quotient polynomial.
- We evaluate each polynomial (columns + quotient) to two challenges ζ and ζω.
- 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 ζω.