diff --git a/src/plonk/prover.rs b/src/plonk/prover.rs index e47dc7e..b883416 100644 --- a/src/plonk/prover.rs +++ b/src/plonk/prover.rs @@ -222,6 +222,18 @@ impl Proof { }) .collect(); + let mut permutation_evals: Vec> = + Vec::with_capacity(meta.permutation_queries.len()); + for (permutation_idx, queries) in meta.permutation_queries.iter().enumerate() { + let query_evals: Vec = queries + .iter() + .map(|&query_index| { + eval_polynomial(&srs.permutation_polys[permutation_idx][query_index], x_3) + }) + .collect(); + permutation_evals.push(query_evals); + } + let h_evals: Vec<_> = h_pieces .iter() .map(|poly| eval_polynomial(poly, x_3)) @@ -241,6 +253,13 @@ impl Proof { transcript_scalar.absorb(*eval); } + // Hash each permutation evaluation + for permutation in permutation_evals.iter() { + for eval in permutation.iter() { + transcript_scalar.absorb(*eval); + } + } + // Hash each h(x) piece evaluation for eval in h_evals.iter() { transcript_scalar.absorb(*eval); @@ -388,7 +407,7 @@ impl Proof { permutation_product_commitments: vec![C::default(); params.n as usize], permutation_product_evals: vec![C::Scalar::one(); params.n as usize], permutation_product_inv_evals: vec![C::Scalar::one(); params.n as usize], - permutation_evals: vec![vec![C::Scalar::one(); params.n as usize]], + permutation_evals, advice_evals, fixed_evals, h_evals,