From 44c5c691a81f753a1456bf672d05c46f350d838f Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:00:16 +0800 Subject: [PATCH 1/7] Use Arc in open APIs. --- mpcs/benches/basefold.rs | 5 ++ mpcs/src/basefold.rs | 58 +++++++++-------- mpcs/src/lib.rs | 24 ++++--- mpcs/src/util.rs | 132 +++++++++++++-------------------------- 4 files changed, 95 insertions(+), 124 deletions(-) diff --git a/mpcs/benches/basefold.rs b/mpcs/benches/basefold.rs index 9170612a1..63ed9c1ad 100644 --- a/mpcs/benches/basefold.rs +++ b/mpcs/benches/basefold.rs @@ -66,6 +66,7 @@ fn bench_commit_open_verify_goldilocks>( let eval = poly.evaluate(point.as_slice()); transcript.append_field_element_ext(&eval); let transcript_for_bench = transcript.clone(); + let poly = ArcMultilinearExtension::from(poly); let proof = Pcs::open(&pp, &poly, &comm, &point, &eval, &mut transcript).unwrap(); group.bench_function(BenchmarkId::new("open", format!("{}", num_vars)), |b| { @@ -147,6 +148,10 @@ fn bench_batch_commit_open_verify_goldilocks> .collect::>(); transcript.append_field_element_exts(values.as_slice()); let transcript_for_bench = transcript.clone(); + let polys = polys + .iter() + .map(|poly| ArcMultilinearExtension::from(poly.clone())) + .collect::>(); let proof = Pcs::batch_open(&pp, &polys, &comms, &points, &evals, &mut transcript).unwrap(); diff --git a/mpcs/src/basefold.rs b/mpcs/src/basefold.rs index fcd1eb748..7ad751c75 100644 --- a/mpcs/src/basefold.rs +++ b/mpcs/src/basefold.rs @@ -34,7 +34,6 @@ use query_phase::{ prover_query_phase, simple_batch_prover_query_phase, simple_batch_verifier_query_phase, verifier_query_phase, }; -use std::{borrow::BorrowMut, ops::Deref}; pub use structure::BasefoldSpec; use structure::{BasefoldProof, ProofQueriesResultWithMerklePath}; use transcript::Transcript; @@ -51,7 +50,6 @@ use rayon::{ iter::IntoParallelIterator, prelude::{IntoParallelRefIterator, IntoParallelRefMutIterator, ParallelIterator}, }; -use std::borrow::Cow; pub use sumcheck::{one_level_eval_hc, one_level_interp_hc}; type SumCheck = ClassicSumCheck>; @@ -466,7 +464,7 @@ where /// will panic. fn open( pp: &Self::ProverParam, - poly: &DenseMultilinearExtension, + poly: &ArcMultilinearExtension, comm: &Self::CommitmentWithData, point: &[E], _eval: &E, // Opening does not need eval, except for sanity check @@ -480,7 +478,7 @@ where // the protocol won't work, and saves no verifier work anyway. // In this case, simply return the evaluations as trivial proof. if comm.is_trivial::() { - return Ok(Self::Proof::trivial(vec![poly.evaluations.clone()])); + return Ok(Self::Proof::trivial(vec![poly.evaluations().clone()])); } assert!(comm.num_vars >= Spec::get_basecode_msg_size_log()); @@ -499,8 +497,8 @@ where point, comm, transcript, - poly.num_vars, - poly.num_vars - Spec::get_basecode_msg_size_log(), + poly.num_vars(), + poly.num_vars() - Spec::get_basecode_msg_size_log(), ); // 2. Query phase. --------------------------------------- @@ -546,15 +544,15 @@ where /// not very useful in ceno. fn batch_open( pp: &Self::ProverParam, - polys: &[DenseMultilinearExtension], + polys: &[ArcMultilinearExtension], comms: &[Self::CommitmentWithData], points: &[Vec], evals: &[Evaluation], transcript: &mut Transcript, ) -> Result { let timer = start_timer!(|| "Basefold::batch_open"); - let num_vars = polys.iter().map(|poly| poly.num_vars).max().unwrap(); - let min_num_vars = polys.iter().map(|p| p.num_vars).min().unwrap(); + let num_vars = polys.iter().map(|poly| poly.num_vars()).max().unwrap(); + let min_num_vars = polys.iter().map(|p| p.num_vars()).min().unwrap(); assert!(min_num_vars >= Spec::get_basecode_msg_size_log()); comms.iter().for_each(|comm| { @@ -603,28 +601,31 @@ where let merged_polys = evals.iter().zip(poly_iter_ext(&eq_xt)).fold( // This folding will generate a vector of |points| pairs of (scalar, polynomial) // The polynomials are initialized to zero, and the scalars are initialized to one - vec![(E::ONE, Cow::>::default()); points.len()], + vec![(E::ONE, Vec::::new()); points.len()], |mut merged_polys, (eval, eq_xt_i)| { // For each polynomial to open, eval.point() specifies which point it is to be opened at. - if merged_polys[eval.point()].1.num_vars == 0 { + if merged_polys[eval.point()].1.is_empty() { // If the accumulator for this point is still the zero polynomial, // directly assign the random coefficient and the polynomial to open to // this accumulator - merged_polys[eval.point()] = (eq_xt_i, Cow::Borrowed(&polys[eval.poly()])); + merged_polys[eval.point()] = ( + eq_xt_i, + field_type_to_ext_vec(&polys[eval.poly()].evaluations()), + ); } else { // If the accumulator is unempty now, first force its scalar to 1, i.e., // make (scalar, polynomial) to (1, scalar * polynomial) let coeff = merged_polys[eval.point()].0; if coeff != E::ONE { merged_polys[eval.point()].0 = E::ONE; - multiply_poly(merged_polys[eval.point()].1.to_mut().borrow_mut(), &coeff); + multiply_poly(&mut merged_polys[eval.point()].1, &coeff); } // Equivalent to merged_poly += poly * batch_coeff. Note that // add_assign_mixed_with_coeff allows adding two polynomials with // different variables, and the result has the same number of vars // with the larger one of the two added polynomials. add_polynomial_with_coeff( - merged_polys[eval.point()].1.to_mut().borrow_mut(), + &mut merged_polys[eval.point()].1, &polys[eval.poly()], &eq_xt_i, ); @@ -642,18 +643,16 @@ where .iter() .zip(&points) .map(|((scalar, poly), point)| { - inner_product( - &poly_iter_ext(poly).collect_vec(), - build_eq_x_r_vec(point).iter(), - ) * scalar - * E::from(1 << (num_vars - poly.num_vars)) + inner_product(poly, build_eq_x_r_vec(point).iter()) + * scalar + * E::from(1 << (num_vars - log2_strict(poly.len()))) // When this polynomial is smaller, it will be repeatedly summed over the cosets of the hypercube }) .sum::(); assert_eq!(expected_sum, target_sum); merged_polys.iter().enumerate().for_each(|(i, (_, poly))| { - assert_eq!(points[i].len(), poly.num_vars); + assert_eq!(points[i].len(), log2_strict(poly.len())); }); } @@ -666,12 +665,17 @@ where * scalar }) .sum(); - let sumcheck_polys: Vec<&DenseMultilinearExtension> = merged_polys + let sumcheck_polys: Vec> = merged_polys .iter() - .map(|(_, poly)| poly.deref()) + .map(|(_, poly)| { + DenseMultilinearExtension::from_evaluations_ext_vec( + log2_strict(poly.len()), + poly.clone(), + ) + }) .collect_vec(); let virtual_poly = - VirtualPolynomial::new(&expression, sumcheck_polys, &[], points.as_slice()); + VirtualPolynomial::new(&expression, sumcheck_polys.iter(), &[], points.as_slice()); let (challenges, merged_poly_evals, sumcheck_proof) = SumCheck::prove(&(), num_vars, virtual_poly, target_sum, transcript)?; @@ -695,7 +699,7 @@ where if cfg!(feature = "sanity-check") { let poly_evals = polys .iter() - .map(|poly| poly.evaluate(&challenges[..poly.num_vars])) + .map(|poly| poly.evaluate(&challenges[..poly.num_vars()])) .collect_vec(); let new_target_sum = inner_product(&poly_evals, &coeffs); let desired_sum = merged_polys @@ -705,7 +709,11 @@ where .map(|(((scalar, poly), point), evals_from_sum_check)| { assert_eq!( evals_from_sum_check, - poly.evaluate(&challenges[..poly.num_vars]) + DenseMultilinearExtension::from_evaluations_ext_vec( + log2_strict(poly.len()), + poly.clone() + ) + .evaluate(&challenges[..log2_strict(poly.len())]) ); *scalar * evals_from_sum_check diff --git a/mpcs/src/lib.rs b/mpcs/src/lib.rs index e98f84e50..332dfd746 100644 --- a/mpcs/src/lib.rs +++ b/mpcs/src/lib.rs @@ -62,7 +62,7 @@ pub fn pcs_batch_commit_and_write>( pp: &Pcs::ProverParam, - poly: &DenseMultilinearExtension, + poly: &ArcMultilinearExtension, comm: &Pcs::CommitmentWithData, point: &[E], eval: &E, @@ -73,7 +73,7 @@ pub fn pcs_open>( pub fn pcs_batch_open>( pp: &Pcs::ProverParam, - polys: &[DenseMultilinearExtension], + polys: &[ArcMultilinearExtension], comms: &[Pcs::CommitmentWithData], points: &[Vec], evals: &[Evaluation], @@ -162,7 +162,7 @@ pub trait PolynomialCommitmentScheme: Clone + Debug { fn open( pp: &Self::ProverParam, - poly: &DenseMultilinearExtension, + poly: &ArcMultilinearExtension, comm: &Self::CommitmentWithData, point: &[E], eval: &E, @@ -171,7 +171,7 @@ pub trait PolynomialCommitmentScheme: Clone + Debug { fn batch_open( pp: &Self::ProverParam, - polys: &[DenseMultilinearExtension], + polys: &[ArcMultilinearExtension], comms: &[Self::CommitmentWithData], points: &[Vec], evals: &[Evaluation], @@ -226,7 +226,7 @@ where { fn ni_open( pp: &Self::ProverParam, - poly: &DenseMultilinearExtension, + poly: &ArcMultilinearExtension, comm: &Self::CommitmentWithData, point: &[E], eval: &E, @@ -237,7 +237,7 @@ where fn ni_batch_open( pp: &Self::ProverParam, - polys: &[DenseMultilinearExtension], + polys: &[ArcMultilinearExtension], comms: &[Self::CommitmentWithData], points: &[Vec], evals: &[Evaluation], @@ -323,17 +323,17 @@ use multilinear_extensions::virtual_poly_v2::ArcMultilinearExtension; fn validate_input( function: &str, param_num_vars: usize, - polys: &[DenseMultilinearExtension], + polys: &[ArcMultilinearExtension], points: &[Vec], ) -> Result<(), Error> { let polys = polys.iter().collect_vec(); let points = points.iter().collect_vec(); for poly in polys.iter() { - if param_num_vars < poly.num_vars { + if param_num_vars < poly.num_vars() { return Err(err_too_many_variates( function, param_num_vars, - poly.num_vars, + poly.num_vars(), )); } } @@ -462,6 +462,7 @@ pub mod test_util { let comm = Pcs::commit_and_write(&pp, &poly, &mut transcript).unwrap(); let point = get_point_from_challenge(num_vars, &mut transcript); let eval = poly.evaluate(point.as_slice()); + let poly = ArcMultilinearExtension::from(poly); transcript.append_field_element_ext(&eval); ( @@ -533,6 +534,11 @@ pub mod test_util { .collect::>(); transcript.append_field_element_exts(values.as_slice()); + let polys = polys + .iter() + .map(|poly| ArcMultilinearExtension::from(poly.clone())) + .collect_vec(); + let proof = Pcs::batch_open(&pp, &polys, &comms, &points, &evals, &mut transcript).unwrap(); (comms, evals, proof, transcript.read_challenge()) diff --git a/mpcs/src/util.rs b/mpcs/src/util.rs index 80ecf2535..6aff42fd7 100644 --- a/mpcs/src/util.rs +++ b/mpcs/src/util.rs @@ -6,8 +6,11 @@ pub mod plonky2_util; use ff::{Field, PrimeField}; use ff_ext::ExtensionField; use goldilocks::SmallField; -use itertools::{Itertools, izip}; -use multilinear_extensions::mle::{DenseMultilinearExtension, FieldType}; +use itertools::{Either, Itertools, izip}; +use multilinear_extensions::{ + mle::{DenseMultilinearExtension, FieldType}, + virtual_poly_v2::ArcMultilinearExtension, +}; use serde::{Deserialize, Serialize, de::DeserializeOwned}; pub mod merkle_tree; use crate::{Error, util::parallel::parallelize}; @@ -183,118 +186,67 @@ pub fn field_type_iter_ext(evaluations: &FieldType) -> Fie } } -pub fn multiply_poly(poly: &mut DenseMultilinearExtension, scalar: &E) { - match &mut poly.evaluations { +pub fn field_type_iter_range_base<'a, E: ExtensionField>( + values: &'a FieldType, + range: impl IntoIterator + 'a, +) -> impl Iterator + 'a { + match values { FieldType::Ext(coeffs) => { - for coeff in coeffs.iter_mut() { - *coeff *= scalar; - } - } - FieldType::Base(coeffs) => { - *poly = DenseMultilinearExtension::::from_evaluations_ext_vec( - poly.num_vars, - coeffs.iter().map(|x| E::from(*x) * scalar).collect(), - ); + Either::Left(range.into_iter().flat_map(|i| coeffs[i].as_bases())) } + FieldType::Base(coeffs) => Either::Right(range.into_iter().map(|i| &coeffs[i])), _ => unreachable!(), } } +pub fn multiply_poly(poly: &mut [E], scalar: &E) { + for coeff in poly.iter_mut() { + *coeff *= scalar; + } +} + /// Resize to the new number of variables, which must be greater than or equal to /// the current number of variables. -pub fn resize_num_vars( - poly: &mut DenseMultilinearExtension, - num_vars: usize, -) { - assert!(num_vars >= poly.num_vars); - if num_vars == poly.num_vars { +pub fn resize_num_vars(poly: &mut Vec, num_vars: usize) { + assert!(num_vars >= log2_strict(poly.len())); + if num_vars == log2_strict(poly.len()) { return; } - match &mut poly.evaluations { - FieldType::Base(evaluations) => { - evaluations.resize(1 << num_vars, E::BaseField::ZERO); - // When evaluate a multilinear polynomial outside of its original interpolated hypercube, - // the evaluations are just repetitions of the original evaluations - (1 << poly.num_vars..1 << num_vars) - .for_each(|i| evaluations[i] = evaluations[i & ((1 << poly.num_vars) - 1)]); - } - FieldType::Ext(evaluations) => { - evaluations.resize(1 << num_vars, E::ZERO); - (1 << poly.num_vars..1 << num_vars) - .for_each(|i| evaluations[i] = evaluations[i & ((1 << poly.num_vars) - 1)]) - } - _ => unreachable!(), - } - poly.num_vars = num_vars; + poly.resize(1 << num_vars, E::ZERO); + (log2_strict(poly.len())..1 << num_vars).for_each(|i| poly[i] = poly[i & ((poly.len()) - 1)]) } pub fn add_polynomial_with_coeff( - lhs: &mut DenseMultilinearExtension, - rhs: &DenseMultilinearExtension, + lhs: &mut Vec, + rhs: &ArcMultilinearExtension, coeff: &E, ) { - match (lhs.num_vars == 0, rhs.num_vars == 0) { + match (lhs.is_empty(), rhs.num_vars() == 0) { (_, true) => {} (true, false) => { - *lhs = rhs.clone(); + *lhs = field_type_to_ext_vec(rhs.evaluations()); multiply_poly(lhs, coeff); } (false, false) => { - if lhs.num_vars < rhs.num_vars { - resize_num_vars(lhs, rhs.num_vars); + if log2_strict(lhs.len()) < rhs.num_vars() { + resize_num_vars(lhs, rhs.num_vars()); } - if rhs.num_vars < lhs.num_vars { - match &mut lhs.evaluations { - FieldType::Ext(ref mut lhs) => { - parallelize(lhs, |(lhs, start)| { - for (index, lhs) in lhs.iter_mut().enumerate() { - *lhs += *coeff - * poly_index_ext( - rhs, - (start + index) & ((1 << rhs.num_vars) - 1), - ); - } - }); - } - FieldType::Base(ref mut lhs_evals) => { - *lhs = DenseMultilinearExtension::::from_evaluations_ext_vec( - lhs.num_vars, - lhs_evals - .iter() - .enumerate() - .map(|(index, lhs)| { - E::from(*lhs) - + *coeff - * poly_index_ext(rhs, index & ((1 << rhs.num_vars) - 1)) - }) - .collect(), - ); + if rhs.num_vars() < log2_strict(lhs.len()) { + parallelize(lhs, |(lhs, start)| { + for (index, lhs) in lhs.iter_mut().enumerate() { + *lhs += *coeff + * field_type_index_ext( + rhs.evaluations(), + (start + index) & ((1 << rhs.num_vars()) - 1), + ); } - _ => unreachable!(), - } + }); } else { - match &mut lhs.evaluations { - FieldType::Ext(ref mut lhs) => { - parallelize(lhs, |(lhs, start)| { - for (index, lhs) in lhs.iter_mut().enumerate() { - *lhs += *coeff * poly_index_ext(rhs, start + index); - } - }); - } - FieldType::Base(ref mut lhs_evals) => { - *lhs = DenseMultilinearExtension::::from_evaluations_ext_vec( - lhs.num_vars, - lhs_evals - .iter() - .enumerate() - .map(|(index, lhs)| { - E::from(*lhs) + *coeff * poly_index_ext(rhs, index) - }) - .collect(), - ); + parallelize(lhs, |(lhs, start)| { + for (index, lhs) in lhs.iter_mut().enumerate() { + *lhs += *coeff * field_type_index_ext(rhs.evaluations(), start + index); } - _ => unreachable!(), - } + }); } } } From 23b10dfdf61ef6f56202cc4e934b163b06007836 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:01:57 +0800 Subject: [PATCH 2/7] Add a missing utility function. --- mpcs/src/basefold.rs | 2 +- mpcs/src/util.rs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mpcs/src/basefold.rs b/mpcs/src/basefold.rs index 7ad751c75..7659bf07b 100644 --- a/mpcs/src/basefold.rs +++ b/mpcs/src/basefold.rs @@ -11,7 +11,7 @@ use crate::{ inner_product, inner_product_three, interpolate_field_type_over_boolean_hypercube, }, expression::{Expression, Query, Rotation}, - ext_to_usize, + ext_to_usize, field_type_to_ext_vec, hash::{Digest, write_digest_to_transcript}, log2_strict, merkle_tree::MerkleTree, diff --git a/mpcs/src/util.rs b/mpcs/src/util.rs index 6aff42fd7..ab21ec242 100644 --- a/mpcs/src/util.rs +++ b/mpcs/src/util.rs @@ -199,6 +199,14 @@ pub fn field_type_iter_range_base<'a, E: ExtensionField>( } } +pub fn field_type_to_ext_vec(evaluations: &FieldType) -> Vec { + match evaluations { + FieldType::Ext(coeffs) => coeffs.to_vec(), + FieldType::Base(coeffs) => coeffs.iter().map(|x| (*x).into()).collect(), + _ => unreachable!(), + } +} + pub fn multiply_poly(poly: &mut [E], scalar: &E) { for coeff in poly.iter_mut() { *coeff *= scalar; From e644740c7197a2c0724e6b1686c66ac47a8a012e Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:08:25 +0800 Subject: [PATCH 3/7] Remove a redundant function that should be added in another PR. --- mpcs/src/util.rs | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/mpcs/src/util.rs b/mpcs/src/util.rs index ab21ec242..ca5cc654e 100644 --- a/mpcs/src/util.rs +++ b/mpcs/src/util.rs @@ -6,7 +6,7 @@ pub mod plonky2_util; use ff::{Field, PrimeField}; use ff_ext::ExtensionField; use goldilocks::SmallField; -use itertools::{Either, Itertools, izip}; +use itertools::{Itertools, izip}; use multilinear_extensions::{ mle::{DenseMultilinearExtension, FieldType}, virtual_poly_v2::ArcMultilinearExtension, @@ -186,19 +186,6 @@ pub fn field_type_iter_ext(evaluations: &FieldType) -> Fie } } -pub fn field_type_iter_range_base<'a, E: ExtensionField>( - values: &'a FieldType, - range: impl IntoIterator + 'a, -) -> impl Iterator + 'a { - match values { - FieldType::Ext(coeffs) => { - Either::Left(range.into_iter().flat_map(|i| coeffs[i].as_bases())) - } - FieldType::Base(coeffs) => Either::Right(range.into_iter().map(|i| &coeffs[i])), - _ => unreachable!(), - } -} - pub fn field_type_to_ext_vec(evaluations: &FieldType) -> Vec { match evaluations { FieldType::Ext(coeffs) => coeffs.to_vec(), From b5924bfbb3ebf131ae73cd7fca89d2854be01db3 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:11:56 +0800 Subject: [PATCH 4/7] Fix clippy. --- mpcs/src/basefold.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mpcs/src/basefold.rs b/mpcs/src/basefold.rs index 7659bf07b..dfeec7f92 100644 --- a/mpcs/src/basefold.rs +++ b/mpcs/src/basefold.rs @@ -610,7 +610,7 @@ where // this accumulator merged_polys[eval.point()] = ( eq_xt_i, - field_type_to_ext_vec(&polys[eval.poly()].evaluations()), + field_type_to_ext_vec(polys[eval.poly()].evaluations()), ); } else { // If the accumulator is unempty now, first force its scalar to 1, i.e., From d42f7944451bba180c20d77f9371d66f4bb7aa50 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:24:44 +0800 Subject: [PATCH 5/7] Fix clippy. --- mpcs/benches/basefold.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mpcs/benches/basefold.rs b/mpcs/benches/basefold.rs index 63ed9c1ad..4fe8b4094 100644 --- a/mpcs/benches/basefold.rs +++ b/mpcs/benches/basefold.rs @@ -143,8 +143,7 @@ fn bench_batch_commit_open_verify_goldilocks> .collect_vec(); let values: Vec = evals .iter() - .map(Evaluation::value) - .map(|x| *x) + .map(Evaluation::value).copied() .collect::>(); transcript.append_field_element_exts(values.as_slice()); let transcript_for_bench = transcript.clone(); @@ -186,8 +185,7 @@ fn bench_batch_commit_open_verify_goldilocks> let values: Vec = evals .iter() - .map(Evaluation::value) - .map(|x| *x) + .map(Evaluation::value).copied() .collect::>(); transcript.append_field_element_exts(values.as_slice()); From 8d8273253e185ebc3b96fe6715c7348bc2804274 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:26:00 +0800 Subject: [PATCH 6/7] Cargo fmt. --- mpcs/benches/basefold.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mpcs/benches/basefold.rs b/mpcs/benches/basefold.rs index 4fe8b4094..767bc8baa 100644 --- a/mpcs/benches/basefold.rs +++ b/mpcs/benches/basefold.rs @@ -143,7 +143,8 @@ fn bench_batch_commit_open_verify_goldilocks> .collect_vec(); let values: Vec = evals .iter() - .map(Evaluation::value).copied() + .map(Evaluation::value) + .copied() .collect::>(); transcript.append_field_element_exts(values.as_slice()); let transcript_for_bench = transcript.clone(); @@ -185,7 +186,8 @@ fn bench_batch_commit_open_verify_goldilocks> let values: Vec = evals .iter() - .map(Evaluation::value).copied() + .map(Evaluation::value) + .copied() .collect::>(); transcript.append_field_element_exts(values.as_slice()); From 4883bf7296b701431000e3afb6b7772d827afc62 Mon Sep 17 00:00:00 2001 From: Yuncong Zhang Date: Wed, 6 Nov 2024 15:29:33 +0800 Subject: [PATCH 7/7] Fix Cargo.toml. --- mpcs/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mpcs/Cargo.toml b/mpcs/Cargo.toml index 0f53481d0..1100cb133 100644 --- a/mpcs/Cargo.toml +++ b/mpcs/Cargo.toml @@ -37,8 +37,8 @@ print-trace = ["ark-std/print-trace"] sanity-check = [] [[bench]] -name = "basefold" harness = false +name = "basefold" [[bench]] harness = false