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

This commit is contained in:
x
2023-01-07 13:45:06 +01:00
parent 9cd9c3113e
commit fd2dec238c
4 changed files with 91 additions and 86 deletions

View File

@@ -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];

View File

@@ -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,

View File

@@ -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![

View File

@@ -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",