From 6e5c44c8223b4f7522d6dced4f88d1da41ec344b Mon Sep 17 00:00:00 2001 From: Alexander Camuto Date: Wed, 7 Jun 2023 20:05:51 +0100 Subject: [PATCH 01/14] feat: public cells --- halo2_proofs/src/circuit.rs | 7 ++++--- halo2_proofs/src/circuit/floor_planner/single_pass.rs | 10 ++++++---- halo2_proofs/src/plonk/circuit.rs | 3 ++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/halo2_proofs/src/circuit.rs b/halo2_proofs/src/circuit.rs index f15205e433..eb2b029b61 100644 --- a/halo2_proofs/src/circuit.rs +++ b/halo2_proofs/src/circuit.rs @@ -13,6 +13,7 @@ pub use value::Value; pub mod floor_planner; pub use floor_planner::single_pass::SimpleFloorPlanner; +pub use floor_planner::single_pass::SimpleTableLayouter; pub mod layouter; @@ -87,11 +88,11 @@ impl std::ops::Deref for RegionStart { #[derive(Clone, Copy, Debug)] pub struct Cell { /// Identifies the region in which this cell resides. - region_index: RegionIndex, + pub region_index: RegionIndex, /// The relative offset of this cell within its region. - row_offset: usize, + pub row_offset: usize, /// The column of this cell. - column: Column, + pub column: Column, } /// An assigned cell. diff --git a/halo2_proofs/src/circuit/floor_planner/single_pass.rs b/halo2_proofs/src/circuit/floor_planner/single_pass.rs index 54268006a8..b6f2c38c09 100644 --- a/halo2_proofs/src/circuit/floor_planner/single_pass.rs +++ b/halo2_proofs/src/circuit/floor_planner/single_pass.rs @@ -398,11 +398,12 @@ impl<'r, 'a, F: Field, CS: Assignment + 'a + SyncDeps> RegionLayouter /// witnesses or not. type DefaultTableValue = Option>>; -pub(crate) struct SimpleTableLayouter<'r, 'a, F: Field, CS: Assignment + 'a> { +/// A table layouter that can be used to assign values to a table. +pub struct SimpleTableLayouter<'r, 'a, F: Field, CS: Assignment + 'a> { cs: &'a mut CS, used_columns: &'r [TableColumn], - // maps from a fixed column to a pair (default value, vector saying which rows are assigned) - pub(crate) default_and_assigned: HashMap, Vec)>, + /// maps from a fixed column to a pair (default value, vector saying which rows are assigned) + pub default_and_assigned: HashMap, Vec)>, } impl<'r, 'a, F: Field, CS: Assignment + 'a> fmt::Debug for SimpleTableLayouter<'r, 'a, F, CS> { @@ -415,7 +416,8 @@ impl<'r, 'a, F: Field, CS: Assignment + 'a> fmt::Debug for SimpleTableLayoute } impl<'r, 'a, F: Field, CS: Assignment + 'a> SimpleTableLayouter<'r, 'a, F, CS> { - pub(crate) fn new(cs: &'a mut CS, used_columns: &'r [TableColumn]) -> Self { + /// + pub fn new(cs: &'a mut CS, used_columns: &'r [TableColumn]) -> Self { SimpleTableLayouter { cs, used_columns, diff --git a/halo2_proofs/src/plonk/circuit.rs b/halo2_proofs/src/plonk/circuit.rs index 1c55eb5c8b..42285f0abb 100644 --- a/halo2_proofs/src/plonk/circuit.rs +++ b/halo2_proofs/src/plonk/circuit.rs @@ -577,7 +577,8 @@ pub struct TableColumn { } impl TableColumn { - pub(crate) fn inner(&self) -> Column { + /// Returns inner column + pub fn inner(&self) -> Column { self.inner } } From d61710befedd3ba5db4c39da3bba25609bd15de1 Mon Sep 17 00:00:00 2001 From: Alexander Camuto Date: Wed, 7 Jun 2023 22:38:42 +0100 Subject: [PATCH 02/14] Update mds.rs --- halo2_gadgets/src/poseidon/primitives/mds.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/halo2_gadgets/src/poseidon/primitives/mds.rs b/halo2_gadgets/src/poseidon/primitives/mds.rs index 892ee11f6b..82b48769dd 100644 --- a/halo2_gadgets/src/poseidon/primitives/mds.rs +++ b/halo2_gadgets/src/poseidon/primitives/mds.rs @@ -81,8 +81,9 @@ pub(super) fn generate_mds + Ord, const T: usize>( if m == j { acc } else { + let diff: F = (x_j - *x_m).into(); // We can invert freely; by construction, the elements of xs are distinct. - acc * (x - x_m) * (x_j - x_m).invert().unwrap() + acc * (x - x_m) * diff.invert().unwrap() } }) }; From ac425ba75960c325310a488b1db7da26cc6b9f18 Mon Sep 17 00:00:00 2001 From: Alexander Camuto Date: Wed, 7 Jun 2023 22:41:52 +0100 Subject: [PATCH 03/14] Update mds.rs --- halo2_gadgets/src/poseidon/primitives/mds.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_gadgets/src/poseidon/primitives/mds.rs b/halo2_gadgets/src/poseidon/primitives/mds.rs index 82b48769dd..227a684f74 100644 --- a/halo2_gadgets/src/poseidon/primitives/mds.rs +++ b/halo2_gadgets/src/poseidon/primitives/mds.rs @@ -81,7 +81,7 @@ pub(super) fn generate_mds + Ord, const T: usize>( if m == j { acc } else { - let diff: F = (x_j - *x_m).into(); + let diff: F = x_j - *x_m; // We can invert freely; by construction, the elements of xs are distinct. acc * (x - x_m) * diff.invert().unwrap() } From 7ffea25de82334f6f5bbd1284543ecd6a546f40b Mon Sep 17 00:00:00 2001 From: dante <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 09:59:08 +0100 Subject: [PATCH 04/14] Update single_pass.rs Co-authored-by: Han --- halo2_proofs/src/circuit/floor_planner/single_pass.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_proofs/src/circuit/floor_planner/single_pass.rs b/halo2_proofs/src/circuit/floor_planner/single_pass.rs index b6f2c38c09..5e9c8d2749 100644 --- a/halo2_proofs/src/circuit/floor_planner/single_pass.rs +++ b/halo2_proofs/src/circuit/floor_planner/single_pass.rs @@ -416,7 +416,7 @@ impl<'r, 'a, F: Field, CS: Assignment + 'a> fmt::Debug for SimpleTableLayoute } impl<'r, 'a, F: Field, CS: Assignment + 'a> SimpleTableLayouter<'r, 'a, F, CS> { - /// + /// Returns a new SimpleTableLayouter pub fn new(cs: &'a mut CS, used_columns: &'r [TableColumn]) -> Self { SimpleTableLayouter { cs, From d44368f85dbc609777bdd74ddc79245513c26f27 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 18:55:34 +0100 Subject: [PATCH 05/14] bump toolchain to resolve errors --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index 9405730420..902c74186f 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.64.0 +1.65.0 From caf5d0e3bd23f9be4fc8e2a2ac255b23f55b1ed1 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 19:09:36 +0100 Subject: [PATCH 06/14] fix clippy errors for CI run --- halo2_proofs/benches/commit_zk.rs | 1 - halo2_proofs/src/arithmetic.rs | 10 +++++----- halo2_proofs/src/circuit/floor_planner/v1.rs | 4 +--- halo2_proofs/src/dev.rs | 4 ---- halo2_proofs/src/plonk.rs | 2 +- halo2_proofs/src/plonk/evaluation.rs | 2 +- halo2_proofs/src/plonk/lookup/prover.rs | 2 +- halo2_proofs/src/plonk/permutation/keygen.rs | 8 ++++---- halo2_proofs/src/plonk/permutation/prover.rs | 2 +- .../src/plonk/permutation/verifier.rs | 2 +- halo2_proofs/src/plonk/prover.rs | 6 +++--- halo2_proofs/src/plonk/vanishing/prover.rs | 1 - halo2_proofs/src/plonk/verifier.rs | 16 ++++++--------- halo2_proofs/src/poly/domain.rs | 12 +++++------ halo2_proofs/src/poly/kzg/commitment.rs | 6 +++--- halo2_proofs/src/transcript.rs | 20 +++++++++---------- 16 files changed, 43 insertions(+), 55 deletions(-) diff --git a/halo2_proofs/benches/commit_zk.rs b/halo2_proofs/benches/commit_zk.rs index f1d2f70abf..6cd57d176f 100644 --- a/halo2_proofs/benches/commit_zk.rs +++ b/halo2_proofs/benches/commit_zk.rs @@ -27,7 +27,6 @@ fn rand_poly_par(mut rng: ChaCha20Rng, domain: usize) -> Vec { let mut rand_vec = vec![Scalar::zero(); n]; let mut thread_seeds: Vec = (0..n_chunks) - .into_iter() .map(|_| { let mut seed = [0u8; 32]; rng.fill_bytes(&mut seed); diff --git a/halo2_proofs/src/arithmetic.rs b/halo2_proofs/src/arithmetic.rs index d8c7fee69a..7366fb7b19 100644 --- a/halo2_proofs/src/arithmetic.rs +++ b/halo2_proofs/src/arithmetic.rs @@ -195,7 +195,7 @@ pub fn best_fft>(a: &mut [G], omega: Scalar, let threads = multicore::current_num_threads(); let log_threads = log2_floor(threads); - let n = a.len() as usize; + let n = a.len(); assert_eq!(n, 1 << log_n); for k in 0..n { @@ -206,7 +206,7 @@ pub fn best_fft>(a: &mut [G], omega: Scalar, } // precompute twiddle factors - let twiddles: Vec<_> = (0..(n / 2) as usize) + let twiddles: Vec<_> = (0..(n / 2)) .scan(Scalar::ONE, |w, _| { let tw = *w; *w *= ω @@ -216,7 +216,7 @@ pub fn best_fft>(a: &mut [G], omega: Scalar, if log_n <= log_threads { let mut chunk = 2_usize; - let mut twiddle_chunk = (n / 2) as usize; + let mut twiddle_chunk = n / 2; for _ in 0..log_n { a.chunks_mut(chunk).for_each(|coeffs| { let (left, right) = coeffs.split_at_mut(chunk / 2); @@ -290,7 +290,7 @@ pub fn recursive_butterfly_arithmetic>( /// Convert coefficient bases group elements to lagrange basis by inverse FFT. pub fn g_to_lagrange(g_projective: Vec, k: u32) -> Vec { - let n_inv = C::Scalar::TWO_INV.pow_vartime(&[k as u64, 0, 0, 0]); + let n_inv = C::Scalar::TWO_INV.pow_vartime([k as u64, 0, 0, 0]); let mut omega_inv = C::Scalar::ROOT_OF_UNITY_INV; for _ in k..C::Scalar::S { omega_inv = omega_inv.square(); @@ -335,7 +335,7 @@ pub fn eval_polynomial(poly: &[F], point: F) -> F { { scope.spawn(move |_| { let start = chunk_idx * chunk_size; - out[0] = evaluate(poly, point) * point.pow_vartime(&[start as u64, 0, 0, 0]); + out[0] = evaluate(poly, point) * point.pow_vartime([start as u64, 0, 0, 0]); }); } }); diff --git a/halo2_proofs/src/circuit/floor_planner/v1.rs b/halo2_proofs/src/circuit/floor_planner/v1.rs index 3df8c18114..ebee81246a 100644 --- a/halo2_proofs/src/circuit/floor_planner/v1.rs +++ b/halo2_proofs/src/circuit/floor_planner/v1.rs @@ -80,9 +80,7 @@ impl FloorPlanner for V1 { plan.regions = regions; // - Determine how many rows our planned circuit will require. - let first_unassigned_row = column_allocations - .iter() - .map(|(_, a)| a.unbounded_interval_start()) + let first_unassigned_row = column_allocations.values().map(|a| a.unbounded_interval_start()) .max() .unwrap_or(0); diff --git a/halo2_proofs/src/dev.rs b/halo2_proofs/src/dev.rs index 8fe602f1d0..fb1df7a12c 100644 --- a/halo2_proofs/src/dev.rs +++ b/halo2_proofs/src/dev.rs @@ -799,7 +799,6 @@ impl + Ord> MockProver { (self.n as usize - (self.cs.blinding_factors() + 1))..(self.n as usize); (gate_row_ids .clone() - .into_iter() .chain(blinding_rows.into_iter())) .flat_map(move |row| { let row = row as i32 + n; @@ -955,7 +954,6 @@ impl + Ord> MockProver { let mut inputs: Vec<(Vec<_>, usize)> = lookup_input_row_ids .clone() - .into_iter() .filter_map(|input_row| { let t = lookup .input_expressions @@ -1026,7 +1024,6 @@ impl + Ord> MockProver { let mut input_rows: Vec<(Vec>, usize)> = self .usable_rows .clone() - .into_iter() .map(|input_row| { let t = shuffle .input_expressions @@ -1449,7 +1446,6 @@ impl + Ord> MockProver { let mut input_rows: Vec<(Vec>, usize)> = self .usable_rows .clone() - .into_iter() .map(|input_row| { let t = shuffle .input_expressions diff --git a/halo2_proofs/src/plonk.rs b/halo2_proofs/src/plonk.rs index c216a2fe34..5b22acfc74 100644 --- a/halo2_proofs/src/plonk.rs +++ b/halo2_proofs/src/plonk.rs @@ -128,7 +128,7 @@ where .map(|mut selector| { let mut selector_bytes = vec![0u8; (selector.len() + 7) / 8]; reader.read_exact(&mut selector_bytes)?; - for (bits, byte) in selector.chunks_mut(8).into_iter().zip(selector_bytes) { + for (bits, byte) in selector.chunks_mut(8).zip(selector_bytes) { crate::helpers::unpack(byte, bits); } Ok(selector) diff --git a/halo2_proofs/src/plonk/evaluation.rs b/halo2_proofs/src/plonk/evaluation.rs index 2061607982..d1cb398a29 100644 --- a/halo2_proofs/src/plonk/evaluation.rs +++ b/halo2_proofs/src/plonk/evaluation.rs @@ -411,7 +411,7 @@ impl Evaluator { // Permutation constraints parallelize(&mut values, |values, start| { - let mut beta_term = extended_omega.pow_vartime(&[start as u64, 0, 0, 0]); + let mut beta_term = extended_omega.pow_vartime([start as u64, 0, 0, 0]); for (i, value) in values.iter_mut().enumerate() { let idx = start + i; let r_next = get_rotation_idx(idx, 1, rot_scale, isize); diff --git a/halo2_proofs/src/plonk/lookup/prover.rs b/halo2_proofs/src/plonk/lookup/prover.rs index 0f0c85d7e3..6a5f883a03 100644 --- a/halo2_proofs/src/plonk/lookup/prover.rs +++ b/halo2_proofs/src/plonk/lookup/prover.rs @@ -443,7 +443,7 @@ fn permute_expression_pair<'params, C: CurveAffine, P: Params<'params, C>, R: Rn // Populate permuted table at unfilled rows with leftover table elements for (coeff, count) in leftover_table_map.iter() { for _ in 0..*count { - permuted_table_coeffs[repeated_input_rows.pop().unwrap() as usize] = *coeff; + permuted_table_coeffs[repeated_input_rows.pop().unwrap()] = *coeff; } } assert!(repeated_input_rows.is_empty()); diff --git a/halo2_proofs/src/plonk/permutation/keygen.rs b/halo2_proofs/src/plonk/permutation/keygen.rs index 57882fad66..819612357e 100644 --- a/halo2_proofs/src/plonk/permutation/keygen.rs +++ b/halo2_proofs/src/plonk/permutation/keygen.rs @@ -327,7 +327,7 @@ pub(crate) fn build_pk<'params, C: CurveAffine, P: Params<'params, C>>( { let omega = domain.get_omega(); parallelize(&mut omega_powers, |o, start| { - let mut cur = omega.pow_vartime(&[start as u64]); + let mut cur = omega.pow_vartime([start as u64]); for v in o.iter_mut() { *v = cur; cur *= ω @@ -339,7 +339,7 @@ pub(crate) fn build_pk<'params, C: CurveAffine, P: Params<'params, C>>( let mut deltaomega = vec![omega_powers; p.columns.len()]; { parallelize(&mut deltaomega, |o, start| { - let mut cur = C::Scalar::DELTA.pow_vartime(&[start as u64]); + let mut cur = C::Scalar::DELTA.pow_vartime([start as u64]); for omega_powers in o.iter_mut() { for v in omega_powers { *v *= &cur; @@ -403,7 +403,7 @@ pub(crate) fn build_vk<'params, C: CurveAffine, P: Params<'params, C>>( { let omega = domain.get_omega(); parallelize(&mut omega_powers, |o, start| { - let mut cur = omega.pow_vartime(&[start as u64]); + let mut cur = omega.pow_vartime([start as u64]); for v in o.iter_mut() { *v = cur; cur *= ω @@ -415,7 +415,7 @@ pub(crate) fn build_vk<'params, C: CurveAffine, P: Params<'params, C>>( let mut deltaomega = vec![omega_powers; p.columns.len()]; { parallelize(&mut deltaomega, |o, start| { - let mut cur = C::Scalar::DELTA.pow_vartime(&[start as u64]); + let mut cur = C::Scalar::DELTA.pow_vartime([start as u64]); for omega_powers in o.iter_mut() { for v in omega_powers { *v *= &cur; diff --git a/halo2_proofs/src/plonk/permutation/prover.rs b/halo2_proofs/src/plonk/permutation/prover.rs index 2dbc2deadc..f31c6ed19c 100644 --- a/halo2_proofs/src/plonk/permutation/prover.rs +++ b/halo2_proofs/src/plonk/permutation/prover.rs @@ -127,7 +127,7 @@ impl Argument { Any::Instance => instance, }; parallelize(&mut modified_values, |modified_values, start| { - let mut deltaomega = deltaomega * &omega.pow_vartime(&[start as u64, 0, 0, 0]); + let mut deltaomega = deltaomega * &omega.pow_vartime([start as u64, 0, 0, 0]); for (modified_values, value) in modified_values .iter_mut() .zip(values[column.index()][start..].iter()) diff --git a/halo2_proofs/src/plonk/permutation/verifier.rs b/halo2_proofs/src/plonk/permutation/verifier.rs index ce9fe9bbac..88fed41a18 100644 --- a/halo2_proofs/src/plonk/permutation/verifier.rs +++ b/halo2_proofs/src/plonk/permutation/verifier.rs @@ -179,7 +179,7 @@ impl Evaluated { let mut right = set.permutation_product_eval; let mut current_delta = (*beta * &*x) * &(::DELTA - .pow_vartime(&[(chunk_index * chunk_len) as u64])); + .pow_vartime([(chunk_index * chunk_len) as u64])); for eval in columns.iter().map(|&column| match column.column_type() { Any::Advice(_) => { advice_evals[vk.cs.get_any_query_index(column, Rotation::cur())] diff --git a/halo2_proofs/src/plonk/prover.rs b/halo2_proofs/src/plonk/prover.rs index 61392e95e8..6bf98674c6 100644 --- a/halo2_proofs/src/plonk/prover.rs +++ b/halo2_proofs/src/plonk/prover.rs @@ -554,7 +554,7 @@ where let vanishing = vanishing.construct(params, domain, h_poly, &mut rng, transcript)?; let x: ChallengeX<_> = transcript.squeeze_challenge_scalar(); - let xn = x.pow(&[params.n() as u64, 0, 0, 0]); + let xn = x.pow([params.n(), 0, 0, 0]); if P::QUERY_INSTANCE { // Compute and hash instance evals for each circuit instance @@ -677,8 +677,8 @@ where }), ) .chain(permutation.open(pk, x)) - .chain(lookups.iter().flat_map(move |p| p.open(pk, x)).into_iter()) - .chain(shuffles.iter().flat_map(move |p| p.open(pk, x)).into_iter()) + .chain(lookups.iter().flat_map(move |p| p.open(pk, x))) + .chain(shuffles.iter().flat_map(move |p| p.open(pk, x))) }) .chain( pk.vk diff --git a/halo2_proofs/src/plonk/vanishing/prover.rs b/halo2_proofs/src/plonk/vanishing/prover.rs index 6c215a96bc..30360dea5c 100644 --- a/halo2_proofs/src/plonk/vanishing/prover.rs +++ b/halo2_proofs/src/plonk/vanishing/prover.rs @@ -55,7 +55,6 @@ impl Argument { let mut rand_vec = vec![C::Scalar::ZERO; n]; let mut thread_seeds: Vec = (0..num_chunks) - .into_iter() .map(|_| { let mut seed = [0u8; 32]; rng.fill_bytes(&mut seed); diff --git a/halo2_proofs/src/plonk/verifier.rs b/halo2_proofs/src/plonk/verifier.rs index b92c3dbef6..b300890369 100644 --- a/halo2_proofs/src/plonk/verifier.rs +++ b/halo2_proofs/src/plonk/verifier.rs @@ -188,7 +188,7 @@ where }) .collect::, _>>()? } else { - let xn = x.pow(&[params.n() as u64, 0, 0, 0]); + let xn = x.pow([params.n(), 0, 0, 0]); let (min_rotation, max_rotation) = vk.cs .instance_queries @@ -267,7 +267,7 @@ where // commitments open to the correct values. let vanishing = { // x^n - let xn = x.pow(&[params.n() as u64, 0, 0, 0]); + let xn = x.pow([params.n(), 0, 0, 0]); let blinding_factors = vk.cs.blinding_factors(); let l_evals = vk @@ -343,8 +343,7 @@ where instance_evals, challenges, ) - }) - .into_iter(), + }), ) .chain( shuffles @@ -363,8 +362,7 @@ where instance_evals, challenges, ) - }) - .into_iter(), + }), ) }, ); @@ -422,14 +420,12 @@ where .chain( lookups .iter() - .flat_map(move |p| p.queries(vk, x)) - .into_iter(), + .flat_map(move |p| p.queries(vk, x)), ) .chain( shuffles .iter() - .flat_map(move |p| p.queries(vk, x)) - .into_iter(), + .flat_map(move |p| p.queries(vk, x)), ) }, ) diff --git a/halo2_proofs/src/poly/domain.rs b/halo2_proofs/src/poly/domain.rs index b442dbc8b1..5fefe82df2 100644 --- a/halo2_proofs/src/poly/domain.rs +++ b/halo2_proofs/src/poly/domain.rs @@ -88,8 +88,8 @@ impl> EvaluationDomain { { // Compute the evaluations of t(X) = X^n - 1 in the coset evaluation domain. // We don't have to compute all of them, because it will repeat. - let orig = F::ZETA.pow_vartime(&[n as u64, 0, 0, 0]); - let step = extended_omega.pow_vartime(&[n as u64, 0, 0, 0]); + let orig = F::ZETA.pow_vartime([n, 0, 0, 0]); + let step = extended_omega.pow_vartime([n, 0, 0, 0]); let mut cur = orig; loop { t_evaluations.push(cur); @@ -396,11 +396,11 @@ impl> EvaluationDomain { pub fn rotate_omega(&self, value: F, rotation: Rotation) -> F { let mut point = value; if rotation.0 >= 0 { - point *= &self.get_omega().pow_vartime(&[rotation.0 as u64]); + point *= &self.get_omega().pow_vartime([rotation.0 as u64]); } else { point *= &self .get_omega_inv() - .pow_vartime(&[(rotation.0 as i64).unsigned_abs()]); + .pow_vartime([(rotation.0 as i64).unsigned_abs()]); } point } @@ -537,7 +537,7 @@ fn test_l_i() { let mut l = vec![]; let mut points = vec![]; for i in 0..8 { - points.push(domain.omega.pow(&[i, 0, 0, 0])); + points.push(domain.omega.pow([i, 0, 0, 0])); } for i in 0..8 { let mut l_i = vec![Scalar::zero(); 8]; @@ -547,7 +547,7 @@ fn test_l_i() { } let x = Scalar::random(OsRng); - let xn = x.pow(&[8, 0, 0, 0]); + let xn = x.pow([8, 0, 0, 0]); let evaluations = domain.l_i_range(x, xn, -7..=7); for i in 0..8 { diff --git a/halo2_proofs/src/poly/kzg/commitment.rs b/halo2_proofs/src/poly/kzg/commitment.rs index 51f0c660d0..d918a05065 100644 --- a/halo2_proofs/src/poly/kzg/commitment.rs +++ b/halo2_proofs/src/poly/kzg/commitment.rs @@ -75,7 +75,7 @@ where let mut g_projective = vec![E::G1::identity(); n as usize]; parallelize(&mut g_projective, |g, start| { let mut current_g: E::G1 = g1.into(); - current_g *= s.pow_vartime(&[start as u64]); + current_g *= s.pow_vartime([start as u64]); for g in g.iter_mut() { *g = current_g; current_g *= s; @@ -97,11 +97,11 @@ where } let n_inv = Option::::from(E::Scalar::from(n).invert()) .expect("inversion should be ok for n = 1<, { fn squeeze_challenge(&mut self) -> Challenge255 { - self.state.update(&[KECCAK256_PREFIX_CHALLENGE]); + self.state.update([KECCAK256_PREFIX_CHALLENGE]); let mut state_lo = self.state.clone(); let mut state_hi = self.state.clone(); - state_lo.update(&[KECCAK256_PREFIX_CHALLENGE_LO]); - state_hi.update(&[KECCAK256_PREFIX_CHALLENGE_HI]); + state_lo.update([KECCAK256_PREFIX_CHALLENGE_LO]); + state_hi.update([KECCAK256_PREFIX_CHALLENGE_HI]); let result_lo: [u8; 32] = state_lo.finalize().as_slice().try_into().unwrap(); let result_hi: [u8; 32] = state_hi.finalize().as_slice().try_into().unwrap(); @@ -267,7 +267,7 @@ where } fn common_point(&mut self, point: C) -> io::Result<()> { - self.state.update(&[KECCAK256_PREFIX_POINT]); + self.state.update([KECCAK256_PREFIX_POINT]); let coords: Coordinates = Option::from(point.coordinates()).ok_or_else(|| { io::Error::new( io::ErrorKind::Other, @@ -281,7 +281,7 @@ where } fn common_scalar(&mut self, scalar: C::Scalar) -> io::Result<()> { - self.state.update(&[KECCAK256_PREFIX_SCALAR]); + self.state.update([KECCAK256_PREFIX_SCALAR]); self.state.update(scalar.to_repr().as_ref()); Ok(()) @@ -424,12 +424,12 @@ where C::Scalar: FromUniformBytes<64>, { fn squeeze_challenge(&mut self) -> Challenge255 { - self.state.update(&[KECCAK256_PREFIX_CHALLENGE]); + self.state.update([KECCAK256_PREFIX_CHALLENGE]); let mut state_lo = self.state.clone(); let mut state_hi = self.state.clone(); - state_lo.update(&[KECCAK256_PREFIX_CHALLENGE_LO]); - state_hi.update(&[KECCAK256_PREFIX_CHALLENGE_HI]); + state_lo.update([KECCAK256_PREFIX_CHALLENGE_LO]); + state_hi.update([KECCAK256_PREFIX_CHALLENGE_HI]); let result_lo: [u8; 32] = state_lo.finalize().as_slice().try_into().unwrap(); let result_hi: [u8; 32] = state_hi.finalize().as_slice().try_into().unwrap(); @@ -441,7 +441,7 @@ where } fn common_point(&mut self, point: C) -> io::Result<()> { - self.state.update(&[KECCAK256_PREFIX_POINT]); + self.state.update([KECCAK256_PREFIX_POINT]); let coords: Coordinates = Option::from(point.coordinates()).ok_or_else(|| { io::Error::new( io::ErrorKind::Other, @@ -455,7 +455,7 @@ where } fn common_scalar(&mut self, scalar: C::Scalar) -> io::Result<()> { - self.state.update(&[KECCAK256_PREFIX_SCALAR]); + self.state.update([KECCAK256_PREFIX_SCALAR]); self.state.update(scalar.to_repr().as_ref()); Ok(()) From 6d5a4b6367a5927782bfcf4ba483e7d458d41be5 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:04:32 +0100 Subject: [PATCH 07/14] rustfmt post clippy --- halo2_proofs/src/circuit/floor_planner/v1.rs | 4 +- halo2_proofs/src/dev.rs | 5 +- halo2_proofs/src/dev/graph/layout.rs | 2 +- halo2_proofs/src/plonk/verifier.rs | 84 ++++++++------------ 4 files changed, 40 insertions(+), 55 deletions(-) diff --git a/halo2_proofs/src/circuit/floor_planner/v1.rs b/halo2_proofs/src/circuit/floor_planner/v1.rs index ebee81246a..cccb0f2b9a 100644 --- a/halo2_proofs/src/circuit/floor_planner/v1.rs +++ b/halo2_proofs/src/circuit/floor_planner/v1.rs @@ -80,7 +80,9 @@ impl FloorPlanner for V1 { plan.regions = regions; // - Determine how many rows our planned circuit will require. - let first_unassigned_row = column_allocations.values().map(|a| a.unbounded_interval_start()) + let first_unassigned_row = column_allocations + .values() + .map(|a| a.unbounded_interval_start()) .max() .unwrap_or(0); diff --git a/halo2_proofs/src/dev.rs b/halo2_proofs/src/dev.rs index fb1df7a12c..c1ced6ec8e 100644 --- a/halo2_proofs/src/dev.rs +++ b/halo2_proofs/src/dev.rs @@ -797,10 +797,7 @@ impl + Ord> MockProver { .flat_map(|(gate_index, gate)| { let blinding_rows = (self.n as usize - (self.cs.blinding_factors() + 1))..(self.n as usize); - (gate_row_ids - .clone() - .chain(blinding_rows.into_iter())) - .flat_map(move |row| { + (gate_row_ids.clone().chain(blinding_rows.into_iter())).flat_map(move |row| { let row = row as i32 + n; gate.polynomials().iter().enumerate().filter_map( move |(poly_index, poly)| match poly.evaluate_lazy( diff --git a/halo2_proofs/src/dev/graph/layout.rs b/halo2_proofs/src/dev/graph/layout.rs index 4782fd8aaa..8321f0f699 100644 --- a/halo2_proofs/src/dev/graph/layout.rs +++ b/halo2_proofs/src/dev/graph/layout.rs @@ -184,7 +184,7 @@ impl CircuitLayout { root.draw(&Rectangle::new( [(0, 0), (total_columns, view_bottom)], - &BLACK, + BLACK, ))?; let draw_region = |root: &DrawingArea<_, _>, top_left, bottom_right| { diff --git a/halo2_proofs/src/plonk/verifier.rs b/halo2_proofs/src/plonk/verifier.rs index b300890369..1e431be41b 100644 --- a/halo2_proofs/src/plonk/verifier.rs +++ b/halo2_proofs/src/plonk/verifier.rs @@ -325,45 +325,39 @@ where gamma, x, )) - .chain( - lookups - .iter() - .zip(vk.cs.lookups.iter()) - .flat_map(move |(p, argument)| { - p.expressions( - l_0, - l_last, - l_blind, - argument, - theta, - beta, - gamma, - advice_evals, - fixed_evals, - instance_evals, - challenges, - ) - }), - ) - .chain( - shuffles - .iter() - .zip(vk.cs.shuffles.iter()) - .flat_map(move |(p, argument)| { - p.expressions( - l_0, - l_last, - l_blind, - argument, - theta, - gamma, - advice_evals, - fixed_evals, - instance_evals, - challenges, - ) - }), - ) + .chain(lookups.iter().zip(vk.cs.lookups.iter()).flat_map( + move |(p, argument)| { + p.expressions( + l_0, + l_last, + l_blind, + argument, + theta, + beta, + gamma, + advice_evals, + fixed_evals, + instance_evals, + challenges, + ) + }, + )) + .chain(shuffles.iter().zip(vk.cs.shuffles.iter()).flat_map( + move |(p, argument)| { + p.expressions( + l_0, + l_last, + l_blind, + argument, + theta, + gamma, + advice_evals, + fixed_evals, + instance_evals, + challenges, + ) + }, + )) }, ); @@ -417,16 +411,8 @@ where }, )) .chain(permutation.queries(vk, x)) - .chain( - lookups - .iter() - .flat_map(move |p| p.queries(vk, x)), - ) - .chain( - shuffles - .iter() - .flat_map(move |p| p.queries(vk, x)), - ) + .chain(lookups.iter().flat_map(move |p| p.queries(vk, x))) + .chain(shuffles.iter().flat_map(move |p| p.queries(vk, x))) }, ) .chain( From 3e1a10e0900b6518690ded64a0f1a1ad99258c91 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:41:59 +0100 Subject: [PATCH 08/14] plz let it be the last lint --- halo2_proofs/src/dev/graph/layout.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_proofs/src/dev/graph/layout.rs b/halo2_proofs/src/dev/graph/layout.rs index 8321f0f699..b218b123f2 100644 --- a/halo2_proofs/src/dev/graph/layout.rs +++ b/halo2_proofs/src/dev/graph/layout.rs @@ -200,7 +200,7 @@ impl CircuitLayout { [top_left, bottom_right], ShapeStyle::from(&GREEN.mix(0.2)).filled(), ))?; - root.draw(&Rectangle::new([top_left, bottom_right], &BLACK))?; + root.draw(&Rectangle::new([top_left, bottom_right], BLACK))?; Ok(()) }; From cf017288a69e608d7642de5916001f51d78431ff Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:49:01 +0100 Subject: [PATCH 09/14] patch clippy lints in gadgets --- halo2_gadgets/benches/poseidon.rs | 2 +- halo2_gadgets/src/ecc/chip/constants.rs | 12 ++++++------ halo2_gadgets/src/ecc/chip/mul_fixed.rs | 8 ++++---- halo2_gadgets/src/poseidon/pow5.rs | 6 +++--- halo2_gadgets/src/poseidon/primitives/p128pow5t3.rs | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/halo2_gadgets/benches/poseidon.rs b/halo2_gadgets/benches/poseidon.rs index 03e595fe0f..4175318399 100644 --- a/halo2_gadgets/benches/poseidon.rs +++ b/halo2_gadgets/benches/poseidon.rs @@ -135,7 +135,7 @@ impl Spec for MySpec Fp { - val.pow_vartime(&[5]) + val.pow_vartime([5]) } fn secure_mds() -> usize { diff --git a/halo2_gadgets/src/ecc/chip/constants.rs b/halo2_gadgets/src/ecc/chip/constants.rs index 6296165464..82ed952ceb 100644 --- a/halo2_gadgets/src/ecc/chip/constants.rs +++ b/halo2_gadgets/src/ecc/chip/constants.rs @@ -49,7 +49,7 @@ fn compute_window_table(base: C, num_windows: usize) -> Vec<[C; .map(|k| { // scalar = (k+2)*(8^w) let scalar = C::Scalar::from(k as u64 + 2) - * C::Scalar::from(H as u64).pow(&[w as u64, 0, 0, 0]); + * C::Scalar::from(H as u64).pow([w as u64, 0, 0, 0]); (base * scalar).to_affine() }) .collect::>() @@ -62,14 +62,14 @@ fn compute_window_table(base: C, num_windows: usize) -> Vec<[C; // For the last window, we compute [k * (2^3)^w - sum]B, where sum is defined // as sum = \sum_{j = 0}^{`num_windows - 2`} 2^{3j+1} let sum = (0..(num_windows - 1)).fold(C::Scalar::ZERO, |acc, j| { - acc + C::Scalar::from(2).pow(&[FIXED_BASE_WINDOW_SIZE as u64 * j as u64 + 1, 0, 0, 0]) + acc + C::Scalar::from(2).pow([FIXED_BASE_WINDOW_SIZE as u64 * j as u64 + 1, 0, 0, 0]) }); window_table.push( (0..H) .map(|k| { // scalar = k * (2^3)^w - sum, where w = `num_windows - 1` let scalar = C::Scalar::from(k as u64) - * C::Scalar::from(H as u64).pow(&[(num_windows - 1) as u64, 0, 0, 0]) + * C::Scalar::from(H as u64).pow([(num_windows - 1) as u64, 0, 0, 0]) - sum; (base * scalar).to_affine() }) @@ -197,7 +197,7 @@ pub fn test_lagrange_coeffs(base: C, num_windows: usize) { // Compute the actual x-coordinate of the multiple [(k+2)*(8^w)]B. let point = base * C::Scalar::from(bits as u64 + 2) - * C::Scalar::from(H as u64).pow(&[idx as u64, 0, 0, 0]); + * C::Scalar::from(H as u64).pow([idx as u64, 0, 0, 0]); let x = *point.to_affine().coordinates().unwrap().x(); // Check that the interpolated x-coordinate matches the actual one. @@ -214,10 +214,10 @@ pub fn test_lagrange_coeffs(base: C, num_windows: usize) { // Compute the actual x-coordinate of the multiple [k * (8^84) - offset]B, // where offset = \sum_{j = 0}^{83} 2^{3j+1} let offset = (0..(num_windows - 1)).fold(C::Scalar::ZERO, |acc, w| { - acc + C::Scalar::from(2).pow(&[FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1, 0, 0, 0]) + acc + C::Scalar::from(2).pow([FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1, 0, 0, 0]) }); let scalar = C::Scalar::from(bits as u64) - * C::Scalar::from(H as u64).pow(&[(num_windows - 1) as u64, 0, 0, 0]) + * C::Scalar::from(H as u64).pow([(num_windows - 1) as u64, 0, 0, 0]) - offset; let point = base * scalar; let x = *point.to_affine().coordinates().unwrap().x(); diff --git a/halo2_gadgets/src/ecc/chip/mul_fixed.rs b/halo2_gadgets/src/ecc/chip/mul_fixed.rs index 0005a108bb..b22f2b66e7 100644 --- a/halo2_gadgets/src/ecc/chip/mul_fixed.rs +++ b/halo2_gadgets/src/ecc/chip/mul_fixed.rs @@ -372,7 +372,7 @@ impl> Config { base: &F, ) -> Result { // `scalar = [(k_w + 2) ⋅ 8^w] - let scalar = k.map(|k| (k + *TWO_SCALAR) * (*H_SCALAR).pow(&[w as u64, 0, 0, 0])); + let scalar = k.map(|k| (k + *TWO_SCALAR) * (*H_SCALAR).pow([w as u64, 0, 0, 0])); self.process_window::<_, NUM_WINDOWS>(region, offset, w, k_usize, scalar, base) } @@ -389,12 +389,12 @@ impl> Config { // offset_acc = \sum_{j = 0}^{NUM_WINDOWS - 2} 2^{FIXED_BASE_WINDOW_SIZE*j + 1} let offset_acc = (0..(NUM_WINDOWS - 1)).fold(pallas::Scalar::zero(), |acc, w| { - acc + (*TWO_SCALAR).pow(&[FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1, 0, 0, 0]) + acc + (*TWO_SCALAR).pow([FIXED_BASE_WINDOW_SIZE as u64 * w as u64 + 1, 0, 0, 0]) }); // `scalar = [k * 8^(NUM_WINDOWS - 1) - offset_acc]`. let scalar = scalar.windows_field()[scalar.windows_field().len() - 1] - .map(|k| k * (*H_SCALAR).pow(&[(NUM_WINDOWS - 1) as u64, 0, 0, 0]) - offset_acc); + .map(|k| k * (*H_SCALAR).pow([(NUM_WINDOWS - 1) as u64, 0, 0, 0]) - offset_acc); self.process_window::<_, NUM_WINDOWS>( region, @@ -490,7 +490,7 @@ impl ScalarFixed { .by_vals() .take(FIXED_BASE_WINDOW_SIZE) .rev() - .fold(0, |acc, b| 2 * acc + if b { 1 } else { 0 }) + .fold(0, |acc, b| 2 * acc + usize::from(b)) }) }) .collect::>() diff --git a/halo2_gadgets/src/poseidon/pow5.rs b/halo2_gadgets/src/poseidon/pow5.rs index 7abd86329d..e8ea7abf69 100644 --- a/halo2_gadgets/src/poseidon/pow5.rs +++ b/halo2_gadgets/src/poseidon/pow5.rs @@ -444,7 +444,7 @@ impl Pow5State { .value() .map(|v| *v + config.round_constants[round][idx]) }); - let r: Value> = q.map(|q| q.map(|q| q.pow(&config.alpha))).collect(); + let r: Value> = q.map(|q| q.map(|q| q.pow(config.alpha))).collect(); let m = &config.m_reg; let state = m.iter().map(|m_i| { r.as_ref().map(|r| { @@ -470,7 +470,7 @@ impl Pow5State { let p: Value> = self.0.iter().map(|word| word.0.value().cloned()).collect(); let r: Value> = p.map(|p| { - let r_0 = (p[0] + config.round_constants[round][0]).pow(&config.alpha); + let r_0 = (p[0] + config.round_constants[round][0]).pow(config.alpha); let r_i = p[1..] .iter() .enumerate() @@ -510,7 +510,7 @@ impl Pow5State { } let r_mid: Value> = p_mid.map(|p| { - let r_0 = (p[0] + config.round_constants[round + 1][0]).pow(&config.alpha); + let r_0 = (p[0] + config.round_constants[round + 1][0]).pow(config.alpha); let r_i = p[1..] .iter() .enumerate() diff --git a/halo2_gadgets/src/poseidon/primitives/p128pow5t3.rs b/halo2_gadgets/src/poseidon/primitives/p128pow5t3.rs index c8d54d9afd..e31ce04263 100644 --- a/halo2_gadgets/src/poseidon/primitives/p128pow5t3.rs +++ b/halo2_gadgets/src/poseidon/primitives/p128pow5t3.rs @@ -22,7 +22,7 @@ impl Spec for P128Pow5T3 { } fn sbox(val: Fp) -> Fp { - val.pow_vartime(&[5]) + val.pow_vartime([5]) } fn secure_mds() -> usize { @@ -48,7 +48,7 @@ impl Spec for P128Pow5T3 { } fn sbox(val: Fq) -> Fq { - val.pow_vartime(&[5]) + val.pow_vartime([5]) } fn secure_mds() -> usize { From 1fb7e70ed9082332531c67d673cb0ce443b3fb65 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Aug 2023 23:54:33 +0100 Subject: [PATCH 10/14] clippy lints for sha256 bench --- halo2_gadgets/benches/sha256.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/halo2_gadgets/benches/sha256.rs b/halo2_gadgets/benches/sha256.rs index 0e14d61946..4afceacd82 100644 --- a/halo2_gadgets/benches/sha256.rs +++ b/halo2_gadgets/benches/sha256.rs @@ -90,18 +90,18 @@ fn bench(name: &str, k: u32, c: &mut Criterion) { // Initialize the polynomial commitment parameters let params_path = Path::new("./benches/sha256_assets/sha256_params"); - if File::open(¶ms_path).is_err() { + if File::open(params_path).is_err() { let params: ParamsIPA = ParamsIPA::new(k); let mut buf = Vec::new(); params.write(&mut buf).expect("Failed to write params"); - let mut file = File::create(¶ms_path).expect("Failed to create sha256_params"); + let mut file = File::create(params_path).expect("Failed to create sha256_params"); file.write_all(&buf[..]) .expect("Failed to write params to file"); } - let params_fs = File::open(¶ms_path).expect("couldn't load sha256_params"); + let params_fs = File::open(params_path).expect("couldn't load sha256_params"); let params: ParamsIPA = ParamsIPA::read::<_>(&mut BufReader::new(params_fs)).expect("Failed to read params"); @@ -128,7 +128,7 @@ fn bench(name: &str, k: u32, c: &mut Criterion) { // Create a proof let proof_path = Path::new("./benches/sha256_assets/sha256_proof"); - if File::open(&proof_path).is_err() { + if File::open(proof_path).is_err() { let mut transcript = Blake2bWrite::<_, _, Challenge255<_>>::init(vec![]); create_proof::, ProverIPA<_>, _, _, _, _>( ¶ms, @@ -140,11 +140,11 @@ fn bench(name: &str, k: u32, c: &mut Criterion) { ) .expect("proof generation should not fail"); let proof: Vec = transcript.finalize(); - let mut file = File::create(&proof_path).expect("Failed to create sha256_proof"); + let mut file = File::create(proof_path).expect("Failed to create sha256_proof"); file.write_all(&proof[..]).expect("Failed to write proof"); } - let mut proof_fs = File::open(&proof_path).expect("couldn't load sha256_proof"); + let mut proof_fs = File::open(proof_path).expect("couldn't load sha256_proof"); let mut proof = Vec::::new(); proof_fs .read_to_end(&mut proof) From 7f90230d949c2157a46a0e09ec078b410377aa15 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Thu, 24 Aug 2023 01:25:49 +0100 Subject: [PATCH 11/14] patch halo2proof benches --- halo2_proofs/benches/commit_zk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_proofs/benches/commit_zk.rs b/halo2_proofs/benches/commit_zk.rs index 6cd57d176f..3496dbd4be 100644 --- a/halo2_proofs/benches/commit_zk.rs +++ b/halo2_proofs/benches/commit_zk.rs @@ -23,7 +23,7 @@ fn rand_poly_par(mut rng: ChaCha20Rng, domain: usize) -> Vec { // Sample a random polynomial of degree n - 1 let n_threads = current_num_threads(); let n = 1usize << domain; - let n_chunks = n_threads + if n % n_threads != 0 { 1 } else { 0 }; + let n_chunks = n_threads + usize::from(n % n_threads != 0); let mut rand_vec = vec![Scalar::zero(); n]; let mut thread_seeds: Vec = (0..n_chunks) From f608afcc303cec89cc3e570610c4ad0fe969fc48 Mon Sep 17 00:00:00 2001 From: Alexander Camuto <45801863+alexander-camuto@users.noreply.github.com> Date: Thu, 24 Aug 2023 01:34:45 +0100 Subject: [PATCH 12/14] Update assigned.rs --- halo2_proofs/src/plonk/assigned.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_proofs/src/plonk/assigned.rs b/halo2_proofs/src/plonk/assigned.rs index 46d527b915..919ddcdfb5 100644 --- a/halo2_proofs/src/plonk/assigned.rs +++ b/halo2_proofs/src/plonk/assigned.rs @@ -613,7 +613,7 @@ mod proptests { // Ensure that: // - we have at least one value to apply unary operators to. // - we can apply every binary operator pairwise sequentially. - cmp::max(if num_unary > 0 { 1 } else { 0 }, num_binary + 1)), + cmp::max(usize::from(num_unary > 0), num_binary + 1)), operations in arb_operators(num_unary, num_binary).prop_shuffle(), ) -> (Vec>, Vec) { (values, operations) From af860b236688bb837f92521caff37b39fb963a90 Mon Sep 17 00:00:00 2001 From: dante <45801863+alexander-camuto@users.noreply.github.com> Date: Fri, 25 Aug 2023 15:16:20 +0100 Subject: [PATCH 13/14] Update halo2_gadgets/src/poseidon/primitives/mds.rs Co-authored-by: Han --- halo2_gadgets/src/poseidon/primitives/mds.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/halo2_gadgets/src/poseidon/primitives/mds.rs b/halo2_gadgets/src/poseidon/primitives/mds.rs index 227a684f74..f04df0fb58 100644 --- a/halo2_gadgets/src/poseidon/primitives/mds.rs +++ b/halo2_gadgets/src/poseidon/primitives/mds.rs @@ -83,7 +83,7 @@ pub(super) fn generate_mds + Ord, const T: usize>( } else { let diff: F = x_j - *x_m; // We can invert freely; by construction, the elements of xs are distinct. - acc * (x - x_m) * diff.invert().unwrap() + acc * (x - x_m) * (x_j - x_m).invert().unwrap() } }) }; From 15d8076432fc66cbe4505dc4275bb13364497678 Mon Sep 17 00:00:00 2001 From: dante <45801863+alexander-camuto@users.noreply.github.com> Date: Fri, 25 Aug 2023 15:16:28 +0100 Subject: [PATCH 14/14] Update halo2_gadgets/src/poseidon/primitives/mds.rs Co-authored-by: Han --- halo2_gadgets/src/poseidon/primitives/mds.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/halo2_gadgets/src/poseidon/primitives/mds.rs b/halo2_gadgets/src/poseidon/primitives/mds.rs index f04df0fb58..892ee11f6b 100644 --- a/halo2_gadgets/src/poseidon/primitives/mds.rs +++ b/halo2_gadgets/src/poseidon/primitives/mds.rs @@ -81,7 +81,6 @@ pub(super) fn generate_mds + Ord, const T: usize>( if m == j { acc } else { - let diff: F = x_j - *x_m; // We can invert freely; by construction, the elements of xs are distinct. acc * (x - x_m) * (x_j - x_m).invert().unwrap() }