diff --git a/starky/src/constraint_consumer.rs b/starky/src/constraint_consumer.rs index c9368ba3..1a061c20 100644 --- a/starky/src/constraint_consumer.rs +++ b/starky/src/constraint_consumer.rs @@ -44,12 +44,8 @@ impl ConstraintConsumer

{ } } - // TODO: Do this correctly. - pub fn accumulators(self) -> Vec { + pub fn accumulators(self) -> Vec

{ self.constraint_accs - .into_iter() - .map(|acc| acc.as_slice()[0]) - .collect() } /// Add one constraint valid on all rows except the last. diff --git a/starky/src/prover.rs b/starky/src/prover.rs index 24593b45..974ead74 100644 --- a/starky/src/prover.rs +++ b/starky/src/prover.rs @@ -258,7 +258,7 @@ where let quotient_values = (0..size) .into_par_iter() .step_by(P::WIDTH) - .map(|i_start| { + .flat_map_iter(|i_start| { let i_next_start = (i_start + next_step) % size; let i_range = i_start..i_start + P::WIDTH; @@ -292,13 +292,22 @@ where permutation_check_data, &mut consumer, ); + let mut constraints_evals = consumer.accumulators(); // We divide the constraints evaluations by `Z_H(x)`. - let denominator_inv = z_h_on_coset.eval_inverse_packed(i_start); + let denominator_inv: P = z_h_on_coset.eval_inverse_packed(i_start); + for eval in &mut constraints_evals { *eval *= denominator_inv; } - constraints_evals + + let num_challenges = alphas.len(); + + (0..P::WIDTH) + .into_iter() + .map(move |i| { + (0..num_challenges).map(|j| constraints_evals[j].as_slice()[i]).collect() + }) }) .collect::>();