diff --git a/src/bin/bench_recursion.rs b/src/bin/bench_recursion.rs index 12af72df..efab1dd8 100644 --- a/src/bin/bench_recursion.rs +++ b/src/bin/bench_recursion.rs @@ -9,7 +9,6 @@ use plonky2::fri::FriConfig; use plonky2::gates::constant::ConstantGate; use plonky2::gates::gmimc::GMiMCGate; use plonky2::hash::GMIMC_ROUNDS; -use plonky2::polynomial::commitment::EXTENSION_DEGREE; use plonky2::prover::PLONK_BLINDING; use plonky2::witness::PartialWitness; diff --git a/src/circuit_data.rs b/src/circuit_data.rs index cae1501f..d45192cb 100644 --- a/src/circuit_data.rs +++ b/src/circuit_data.rs @@ -4,7 +4,7 @@ use crate::fri::FriConfig; use crate::gates::gate::GateRef; use crate::generator::WitnessGenerator; use crate::merkle_tree::MerkleTree; -use crate::polynomial::commitment::{ListPolynomialCommitment, EXTENSION_DEGREE}; +use crate::polynomial::commitment::ListPolynomialCommitment; use crate::proof::{Hash, HashTarget, Proof}; use crate::prover::prove; use crate::verifier::verify; diff --git a/src/fri/mod.rs b/src/fri/mod.rs index a81fda1e..480980ca 100644 --- a/src/fri/mod.rs +++ b/src/fri/mod.rs @@ -54,29 +54,25 @@ mod tests { use crate::field::crandall_field::CrandallField; use crate::field::extension_field::quadratic::QuadraticCrandallField; use crate::field::extension_field::quartic::QuarticCrandallField; - use crate::field::extension_field::{flatten, FieldExtension}; + use crate::field::extension_field::{flatten, Extendable, FieldExtension}; use crate::field::fft::ifft; use crate::field::field::Field; use crate::fri::prover::fri_proof; use crate::fri::verifier::verify_fri_proof; use crate::merkle_tree::MerkleTree; use crate::plonk_challenger::Challenger; - use crate::polynomial::commitment::EXTENSION_DEGREE; use crate::polynomial::polynomial::{PolynomialCoeffs, PolynomialValues}; use crate::util::reverse_index_bits_in_place; use anyhow::Result; use rand::rngs::ThreadRng; use rand::Rng; - fn test_fri( + fn check_fri, const D: usize>( degree_log: usize, rate_bits: usize, reduction_arity_bits: Vec, num_query_rounds: usize, ) -> Result<()> { - type F = CrandallField; - type F2 = QuadraticCrandallField; - let n = 1 << degree_log; let coeffs = PolynomialCoeffs::new(F::rand_vec(n)).lde(rate_bits); let coset_lde = coeffs.clone().coset_fft(F::MULTIPLICATIVE_GROUP_GENERATOR); @@ -96,13 +92,18 @@ mod tests { reverse_index_bits_in_place(&mut leaves); MerkleTree::new(leaves, false) }; - let coset_lde = - PolynomialValues::new(coset_lde.values.into_iter().map(|x| F2::from(x)).collect()); + let coset_lde = PolynomialValues::new( + coset_lde + .values + .into_iter() + .map(|x| F::Extension::from(x)) + .collect(), + ); let root = tree.root; let mut challenger = Challenger::new(); - let proof = fri_proof::( + let proof = fri_proof::( &[&tree], - &coeffs.to_extension::<2>(), + &coeffs.to_extension::(), &coset_lde, &mut challenger, &config, @@ -112,7 +113,7 @@ mod tests { verify_fri_proof( degree_log, &[], - F2::ONE, + F::Extension::ONE, &[root], &proof, &mut challenger, @@ -133,14 +134,13 @@ mod tests { arities } - #[test] - fn test_fri_multi_params() -> Result<()> { + fn check_fri_multi_params, const D: usize>() -> Result<()> { let mut rng = rand::thread_rng(); for degree_log in 1..6 { for rate_bits in 0..3 { for num_query_round in 0..4 { for _ in 0..3 { - test_fri( + check_fri::( degree_log, rate_bits, gen_arities(degree_log, &mut rng), @@ -152,4 +152,37 @@ mod tests { } Ok(()) } + + mod base { + use super::*; + type F = CrandallField; + const D: usize = 1; + + #[test] + fn test_fri_multi_params() -> Result<()> { + check_fri_multi_params::() + } + } + + mod quadratic { + use super::*; + type F = CrandallField; + const D: usize = 2; + + #[test] + fn test_fri_multi_params() -> Result<()> { + check_fri_multi_params::() + } + } + + mod quartic { + use super::*; + type F = CrandallField; + const D: usize = 4; + + #[test] + fn test_fri_multi_params() -> Result<()> { + check_fri_multi_params::() + } + } } diff --git a/src/fri/prover.rs b/src/fri/prover.rs index 21e24296..cd95c4a6 100644 --- a/src/fri/prover.rs +++ b/src/fri/prover.rs @@ -5,7 +5,6 @@ use crate::hash::hash_n_to_1; use crate::merkle_tree::MerkleTree; use crate::plonk_challenger::Challenger; use crate::plonk_common::reduce_with_powers; -use crate::polynomial::commitment::EXTENSION_DEGREE; use crate::polynomial::polynomial::{PolynomialCoeffs, PolynomialValues}; use crate::proof::{FriInitialTreeProof, FriProof, FriQueryRound, FriQueryStep, Hash}; use crate::util::reverse_index_bits_in_place; @@ -136,7 +135,6 @@ fn fri_prover_query_round, const D: usize>( let mut query_steps = Vec::new(); let x = challenger.get_challenge(); let mut x_index = x.to_canonical_u64() as usize % n; - dbg!(x_index, n); let initial_proof = initial_merkle_trees .iter() .map(|t| (t.get(x_index).to_vec(), t.prove(x_index))) diff --git a/src/fri/verifier.rs b/src/fri/verifier.rs index ed090ed3..351f119c 100644 --- a/src/fri/verifier.rs +++ b/src/fri/verifier.rs @@ -5,7 +5,7 @@ use crate::fri::FriConfig; use crate::hash::hash_n_to_1; use crate::merkle_proofs::verify_merkle_proof; use crate::plonk_challenger::Challenger; -use crate::polynomial::commitment::{EXTENSION_DEGREE, SALT_SIZE}; +use crate::polynomial::commitment::SALT_SIZE; use crate::polynomial::polynomial::PolynomialCoeffs; use crate::proof::{FriInitialTreeProof, FriProof, FriQueryRound, Hash}; use crate::util::{log2_strict, reverse_bits, reverse_index_bits_in_place}; @@ -35,7 +35,6 @@ fn compute_evaluation, const D: usize>( .zip(evals) .map(|(y, e)| ((x * y).into(), e)) .collect::>(); - dbg!(&points); let barycentric_weights = barycentric_weights(&points); interpolate(&points, beta, &barycentric_weights) } diff --git a/src/polynomial/commitment.rs b/src/polynomial/commitment.rs index 8a386d6a..48b63eff 100644 --- a/src/polynomial/commitment.rs +++ b/src/polynomial/commitment.rs @@ -381,10 +381,7 @@ mod tests { (polys, points) } - #[test] - fn test_polynomial_commitment() -> Result<()> { - type F = CrandallField; - + fn check_polynomial_commitment, const D: usize>() -> Result<()> { let k = 10; let degree_log = 11; let num_points = 3; @@ -395,10 +392,10 @@ mod tests { num_query_rounds: 3, blinding: vec![false], }; - let (polys, points) = gen_random_test_case::(k, degree_log, num_points); + let (polys, points) = gen_random_test_case::(k, degree_log, num_points); let lpc = ListPolynomialCommitment::new(polys, fri_config.rate_bits, false); - let (proof, evaluations) = lpc.open::<2>(&points, &mut Challenger::new(), &fri_config); + let (proof, evaluations) = lpc.open::(&points, &mut Challenger::new(), &fri_config); proof.verify( &points, &evaluations.into_iter().map(|e| vec![e]).collect::>(), @@ -408,10 +405,8 @@ mod tests { ) } - #[test] - fn test_polynomial_commitment_blinding() -> Result<()> { - type F = CrandallField; - + fn check_polynomial_commitment_blinding, const D: usize>() -> Result<()> + { let k = 10; let degree_log = 11; let num_points = 3; @@ -422,10 +417,10 @@ mod tests { num_query_rounds: 3, blinding: vec![true], }; - let (polys, points) = gen_random_test_case::(k, degree_log, num_points); + let (polys, points) = gen_random_test_case::(k, degree_log, num_points); let lpc = ListPolynomialCommitment::new(polys, fri_config.rate_bits, true); - let (proof, evaluations) = lpc.open::<2>(&points, &mut Challenger::new(), &fri_config); + let (proof, evaluations) = lpc.open::(&points, &mut Challenger::new(), &fri_config); proof.verify( &points, &evaluations.into_iter().map(|e| vec![e]).collect::>(), @@ -435,10 +430,7 @@ mod tests { ) } - #[test] - fn test_batch_polynomial_commitment() -> Result<()> { - type F = CrandallField; - + fn check_batch_polynomial_commitment, const D: usize>() -> Result<()> { let k0 = 10; let k1 = 3; let k2 = 7; @@ -451,15 +443,15 @@ mod tests { num_query_rounds: 3, blinding: vec![false, false, false], }; - let (polys0, _) = gen_random_test_case::(k0, degree_log, num_points); - let (polys1, _) = gen_random_test_case::(k0, degree_log, num_points); - let (polys2, points) = gen_random_test_case::(k0, degree_log, num_points); + let (polys0, _) = gen_random_test_case::(k0, degree_log, num_points); + let (polys1, _) = gen_random_test_case::(k1, degree_log, num_points); + let (polys2, points) = gen_random_test_case::(k2, degree_log, num_points); let lpc0 = ListPolynomialCommitment::new(polys0, fri_config.rate_bits, false); let lpc1 = ListPolynomialCommitment::new(polys1, fri_config.rate_bits, false); let lpc2 = ListPolynomialCommitment::new(polys2, fri_config.rate_bits, false); - let (proof, evaluations) = ListPolynomialCommitment::batch_open::<2>( + let (proof, evaluations) = ListPolynomialCommitment::batch_open::( &[&lpc0, &lpc1, &lpc2], &points, &mut Challenger::new(), @@ -478,10 +470,8 @@ mod tests { ) } - #[test] - fn test_batch_polynomial_commitment_blinding() -> Result<()> { - type F = CrandallField; - + fn check_batch_polynomial_commitment_blinding, const D: usize>( + ) -> Result<()> { let k0 = 10; let k1 = 3; let k2 = 7; @@ -494,15 +484,15 @@ mod tests { num_query_rounds: 3, blinding: vec![true, false, true], }; - let (polys0, _) = gen_random_test_case::(k0, degree_log, num_points); - let (polys1, _) = gen_random_test_case::(k0, degree_log, num_points); - let (polys2, points) = gen_random_test_case::(k0, degree_log, num_points); + let (polys0, _) = gen_random_test_case::(k0, degree_log, num_points); + let (polys1, _) = gen_random_test_case::(k1, degree_log, num_points); + let (polys2, points) = gen_random_test_case::(k2, degree_log, num_points); let lpc0 = ListPolynomialCommitment::new(polys0, fri_config.rate_bits, true); let lpc1 = ListPolynomialCommitment::new(polys1, fri_config.rate_bits, false); let lpc2 = ListPolynomialCommitment::new(polys2, fri_config.rate_bits, true); - let (proof, evaluations) = ListPolynomialCommitment::batch_open::<2>( + let (proof, evaluations) = ListPolynomialCommitment::batch_open::( &[&lpc0, &lpc1, &lpc2], &points, &mut Challenger::new(), @@ -520,4 +510,82 @@ mod tests { &fri_config, ) } + + mod base { + use super::*; + type F = CrandallField; + const D: usize = 1; + + #[test] + fn test_polynomial_commitment() -> Result<()> { + check_polynomial_commitment::() + } + + #[test] + fn test_polynomial_commitment_blinding() -> Result<()> { + check_polynomial_commitment_blinding::() + } + + #[test] + fn test_batch_polynomial_commitment() -> Result<()> { + check_batch_polynomial_commitment::() + } + + #[test] + fn test_batch_polynomial_commitment_blinding() -> Result<()> { + check_batch_polynomial_commitment_blinding::() + } + } + + mod quadratic { + use super::*; + type F = CrandallField; + const D: usize = 2; + + #[test] + fn test_polynomial_commitment() -> Result<()> { + check_polynomial_commitment::() + } + + #[test] + fn test_polynomial_commitment_blinding() -> Result<()> { + check_polynomial_commitment_blinding::() + } + + #[test] + fn test_batch_polynomial_commitment() -> Result<()> { + check_batch_polynomial_commitment::() + } + + #[test] + fn test_batch_polynomial_commitment_blinding() -> Result<()> { + check_batch_polynomial_commitment_blinding::() + } + } + + mod quartic { + use super::*; + type F = CrandallField; + const D: usize = 4; + + #[test] + fn test_polynomial_commitment() -> Result<()> { + check_polynomial_commitment::() + } + + #[test] + fn test_polynomial_commitment_blinding() -> Result<()> { + check_polynomial_commitment_blinding::() + } + + #[test] + fn test_batch_polynomial_commitment() -> Result<()> { + check_batch_polynomial_commitment::() + } + + #[test] + fn test_batch_polynomial_commitment_blinding() -> Result<()> { + check_batch_polynomial_commitment_blinding::() + } + } } diff --git a/src/proof.rs b/src/proof.rs index 03e78f16..b12c24ec 100644 --- a/src/proof.rs +++ b/src/proof.rs @@ -1,7 +1,7 @@ use crate::field::extension_field::Extendable; use crate::field::field::Field; use crate::merkle_proofs::{MerkleProof, MerkleProofTarget}; -use crate::polynomial::commitment::{ListPolynomialCommitment, OpeningProof, EXTENSION_DEGREE}; +use crate::polynomial::commitment::{ListPolynomialCommitment, OpeningProof}; use crate::polynomial::polynomial::PolynomialCoeffs; use crate::target::Target; use std::convert::TryInto; diff --git a/src/prover.rs b/src/prover.rs index f9847af5..4a570598 100644 --- a/src/prover.rs +++ b/src/prover.rs @@ -10,7 +10,7 @@ use crate::field::field::Field; use crate::generator::generate_partial_witness; use crate::plonk_challenger::Challenger; use crate::plonk_common::{eval_l_1, evaluate_gate_constraints, reduce_with_powers_multi}; -use crate::polynomial::commitment::{ListPolynomialCommitment, EXTENSION_DEGREE}; +use crate::polynomial::commitment::ListPolynomialCommitment; use crate::polynomial::polynomial::{PolynomialCoeffs, PolynomialValues}; use crate::proof::Proof; use crate::timed;