|
@@ -16,7 +16,9 @@
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
-use darkfi_sdk::crypto::{MerkleNode, Nullifier};
|
|
|
|
|
|
|
+use darkfi_sdk::crypto::{
|
|
|
|
|
+ pedersen::pedersen_commitment_u64, Keypair, MerkleNode, Nullifier, PublicKey, SecretKey,
|
|
|
|
|
+};
|
|
|
use darkfi_serial::{SerialDecodable, SerialEncodable};
|
|
use darkfi_serial::{SerialDecodable, SerialEncodable};
|
|
|
use halo2_proofs::circuit::Value;
|
|
use halo2_proofs::circuit::Value;
|
|
|
use incrementalmerkletree::Hashable;
|
|
use incrementalmerkletree::Hashable;
|
|
@@ -29,11 +31,7 @@ use pasta_curves::{
|
|
|
use rand::rngs::OsRng;
|
|
use rand::rngs::OsRng;
|
|
|
|
|
|
|
|
use darkfi::{
|
|
use darkfi::{
|
|
|
- crypto::{
|
|
|
|
|
- keypair::{Keypair, PublicKey, SecretKey},
|
|
|
|
|
- util::{pedersen_commitment_u64, poseidon_hash},
|
|
|
|
|
- Proof,
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ crypto::{util::poseidon_hash, Proof},
|
|
|
zk::vm::{Witness, ZkCircuit},
|
|
zk::vm::{Witness, ZkCircuit},
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -115,7 +113,7 @@ impl Builder {
|
|
|
let leaf_pos: u64 = input.leaf_position.into();
|
|
let leaf_pos: u64 = input.leaf_position.into();
|
|
|
|
|
|
|
|
let prover_witnesses = vec![
|
|
let prover_witnesses = vec![
|
|
|
- Witness::Base(Value::known(input.secret.0)),
|
|
|
|
|
|
|
+ Witness::Base(Value::known(input.secret.inner())),
|
|
|
Witness::Base(Value::known(note.serial)),
|
|
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(0))),
|
|
Witness::Base(Value::known(pallas::Base::from(0))),
|
|
@@ -126,15 +124,15 @@ impl Builder {
|
|
|
Witness::Base(Value::known(gov_token_blind)),
|
|
Witness::Base(Value::known(gov_token_blind)),
|
|
|
Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
|
|
Witness::Uint32(Value::known(leaf_pos.try_into().unwrap())),
|
|
|
Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
|
|
Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),
|
|
|
- Witness::Base(Value::known(input.signature_secret.0)),
|
|
|
|
|
|
|
+ Witness::Base(Value::known(input.signature_secret.inner())),
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
let public_key = PublicKey::from_secret(input.secret);
|
|
let public_key = PublicKey::from_secret(input.secret);
|
|
|
- let coords = public_key.0.to_affine().coordinates().unwrap();
|
|
|
|
|
|
|
+ let (pub_x, pub_y) = public_key.xy();
|
|
|
|
|
|
|
|
let coin = poseidon_hash::<8>([
|
|
let coin = poseidon_hash::<8>([
|
|
|
- *coords.x(),
|
|
|
|
|
- *coords.y(),
|
|
|
|
|
|
|
+ pub_x,
|
|
|
|
|
+ pub_y,
|
|
|
pallas::Base::from(note.value),
|
|
pallas::Base::from(note.value),
|
|
|
note.token_id,
|
|
note.token_id,
|
|
|
note.serial,
|
|
note.serial,
|
|
@@ -160,12 +158,12 @@ impl Builder {
|
|
|
let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
|
|
let token_commit = poseidon_hash::<2>([note.token_id, gov_token_blind]);
|
|
|
assert_eq!(self.dao.gov_token_id, note.token_id);
|
|
assert_eq!(self.dao.gov_token_id, note.token_id);
|
|
|
|
|
|
|
|
- let nullifier = poseidon_hash::<2>([input.secret.0, note.serial]);
|
|
|
|
|
|
|
+ let nullifier = poseidon_hash::<2>([input.secret.inner(), note.serial]);
|
|
|
|
|
|
|
|
let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
|
|
let vote_commit = pedersen_commitment_u64(note.value, vote_value_blind);
|
|
|
let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
|
|
let vote_commit_coords = vote_commit.to_affine().coordinates().unwrap();
|
|
|
|
|
|
|
|
- let sigpub_coords = signature_public.0.to_affine().coordinates().unwrap();
|
|
|
|
|
|
|
+ let (sig_x, sig_y) = signature_public.xy();
|
|
|
|
|
|
|
|
let public_inputs = vec![
|
|
let public_inputs = vec![
|
|
|
nullifier,
|
|
nullifier,
|
|
@@ -173,8 +171,8 @@ impl Builder {
|
|
|
*vote_commit_coords.y(),
|
|
*vote_commit_coords.y(),
|
|
|
token_commit,
|
|
token_commit,
|
|
|
merkle_root.inner(),
|
|
merkle_root.inner(),
|
|
|
- *sigpub_coords.x(),
|
|
|
|
|
- *sigpub_coords.y(),
|
|
|
|
|
|
|
+ sig_x,
|
|
|
|
|
+ sig_y,
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
|
|
let circuit = ZkCircuit::new(prover_witnesses, zk_bin);
|
|
@@ -195,7 +193,7 @@ impl Builder {
|
|
|
|
|
|
|
|
let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
|
|
let token_commit = poseidon_hash::<2>([self.dao.gov_token_id, gov_token_blind]);
|
|
|
|
|
|
|
|
- let proposal_dest_coords = self.proposal.dest.0.to_affine().coordinates().unwrap();
|
|
|
|
|
|
|
+ let (proposal_dest_x, proposal_dest_y) = self.proposal.dest.xy();
|
|
|
|
|
|
|
|
let proposal_amount = pallas::Base::from(self.proposal.amount);
|
|
let proposal_amount = pallas::Base::from(self.proposal.amount);
|
|
|
|
|
|
|
@@ -204,7 +202,7 @@ impl Builder {
|
|
|
let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
|
|
let dao_approval_ratio_quot = pallas::Base::from(self.dao.approval_ratio_quot);
|
|
|
let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
|
|
let dao_approval_ratio_base = pallas::Base::from(self.dao.approval_ratio_base);
|
|
|
|
|
|
|
|
- let dao_pubkey_coords = self.dao.public_key.0.to_affine().coordinates().unwrap();
|
|
|
|
|
|
|
+ let (dao_pub_x, dao_pub_y) = self.dao.public_key.xy();
|
|
|
|
|
|
|
|
let dao_bulla = poseidon_hash::<8>([
|
|
let dao_bulla = poseidon_hash::<8>([
|
|
|
dao_proposer_limit,
|
|
dao_proposer_limit,
|
|
@@ -212,14 +210,14 @@ impl Builder {
|
|
|
dao_approval_ratio_quot,
|
|
dao_approval_ratio_quot,
|
|
|
dao_approval_ratio_base,
|
|
dao_approval_ratio_base,
|
|
|
self.dao.gov_token_id,
|
|
self.dao.gov_token_id,
|
|
|
- *dao_pubkey_coords.x(),
|
|
|
|
|
- *dao_pubkey_coords.y(),
|
|
|
|
|
|
|
+ dao_pub_x,
|
|
|
|
|
+ dao_pub_y,
|
|
|
self.dao.bulla_blind,
|
|
self.dao.bulla_blind,
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
let proposal_bulla = poseidon_hash::<8>([
|
|
let proposal_bulla = poseidon_hash::<8>([
|
|
|
- *proposal_dest_coords.x(),
|
|
|
|
|
- *proposal_dest_coords.y(),
|
|
|
|
|
|
|
+ proposal_dest_x,
|
|
|
|
|
+ proposal_dest_y,
|
|
|
proposal_amount,
|
|
proposal_amount,
|
|
|
self.proposal.serial,
|
|
self.proposal.serial,
|
|
|
self.proposal.token_id,
|
|
self.proposal.token_id,
|
|
@@ -249,8 +247,8 @@ impl Builder {
|
|
|
|
|
|
|
|
let prover_witnesses = vec![
|
|
let prover_witnesses = vec![
|
|
|
// proposal params
|
|
// proposal params
|
|
|
- Witness::Base(Value::known(*proposal_dest_coords.x())),
|
|
|
|
|
- Witness::Base(Value::known(*proposal_dest_coords.y())),
|
|
|
|
|
|
|
+ Witness::Base(Value::known(proposal_dest_x)),
|
|
|
|
|
+ Witness::Base(Value::known(proposal_dest_y)),
|
|
|
Witness::Base(Value::known(proposal_amount)),
|
|
Witness::Base(Value::known(proposal_amount)),
|
|
|
Witness::Base(Value::known(self.proposal.serial)),
|
|
Witness::Base(Value::known(self.proposal.serial)),
|
|
|
Witness::Base(Value::known(self.proposal.token_id)),
|
|
Witness::Base(Value::known(self.proposal.token_id)),
|
|
@@ -261,8 +259,8 @@ impl Builder {
|
|
|
Witness::Base(Value::known(dao_approval_ratio_quot)),
|
|
Witness::Base(Value::known(dao_approval_ratio_quot)),
|
|
|
Witness::Base(Value::known(dao_approval_ratio_base)),
|
|
Witness::Base(Value::known(dao_approval_ratio_base)),
|
|
|
Witness::Base(Value::known(self.dao.gov_token_id)),
|
|
Witness::Base(Value::known(self.dao.gov_token_id)),
|
|
|
- Witness::Base(Value::known(*dao_pubkey_coords.x())),
|
|
|
|
|
- Witness::Base(Value::known(*dao_pubkey_coords.y())),
|
|
|
|
|
|
|
+ Witness::Base(Value::known(dao_pub_x)),
|
|
|
|
|
+ Witness::Base(Value::known(dao_pub_y)),
|
|
|
Witness::Base(Value::known(self.dao.bulla_blind)),
|
|
Witness::Base(Value::known(self.dao.bulla_blind)),
|
|
|
// Vote
|
|
// Vote
|
|
|
Witness::Base(Value::known(pallas::Base::from(vote_option))),
|
|
Witness::Base(Value::known(pallas::Base::from(vote_option))),
|