Просмотр исходного кода

move halo2 specific types out from zk:: to their own submodule zk::halo2::

x 3 лет назад
Родитель
Сommit
fd2dec238c

+ 9 - 9
src/contract/dao/src/dao_client/mint.rs

@@ -17,7 +17,7 @@
  */
 
 use darkfi::{
-    zk::{Proof, ProvingKey, Value, Witness, ZkCircuit},
+    zk::{halo2, Proof, ProvingKey, Witness, ZkCircuit},
     zkas::ZkBinary,
     Result,
 };
@@ -65,14 +65,14 @@ pub fn make_mint_call(
 
     // NOTE: It's important to keep these in the same order as the zkas code.
     let prover_witnesses = vec![
-        Witness::Base(Value::known(dao_proposer_limit)),
-        Witness::Base(Value::known(dao_quorum)),
-        Witness::Base(Value::known(dao_approval_ratio_quot)),
-        Witness::Base(Value::known(dao_approval_ratio_base)),
-        Witness::Base(Value::known(dao.gov_token_id.inner())),
-        Witness::Base(Value::known(pub_x)),
-        Witness::Base(Value::known(pub_y)),
-        Witness::Base(Value::known(dao.bulla_blind)),
+        Witness::Base(halo2::Value::known(dao_proposer_limit)),
+        Witness::Base(halo2::Value::known(dao_quorum)),
+        Witness::Base(halo2::Value::known(dao_approval_ratio_quot)),
+        Witness::Base(halo2::Value::known(dao_approval_ratio_base)),
+        Witness::Base(halo2::Value::known(dao.gov_token_id.inner())),
+        Witness::Base(halo2::Value::known(pub_x)),
+        Witness::Base(halo2::Value::known(pub_y)),
+        Witness::Base(halo2::Value::known(dao.bulla_blind)),
     ];
 
     let public = vec![dao_bulla];

+ 34 - 32
src/contract/dao/src/dao_client/propose.rs

@@ -24,7 +24,7 @@ use darkfi_serial::{SerialDecodable, SerialEncodable};
 use rand::rngs::OsRng;
 
 use darkfi::{
-    zk::{Proof, ProvingKey, Value, Witness, ZkCircuit},
+    zk::{halo2, Proof, ProvingKey, Witness, ZkCircuit},
     zkas::ZkBinary,
     Result,
 };
@@ -96,18 +96,20 @@ impl ProposeCall {
             let leaf_pos: u64 = input.leaf_position.into();
 
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.inner())),
-                Witness::Base(Value::known(note.serial)),
-                Witness::Base(Value::known(pallas::Base::from(0))),
-                Witness::Base(Value::known(pallas::Base::from(0))),
-                Witness::Base(Value::known(pallas::Base::from(note.value))),
-                Witness::Base(Value::known(note.token_id.inner())),
-                Witness::Base(Value::known(note.coin_blind)),
-                Witness::Scalar(Value::known(funds_blind)),
-                Witness::Base(Value::known(gov_token_blind)),
-                Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
-                Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.inner())),
+                Witness::Base(halo2::Value::known(input.secret.inner())),
+                Witness::Base(halo2::Value::known(note.serial)),
+                Witness::Base(halo2::Value::known(pallas::Base::from(0))),
+                Witness::Base(halo2::Value::known(pallas::Base::from(0))),
+                Witness::Base(halo2::Value::known(pallas::Base::from(note.value))),
+                Witness::Base(halo2::Value::known(note.token_id.inner())),
+                Witness::Base(halo2::Value::known(note.coin_blind)),
+                Witness::Scalar(halo2::Value::known(funds_blind)),
+                Witness::Base(halo2::Value::known(gov_token_blind)),
+                Witness::Uint32(halo2::Value::known(leaf_pos.try_into().unwrap())),
+                Witness::MerklePath(halo2::Value::known(
+                    input.merkle_path.clone().try_into().unwrap(),
+                )),
+                Witness::Base(halo2::Value::known(input.signature_secret.inner())),
             ];
 
             let public_key = PublicKey::from_secret(input.secret);
@@ -209,28 +211,28 @@ impl ProposeCall {
 
         let prover_witnesses = vec![
             // Proposers total number of gov tokens
-            Witness::Base(Value::known(total_funds)),
-            Witness::Scalar(Value::known(total_funds_blinds)),
+            Witness::Base(halo2::Value::known(total_funds)),
+            Witness::Scalar(halo2::Value::known(total_funds_blinds)),
             // Used for blinding exported gov token ID
-            Witness::Base(Value::known(gov_token_blind)),
+            Witness::Base(halo2::Value::known(gov_token_blind)),
             // proposal params
-            Witness::Base(Value::known(proposal_dest_x)),
-            Witness::Base(Value::known(proposal_dest_y)),
-            Witness::Base(Value::known(proposal_amount)),
-            Witness::Base(Value::known(self.proposal.serial)),
-            Witness::Base(Value::known(self.proposal.token_id.inner())),
-            Witness::Base(Value::known(self.proposal.blind)),
+            Witness::Base(halo2::Value::known(proposal_dest_x)),
+            Witness::Base(halo2::Value::known(proposal_dest_y)),
+            Witness::Base(halo2::Value::known(proposal_amount)),
+            Witness::Base(halo2::Value::known(self.proposal.serial)),
+            Witness::Base(halo2::Value::known(self.proposal.token_id.inner())),
+            Witness::Base(halo2::Value::known(self.proposal.blind)),
             // DAO params
-            Witness::Base(Value::known(dao_proposer_limit)),
-            Witness::Base(Value::known(dao_quorum)),
-            Witness::Base(Value::known(dao_approval_ratio_quot)),
-            Witness::Base(Value::known(dao_approval_ratio_base)),
-            Witness::Base(Value::known(self.dao.gov_token_id.inner())),
-            Witness::Base(Value::known(dao_pub_x)),
-            Witness::Base(Value::known(dao_pub_y)),
-            Witness::Base(Value::known(self.dao.bulla_blind)),
-            Witness::Uint32(Value::known(dao_leaf_position.try_into().unwrap())),
-            Witness::MerklePath(Value::known(self.dao_merkle_path.try_into().unwrap())),
+            Witness::Base(halo2::Value::known(dao_proposer_limit)),
+            Witness::Base(halo2::Value::known(dao_quorum)),
+            Witness::Base(halo2::Value::known(dao_approval_ratio_quot)),
+            Witness::Base(halo2::Value::known(dao_approval_ratio_base)),
+            Witness::Base(halo2::Value::known(self.dao.gov_token_id.inner())),
+            Witness::Base(halo2::Value::known(dao_pub_x)),
+            Witness::Base(halo2::Value::known(dao_pub_y)),
+            Witness::Base(halo2::Value::known(self.dao.bulla_blind)),
+            Witness::Uint32(halo2::Value::known(dao_leaf_position.try_into().unwrap())),
+            Witness::MerklePath(halo2::Value::known(self.dao_merkle_path.try_into().unwrap())),
         ];
         let public_inputs = vec![
             token_commit,

+ 34 - 32
src/contract/dao/src/dao_client/vote.rs

@@ -25,7 +25,7 @@ use log::debug;
 use rand::rngs::OsRng;
 
 use darkfi::{
-    zk::{Proof, ProvingKey, Value, Witness, ZkCircuit},
+    zk::{halo2, Proof, ProvingKey, Witness, ZkCircuit},
     zkas::ZkBinary,
     Result,
 };
@@ -98,18 +98,20 @@ impl Builder {
             let leaf_pos: u64 = input.leaf_position.into();
 
             let prover_witnesses = vec![
-                Witness::Base(Value::known(input.secret.inner())),
-                Witness::Base(Value::known(note.serial)),
-                Witness::Base(Value::known(pallas::Base::from(0))),
-                Witness::Base(Value::known(pallas::Base::from(0))),
-                Witness::Base(Value::known(pallas::Base::from(note.value))),
-                Witness::Base(Value::known(note.token_id.inner())),
-                Witness::Base(Value::known(note.coin_blind)),
-                Witness::Scalar(Value::known(vote_value_blind)),
-                Witness::Base(Value::known(gov_token_blind)),
-                Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
-                Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
-                Witness::Base(Value::known(input.signature_secret.inner())),
+                Witness::Base(halo2::Value::known(input.secret.inner())),
+                Witness::Base(halo2::Value::known(note.serial)),
+                Witness::Base(halo2::Value::known(pallas::Base::from(0))),
+                Witness::Base(halo2::Value::known(pallas::Base::from(0))),
+                Witness::Base(halo2::Value::known(pallas::Base::from(note.value))),
+                Witness::Base(halo2::Value::known(note.token_id.inner())),
+                Witness::Base(halo2::Value::known(note.coin_blind)),
+                Witness::Scalar(halo2::Value::known(vote_value_blind)),
+                Witness::Base(halo2::Value::known(gov_token_blind)),
+                Witness::Uint32(halo2::Value::known(leaf_pos.try_into().unwrap())),
+                Witness::MerklePath(halo2::Value::known(
+                    input.merkle_path.clone().try_into().unwrap(),
+                )),
+                Witness::Base(halo2::Value::known(input.signature_secret.inner())),
             ];
 
             let public_key = PublicKey::from_secret(input.secret);
@@ -223,29 +225,29 @@ impl Builder {
 
         let prover_witnesses = vec![
             // proposal params
-            Witness::Base(Value::known(proposal_dest_x)),
-            Witness::Base(Value::known(proposal_dest_y)),
-            Witness::Base(Value::known(proposal_amount)),
-            Witness::Base(Value::known(self.proposal.serial)),
-            Witness::Base(Value::known(self.proposal.token_id.inner())),
-            Witness::Base(Value::known(self.proposal.blind)),
+            Witness::Base(halo2::Value::known(proposal_dest_x)),
+            Witness::Base(halo2::Value::known(proposal_dest_y)),
+            Witness::Base(halo2::Value::known(proposal_amount)),
+            Witness::Base(halo2::Value::known(self.proposal.serial)),
+            Witness::Base(halo2::Value::known(self.proposal.token_id.inner())),
+            Witness::Base(halo2::Value::known(self.proposal.blind)),
             // DAO params
-            Witness::Base(Value::known(dao_proposer_limit)),
-            Witness::Base(Value::known(dao_quorum)),
-            Witness::Base(Value::known(dao_approval_ratio_quot)),
-            Witness::Base(Value::known(dao_approval_ratio_base)),
-            Witness::Base(Value::known(self.dao.gov_token_id.inner())),
-            Witness::Base(Value::known(dao_pub_x)),
-            Witness::Base(Value::known(dao_pub_y)),
-            Witness::Base(Value::known(self.dao.bulla_blind)),
+            Witness::Base(halo2::Value::known(dao_proposer_limit)),
+            Witness::Base(halo2::Value::known(dao_quorum)),
+            Witness::Base(halo2::Value::known(dao_approval_ratio_quot)),
+            Witness::Base(halo2::Value::known(dao_approval_ratio_base)),
+            Witness::Base(halo2::Value::known(self.dao.gov_token_id.inner())),
+            Witness::Base(halo2::Value::known(dao_pub_x)),
+            Witness::Base(halo2::Value::known(dao_pub_y)),
+            Witness::Base(halo2::Value::known(self.dao.bulla_blind)),
             // Vote
-            Witness::Base(Value::known(pallas::Base::from(vote_option))),
-            Witness::Scalar(Value::known(self.vote.vote_option_blind)),
+            Witness::Base(halo2::Value::known(pallas::Base::from(vote_option))),
+            Witness::Scalar(halo2::Value::known(self.vote.vote_option_blind)),
             // Total number of gov tokens allocated
-            Witness::Base(Value::known(pallas::Base::from(vote_value))),
-            Witness::Scalar(Value::known(vote_value_blind)),
+            Witness::Base(halo2::Value::known(pallas::Base::from(vote_value))),
+            Witness::Scalar(halo2::Value::known(vote_value_blind)),
             // gov token
-            Witness::Base(Value::known(gov_token_blind)),
+            Witness::Base(halo2::Value::known(gov_token_blind)),
         ];
 
         let public_inputs = vec![

+ 14 - 13
src/zk/mod.rs

@@ -30,22 +30,23 @@ pub mod gadget;
 pub mod proof;
 pub use proof::{Proof, ProvingKey};
 
-// I thought about putting this in a sub-module called halo2
-pub use halo2_proofs::{
-    arithmetic::Field,
-    circuit::{AssignedCell, Layouter, Value},
-    plonk,
-    plonk::{Advice, Assigned, Column},
-};
+pub mod halo2 {
+    pub use halo2_proofs::{
+        arithmetic::Field,
+        circuit::{AssignedCell, Layouter, Value},
+        plonk,
+        plonk::{Advice, Assigned, Column},
+    };
+}
 
 //pub(in crate::zk) fn assign_free_advice<F: Field, V: Copy>(
-pub fn assign_free_advice<F: Field, V: Copy>(
-    mut layouter: impl Layouter<F>,
-    column: Column<Advice>,
-    value: Value<V>,
-) -> Result<AssignedCell<V, F>, plonk::Error>
+pub fn assign_free_advice<F: halo2::Field, V: Copy>(
+    mut layouter: impl halo2::Layouter<F>,
+    column: halo2::Column<halo2::Advice>,
+    value: halo2::Value<V>,
+) -> Result<halo2::AssignedCell<V, F>, halo2::plonk::Error>
 where
-    for<'v> Assigned<F>: From<&'v V>,
+    for<'v> halo2::Assigned<F>: From<&'v V>,
 {
     layouter.assign_region(
         || "load private",