From 31259d089ccdd9748c6232a623b30eda1f5d8418 Mon Sep 17 00:00:00 2001 From: therealyingtong Date: Thu, 27 Jan 2022 08:11:52 +0800 Subject: [PATCH] ecc::chip::mul_fixed: Reintroduce build_constants() closure for constants. --- src/circuit/gadget/ecc/chip/mul_fixed.rs | 26 ++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/circuit/gadget/ecc/chip/mul_fixed.rs b/src/circuit/gadget/ecc/chip/mul_fixed.rs index ba6f431c..f4365b79 100644 --- a/src/circuit/gadget/ecc/chip/mul_fixed.rs +++ b/src/circuit/gadget/ecc/chip/mul_fixed.rs @@ -216,11 +216,16 @@ impl> Config { base: &F, coords_check_toggle: Selector, ) -> Result<(), Error> { - let lagrange_coeffs = base.lagrange_coeffs(); - assert_eq!(lagrange_coeffs.len(), NUM_WINDOWS); + let mut constants = None; + let build_constants = || { + let lagrange_coeffs = base.lagrange_coeffs(); + assert_eq!(lagrange_coeffs.len(), NUM_WINDOWS); - let z = base.z(); - assert_eq!(z.len(), NUM_WINDOWS); + let z = base.z(); + assert_eq!(z.len(), NUM_WINDOWS); + + (lagrange_coeffs, z) + }; // Assign fixed columns for given fixed base for window in 0..NUM_WINDOWS { @@ -237,7 +242,13 @@ impl> Config { }, self.lagrange_coeffs[k], window + offset, - || Ok(lagrange_coeffs[window][k]), + || { + if constants.as_ref().is_none() { + constants = Some(build_constants()); + } + let lagrange_coeffs = &constants.as_ref().unwrap().0; + Ok(lagrange_coeffs[window][k]) + }, )?; } @@ -246,7 +257,10 @@ impl> Config { || format!("z-value for window: {:?}", window), self.fixed_z, window + offset, - || Ok(pallas::Base::from_u64(z[window])), + || { + let z = &constants.as_ref().unwrap().1; + Ok(pallas::Base::from_u64(z[window])) + }, )?; }