diff --git a/src/zk/gadget/zero_cond.rs b/src/zk/gadget/zero_cond.rs index ad9c5c457..5d1efaf9d 100644 --- a/src/zk/gadget/zero_cond.rs +++ b/src/zk/gadget/zero_cond.rs @@ -17,7 +17,7 @@ */ use halo2_proofs::{ - circuit::{AssignedCell, Layouter, Value}, + circuit::{AssignedCell, Layouter}, pasta::group::ff::WithSmallOrderMulGroup, plonk::{Advice, Column, ConstraintSystem, Error, Expression, Selector}, poly::Rotation, @@ -100,11 +100,13 @@ impl + Ord> ZeroCondChip { let b = b.copy_advice(|| "copy b", &mut region, self.config.b, 0)?; is_zero_chip.assign(&mut region, 0, a.value().copied())?; - let output = if a.value().copied().to_field() == Value::known(F::ZERO.into()) { - a.value().copied() - } else { - b.value().copied() - }; + let output = a.value().copied().to_field().zip(b.value().copied()).map(|(a, b)| { + if a == F::ZERO.into() { + F::ZERO + } else { + b + } + }); let cell = region.assign_advice(|| "output", self.config.output, 0, || output)?; Ok(cell) @@ -120,7 +122,7 @@ mod tests { use super::*; use crate::zk::assign_free_advice; use halo2_proofs::{ - circuit::floor_planner::V1, + circuit::{SimpleFloorPlanner, Value}, dev::MockProver, pasta::Fp, plonk::{Circuit, Instance}, @@ -134,7 +136,7 @@ mod tests { impl Circuit for MyCircuit { type Config = (ZeroCondConfig, [Column; 5], Column); - type FloorPlanner = V1; + type FloorPlanner = SimpleFloorPlanner; type Params = (); fn without_witnesses(&self) -> Self { @@ -178,21 +180,19 @@ mod tests { } #[test] - fn zero_cond() -> crate::Result<()> { + fn zero_cond() { let a = Fp::from(0); let b = Fp::from(69); let p_circuit = MyCircuit { a: Value::known(a), b: Value::known(b) }; let public_inputs = vec![a]; - let prover = MockProver::run(3, &p_circuit, vec![public_inputs])?; + let prover = MockProver::run(3, &p_circuit, vec![public_inputs]).unwrap(); prover.assert_satisfied(); let a = Fp::from(12); let b = Fp::from(42); let p_circuit = MyCircuit { a: Value::known(a), b: Value::known(b) }; let public_inputs = vec![b]; - let prover = MockProver::run(3, &p_circuit, vec![public_inputs])?; + let prover = MockProver::run(3, &p_circuit, vec![public_inputs]).unwrap(); prover.assert_satisfied(); - - Ok(()) } }