diff --git a/src/circuit_builder.rs b/src/circuit_builder.rs index 79d10be2..a006ec98 100644 --- a/src/circuit_builder.rs +++ b/src/circuit_builder.rs @@ -21,7 +21,7 @@ use crate::plonk_common::PlonkPolynomials; use crate::polynomial::commitment::ListPolynomialCommitment; use crate::polynomial::polynomial::PolynomialValues; use crate::target::Target; -use crate::util::{log2_strict, transpose}; +use crate::util::{log2_strict, transpose, transpose_poly_values}; use crate::wire::Wire; pub struct CircuitBuilder, const D: usize> { @@ -307,7 +307,7 @@ impl, const D: usize> CircuitBuilder { let k_is = get_unique_coset_shifts(degree, self.config.num_routed_wires); let sigma_vecs = self.sigma_vecs(&k_is, &subgroup); - let constants_sigmas_vecs = [constant_vecs, sigma_vecs].concat(); + let constants_sigmas_vecs = [constant_vecs, sigma_vecs.clone()].concat(); let constants_sigmas_commitment = ListPolynomialCommitment::new( constants_sigmas_vecs, self.config.fri_config.rate_bits, @@ -322,6 +322,7 @@ impl, const D: usize> CircuitBuilder { let prover_only = ProverOnlyCircuitData { generators: self.generators, constants_sigmas_commitment, + sigmas: transpose_poly_values(sigma_vecs), subgroup, copy_constraints: self.copy_constraints, gate_instances: self.gate_instances, diff --git a/src/circuit_data.rs b/src/circuit_data.rs index ff910ce0..afb37628 100644 --- a/src/circuit_data.rs +++ b/src/circuit_data.rs @@ -120,6 +120,8 @@ pub(crate) struct ProverOnlyCircuitData, const D: usize> { pub generators: Vec>>, /// Commitments to the constants polynomials and sigma polynomials. pub constants_sigmas_commitment: ListPolynomialCommitment, + /// The transpose of the list of sigma polynomials. + pub sigmas: Vec>, /// Subgroup of order `degree`. pub subgroup: Vec, /// The circuit's copy constraints. diff --git a/src/polynomial/commitment.rs b/src/polynomial/commitment.rs index ecd3e875..da647ffa 100644 --- a/src/polynomial/commitment.rs +++ b/src/polynomial/commitment.rs @@ -19,7 +19,6 @@ pub const SALT_SIZE: usize = 2; pub struct ListPolynomialCommitment { pub polynomials: Vec>, - pub values: Vec>, pub merkle_tree: MerkleTree, pub degree: usize, pub degree_log: usize, @@ -40,7 +39,7 @@ impl ListPolynomialCommitment { "to compute LDE" ); - Self::new_from_data(polynomials, values, lde_values, degree, rate_bits, blinding) + Self::new_from_data(polynomials, lde_values, degree, rate_bits, blinding) } /// Creates a list polynomial commitment for the polynomials `polynomials`. @@ -50,21 +49,16 @@ impl ListPolynomialCommitment { blinding: bool, ) -> Self { let degree = polynomials[0].len(); - let values = polynomials - .iter() - .map(|v| v.clone().fft()) - .collect::>(); let lde_values = timed!( Self::lde_values(&polynomials, rate_bits, blinding), "to compute LDE" ); - Self::new_from_data(polynomials, values, lde_values, degree, rate_bits, blinding) + Self::new_from_data(polynomials, lde_values, degree, rate_bits, blinding) } fn new_from_data( polynomials: Vec>, - values: Vec>, lde_values: Vec>, degree: usize, rate_bits: usize, @@ -76,7 +70,6 @@ impl ListPolynomialCommitment { Self { polynomials, - values, merkle_tree, degree, degree_log: log2_strict(degree), @@ -108,9 +101,6 @@ impl ListPolynomialCommitment { .collect() } - pub fn original_values(&self, index: usize) -> Vec { - self.values.iter().map(|v| v.values[index]).collect() - } pub fn get_lde_values(&self, index: usize) -> &[F] { let index = reverse_bits(index, self.degree_log + self.rate_bits); let slice = &self.merkle_tree.leaves[index]; diff --git a/src/prover.rs b/src/prover.rs index a810c05f..e8cd7f46 100644 --- a/src/prover.rs +++ b/src/prover.rs @@ -194,9 +194,7 @@ fn compute_z, const D: usize>( let x = subgroup[i - 1]; let mut numerator = F::ONE; let mut denominator = F::ONE; - let s_sigmas = &prover_data - .constants_sigmas_commitment - .original_values(i - 1)[common_data.sigmas_range()]; + let s_sigmas = &prover_data.sigmas[i - 1]; for j in 0..common_data.config.num_routed_wires { let wire_value = witness.get_wire(i - 1, j); let k_i = k_is[j];