From d62a7cebec71eeeaaf9234b14fa1ce3ad2dff17d Mon Sep 17 00:00:00 2001 From: Danny Willems Date: Mon, 4 Mar 2024 16:21:41 +0100 Subject: [PATCH 1/2] MSM: rename LIMBS_NUM in N_LIMBS Fix https://github.com/o1-labs/proof-systems/issues/1889 --- msm/src/columns.rs | 6 +++--- msm/src/constraint.rs | 26 +++++++++++++------------- msm/src/lib.rs | 4 ++-- msm/src/serialization/constraints.rs | 6 +++--- msm/src/serialization/main.rs | 8 ++++---- msm/src/serialization/witness.rs | 20 ++++++++++---------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/msm/src/columns.rs b/msm/src/columns.rs index 25f12863d4..ba83a736b7 100644 --- a/msm/src/columns.rs +++ b/msm/src/columns.rs @@ -1,4 +1,4 @@ -use crate::LIMBS_NUM; +use crate::N_LIMBS; // @volhovm: maybe this needs to be a trait /// Describe a generic indexed variable X_{i}. @@ -24,8 +24,8 @@ pub enum MSMColumnIndexer { impl ColumnIndexer for MSMColumnIndexer { fn ix_to_column(self) -> Column { let to_column_inner = |offset, i| { - assert!(i < LIMBS_NUM); - Column::X(LIMBS_NUM * offset + i) + assert!(i < N_LIMBS); + Column::X(N_LIMBS * offset + i) }; match self { MSMColumnIndexer::A(i) => to_column_inner(0, i), diff --git a/msm/src/constraint.rs b/msm/src/constraint.rs index 635b6732b9..74e75ad097 100644 --- a/msm/src/constraint.rs +++ b/msm/src/constraint.rs @@ -11,7 +11,7 @@ use o1_utils::foreign_field::ForeignElement; use crate::columns::{Column, ColumnIndexer, MSMColumnIndexer}; use crate::proof::ProofInputs; use crate::witness::Witness; -use crate::{BN254G1Affine, Ff1, Fp, LIMBS_NUM, MSM_FFADD_N_COLUMNS}; +use crate::{BN254G1Affine, Ff1, Fp, MSM_FFADD_N_COLUMNS, N_LIMBS}; /// Used to represent constraints as multi variate polynomials. The variables /// are over the columns. @@ -50,16 +50,16 @@ use crate::{BN254G1Affine, Ff1, Fp, LIMBS_NUM, MSM_FFADD_N_COLUMNS}; pub type MSMExpr = Expr, Column>; // TODO use more foreign_field.rs with from/to bigint conversion -fn limb_decompose(input: &Ff1) -> [Fp; LIMBS_NUM] { +fn limb_decompose(input: &Ff1) -> [Fp; N_LIMBS] { let input_bi: BigUint = FieldHelpers::to_biguint(input); - let ff_el: ForeignElement = ForeignElement::from_biguint(input_bi); + let ff_el: ForeignElement = ForeignElement::from_biguint(input_bi); ff_el.limbs } pub struct WitnessColumnsIndexer { - pub(crate) a: [T; LIMBS_NUM], - pub(crate) b: [T; LIMBS_NUM], - pub(crate) c: [T; LIMBS_NUM], + pub(crate) a: [T; N_LIMBS], + pub(crate) b: [T; N_LIMBS], + pub(crate) c: [T; N_LIMBS], } #[allow(dead_code)] @@ -93,10 +93,10 @@ impl BuilderEnv { b: wc_b, c: wc_c, } = wc; - for i in 0..LIMBS_NUM { + for i in 0..N_LIMBS { cols[i].push(wc_a[i]); - cols[LIMBS_NUM + i].push(wc_b[i]); - cols[2 * LIMBS_NUM + i].push(wc_c[i]); + cols[N_LIMBS + i].push(wc_b[i]); + cols[2 * N_LIMBS + i].push(wc_c[i]); } } @@ -108,7 +108,7 @@ impl BuilderEnv { pub fn add_test_addition(&mut self, a: Ff1, b: Ff1) { let mut limb_constraints: Vec<_> = vec![]; - for i in 0..LIMBS_NUM { + for i in 0..N_LIMBS { let limb_constraint = { let a_i = MSMExpr::Atom( ExprInner::>, Column>::Cell(Variable { @@ -132,14 +132,14 @@ impl BuilderEnv { Expr::combine_constraints(0..(limb_constraints.len() as u32), limb_constraints); self.constraints.push(combined_constraint); - let a_limbs: [Fp; LIMBS_NUM] = limb_decompose(&a); - let b_limbs: [Fp; LIMBS_NUM] = limb_decompose(&b); + let a_limbs: [Fp; N_LIMBS] = limb_decompose(&a); + let b_limbs: [Fp; N_LIMBS] = limb_decompose(&b); let c_limbs_vec: Vec = a_limbs .iter() .zip(b_limbs.iter()) .map(|(ai, bi)| *ai + *bi) .collect(); - let c_limbs: [Fp; LIMBS_NUM] = c_limbs_vec + let c_limbs: [Fp; N_LIMBS] = c_limbs_vec .try_into() .unwrap_or_else(|_| panic!("Length mismatch")); diff --git a/msm/src/lib.rs b/msm/src/lib.rs index 35ff75f86f..fc010a91b1 100644 --- a/msm/src/lib.rs +++ b/msm/src/lib.rs @@ -23,7 +23,7 @@ pub const LIMB_BITSIZE: usize = 15; /// Number of limbs representing one foreign field element (either /// [`Ff1`] or [`Ff2`]). -pub const LIMBS_NUM: usize = 17; +pub const N_LIMBS: usize = 17; pub type BN254 = ark_ec::bn::Bn; pub type BN254G1Affine = ::G1Affine; @@ -32,7 +32,7 @@ pub type BN254G2Affine = ::G2Affine; /// Number of columns /// FIXME: we must move it into the subdirectory of the /// foreign field addition circuit -pub const MSM_FFADD_N_COLUMNS: usize = 3 * LIMBS_NUM; +pub const MSM_FFADD_N_COLUMNS: usize = 3 * N_LIMBS; /// The native field we are working with. pub type Fp = ark_bn254::Fr; diff --git a/msm/src/serialization/constraints.rs b/msm/src/serialization/constraints.rs index 7ebe6c7907..7a886d2e5d 100644 --- a/msm/src/serialization/constraints.rs +++ b/msm/src/serialization/constraints.rs @@ -4,7 +4,7 @@ use kimchi::circuits::{ gate::CurrOrNext, }; -use crate::{columns::Column, serialization::N_INTERMEDIATE_LIMBS, LIMBS_NUM}; +use crate::{columns::Column, serialization::N_INTERMEDIATE_LIMBS, N_LIMBS}; use super::interpreter::InterpreterEnv; @@ -37,11 +37,11 @@ impl InterpreterEnv for Env { fn get_column_for_intermediate_limb(j: usize) -> Self::Position { assert!(j < N_INTERMEDIATE_LIMBS); - Column::X(3 + LIMBS_NUM + j) + Column::X(3 + N_LIMBS + j) } fn get_column_for_msm_limb(j: usize) -> Self::Position { - assert!(j < LIMBS_NUM); + assert!(j < N_LIMBS); Column::X(3 + j) } diff --git a/msm/src/serialization/main.rs b/msm/src/serialization/main.rs index 6615f8ef59..f17c0a36e4 100644 --- a/msm/src/serialization/main.rs +++ b/msm/src/serialization/main.rs @@ -9,9 +9,9 @@ use kimchi_msm::proof::ProofInputs; use kimchi_msm::prover::prove; use kimchi_msm::serialization::interpreter::deserialize_field_element; use kimchi_msm::verifier::verify; -use kimchi_msm::{BaseSponge, Fp, OpeningProof, ScalarSponge, BN254, DOMAIN_SIZE, LIMBS_NUM}; +use kimchi_msm::{BaseSponge, Fp, OpeningProof, ScalarSponge, BN254, DOMAIN_SIZE, N_LIMBS}; -const SERIALIZATION_N_COLUMNS: usize = 3 + N_INTERMEDIATE_LIMBS + LIMBS_NUM; +const SERIALIZATION_N_COLUMNS: usize = 3 + N_INTERMEDIATE_LIMBS + N_LIMBS; pub fn main() { // FIXME: use a proper RNG @@ -34,11 +34,11 @@ pub fn main() { for i in 0..3 { witness.cols[i].push(env.current_kimchi_limbs[i]); } - for i in 0..LIMBS_NUM { + for i in 0..N_LIMBS { witness.cols[3 + i].push(env.msm_limbs[i]); } for i in 0..N_INTERMEDIATE_LIMBS { - witness.cols[3 + LIMBS_NUM + i].push(env.intermediate_limbs[i]); + witness.cols[3 + N_LIMBS + i].push(env.intermediate_limbs[i]); } } diff --git a/msm/src/serialization/witness.rs b/msm/src/serialization/witness.rs index 5e1c64f707..a3651291a8 100644 --- a/msm/src/serialization/witness.rs +++ b/msm/src/serialization/witness.rs @@ -3,7 +3,7 @@ use o1_utils::FieldHelpers; use crate::columns::Column; use crate::serialization::interpreter::InterpreterEnv; -use crate::LIMBS_NUM; +use crate::N_LIMBS; use super::N_INTERMEDIATE_LIMBS; @@ -11,7 +11,7 @@ use super::N_INTERMEDIATE_LIMBS; pub struct Env { pub current_kimchi_limbs: [Fp; 3], /// The LIMB_NUM limbs that is used to encode a field element for the MSM - pub msm_limbs: [Fp; LIMBS_NUM], + pub msm_limbs: [Fp; N_LIMBS], /// Used for the decomposition in base 4 of the last limb of the foreign /// field Kimchi gate pub intermediate_limbs: [Fp; N_INTERMEDIATE_LIMBS], @@ -39,7 +39,7 @@ impl InterpreterEnv for Env { fn get_column_for_intermediate_limb(j: usize) -> Self::Position { assert!(j < N_INTERMEDIATE_LIMBS); - Column::X(3 + LIMBS_NUM + j) + Column::X(3 + N_LIMBS + j) } fn copy(&mut self, x: &Self::Variable, position: Self::Position) -> Self::Variable { @@ -48,7 +48,7 @@ impl InterpreterEnv for Env { } fn get_column_for_msm_limb(j: usize) -> Self::Position { - assert!(j < LIMBS_NUM); + assert!(j < N_LIMBS); Column::X(3 + j) } @@ -79,10 +79,10 @@ impl Env { Column::X(i) => { if i < 3 { self.current_kimchi_limbs[i] = value - } else if i < 3 + LIMBS_NUM { + } else if i < 3 + N_LIMBS { self.msm_limbs[i - 3] = value; - } else if i < 3 + LIMBS_NUM + N_INTERMEDIATE_LIMBS { - self.intermediate_limbs[i - 3 - LIMBS_NUM] = value; + } else if i < 3 + N_LIMBS + N_INTERMEDIATE_LIMBS { + self.intermediate_limbs[i - 3 - N_LIMBS] = value; } else { panic!("Invalid column index") } @@ -95,7 +95,7 @@ impl Env { pub fn create() -> Self { Self { current_kimchi_limbs: [Fp::zero(); 3], - msm_limbs: [Fp::zero(); LIMBS_NUM], + msm_limbs: [Fp::zero(); N_LIMBS], intermediate_limbs: [Fp::zero(); N_INTERMEDIATE_LIMBS], } } @@ -106,7 +106,7 @@ mod tests { use std::str::FromStr; use crate::serialization::N_INTERMEDIATE_LIMBS; - use crate::{LIMBS_NUM, LIMB_BITSIZE}; + use crate::{LIMB_BITSIZE, N_LIMBS}; use super::Env; use crate::serialization::interpreter::deserialize_field_element; @@ -179,7 +179,7 @@ mod tests { } // Checking msm limbs - for i in 0..LIMBS_NUM { + for i in 0..N_LIMBS { let le_bits: &[bool] = &bits .clone() .into_iter() From d2499d66c4cb2e36f996e1ac88714ee3967d0960 Mon Sep 17 00:00:00 2001 From: Danny Willems Date: Tue, 5 Mar 2024 17:08:11 +0100 Subject: [PATCH 2/2] MSM: run cargo fmt --- msm/src/constraint.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msm/src/constraint.rs b/msm/src/constraint.rs index f5187f2ad4..2a8d024a3c 100644 --- a/msm/src/constraint.rs +++ b/msm/src/constraint.rs @@ -7,7 +7,7 @@ use crate::{ lookups::LookupTableIDs, proof::ProofInputs, witness::Witness, - {BN254G1Affine, Ff1, Fp, N_LIMBS, MSM_FFADD_N_COLUMNS}, + {BN254G1Affine, Ff1, Fp, MSM_FFADD_N_COLUMNS, N_LIMBS}, }; use kimchi::{ circuits::{