ソースを参照

zk/vm: Add constrain_constant calls to literal witnessing and constant one.

parazyd 3 年 前
コミット
e684748f2a
1 ファイル変更12 行追加1 行削除
  1. 12 1
      src/zk/vm.rs

+ 12 - 1
src/zk/vm.rs

@@ -41,6 +41,7 @@ use halo2_gadgets::{
     utilities::lookup_range_check::LookupRangeCheckConfig,
     utilities::lookup_range_check::LookupRangeCheckConfig,
 };
 };
 use halo2_proofs::{
 use halo2_proofs::{
+    arithmetic::Field,
     circuit::{floor_planner, AssignedCell, Layouter, Value},
     circuit::{floor_planner, AssignedCell, Layouter, Value},
     pasta::{group::Curve, pallas, Fp},
     pasta::{group::Curve, pallas, Fp},
     plonk,
     plonk,
@@ -358,7 +359,11 @@ impl Circuit<pallas::Base> for ZkCircuit {
         let one = assign_free_advice(
         let one = assign_free_advice(
             layouter.namespace(|| "Load constant one"),
             layouter.namespace(|| "Load constant one"),
             config.advices[0],
             config.advices[0],
-            Value::known(pallas::Base::one()),
+            Value::known(pallas::Base::ONE),
+        )?;
+        layouter.assign_region(
+            || "constrain constant",
+            |mut region| region.constrain_constant(one.cell(), pallas::Base::ONE),
         )?;
         )?;
 
 
         // ANCHOR: constant_init
         // ANCHOR: constant_init
@@ -742,6 +747,12 @@ impl Circuit<pallas::Base> for ZkCircuit {
                         config.advices[0],
                         config.advices[0],
                         Value::known(pallas::Base::from(lit)),
                         Value::known(pallas::Base::from(lit)),
                     )?;
                     )?;
+                    layouter.assign_region(
+                        || "constrain constant",
+                        |mut region| {
+                            region.constrain_constant(witness.cell(), pallas::Base::from(lit))
+                        },
+                    )?;
 
 
                     trace!(target: "zk::vm", "Pushing assignment to heap address {}", heap.len());
                     trace!(target: "zk::vm", "Pushing assignment to heap address {}", heap.len());
                     heap.push(HeapVar::Base(witness));
                     heap.push(HeapVar::Base(witness));