diff --git a/src/gadgets/arithmetic.rs b/src/gadgets/arithmetic.rs index 4d9ece34..124bcccb 100644 --- a/src/gadgets/arithmetic.rs +++ b/src/gadgets/arithmetic.rs @@ -112,11 +112,12 @@ impl, const D: usize> CircuitBuilder { base: Target, exponent_bits: impl Iterator>, ) -> Target { + let zero = self.zero(); let gate = ExponentiationGate::new(self.config.clone()); let num_power_bits = gate.num_power_bits; let mut exp_bits_vec: Vec = exponent_bits.map(|b| *b.borrow()).collect(); while exp_bits_vec.len() < num_power_bits { - exp_bits_vec.push(self.constant(F::ZERO)); + exp_bits_vec.push(zero); } let gate_index = self.add_gate(gate.clone(), vec![]); diff --git a/src/gates/exponentiation.rs b/src/gates/exponentiation.rs index a1a7d5cd..697803c2 100644 --- a/src/gates/exponentiation.rs +++ b/src/gates/exponentiation.rs @@ -29,8 +29,9 @@ impl, const D: usize> ExponentiationGate { } fn max_power_bits(num_wires: usize, num_routed_wires: usize) -> usize { - let max_for_routed_wires = num_routed_wires - 3; - let max_for_wires = (num_wires - 3) / 2; + // 2 wires are reserved for the base and output. + let max_for_routed_wires = num_routed_wires - 2; + let max_for_wires = (num_wires - 2) / 2; max_for_routed_wires.min(max_for_wires) } @@ -147,7 +148,7 @@ impl, const D: usize> Gate for ExponentiationGate { let mut constraints = Vec::new(); - let one = builder.constant_extension(F::Extension::ONE); + let one = builder.one_extension(); for i in 0..self.num_power_bits { let prev_intermediate_value = if i == 0 { one