Răsfoiți Sursa

zk/gadget/zero_cond: Use available upstream API for conditional selection.

parazyd 3 ani în urmă
părinte
comite
95cd7f20d7
1 a modificat fișierele cu 13 adăugiri și 13 ștergeri
  1. 13 13
      src/zk/gadget/zero_cond.rs

+ 13 - 13
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<F: WithSmallOrderMulGroup<3> + Ord> ZeroCondChip<F> {
                 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<Fp> for MyCircuit {
         type Config = (ZeroCondConfig<Fp>, [Column<Advice>; 5], Column<Instance>);
-        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(())
     }
 }