From fd2dec238c748e76f19f1210e93aa4ef8193cfb5 Mon Sep 17 00:00:00 2001 From: x Date: Sat, 7 Jan 2023 13:45:06 +0100 Subject: [PATCH] move halo2 specific types out from zk:: to their own submodule zk::halo2:: --- src/contract/dao/src/dao_client/mint.rs | 18 +++--- src/contract/dao/src/dao_client/propose.rs | 66 +++++++++++----------- src/contract/dao/src/dao_client/vote.rs | 66 +++++++++++----------- src/zk/mod.rs | 27 ++++----- 4 files changed, 91 insertions(+), 86 deletions(-) diff --git a/src/contract/dao/src/dao_client/mint.rs b/src/contract/dao/src/dao_client/mint.rs index 0f33e6405..aa5e01679 100644 --- a/src/contract/dao/src/dao_client/mint.rs +++ b/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]; diff --git a/src/contract/dao/src/dao_client/propose.rs b/src/contract/dao/src/dao_client/propose.rs index 7b7233fe0..9ca22461b 100644 --- a/src/contract/dao/src/dao_client/propose.rs +++ b/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, diff --git a/src/contract/dao/src/dao_client/vote.rs b/src/contract/dao/src/dao_client/vote.rs index 66598b548..f128ffb53 100644 --- a/src/contract/dao/src/dao_client/vote.rs +++ b/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![ diff --git a/src/zk/mod.rs b/src/zk/mod.rs index 1040c696a..9235b06f8 100644 --- a/src/zk/mod.rs +++ b/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( -pub fn assign_free_advice( - mut layouter: impl Layouter, - column: Column, - value: Value, -) -> Result, plonk::Error> +pub fn assign_free_advice( + mut layouter: impl halo2::Layouter, + column: halo2::Column, + value: halo2::Value, +) -> Result, halo2::plonk::Error> where - for<'v> Assigned: From<&'v V>, + for<'v> halo2::Assigned: From<&'v V>, { layouter.assign_region( || "load private",