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

[crypsinous] move circuit creation to leadcoin

mohab metwally 4 лет назад
Родитель
Сommit
a9abb7c7db
3 измененных файлов с 35 добавлено и 27 удалено
  1. 2 22
      example/lead.rs
  2. 32 5
      src/crypto/leadcoin.rs
  3. 1 0
      src/stakeholder/stakeholder.rs

+ 2 - 22
example/lead.rs

@@ -1,4 +1,4 @@
-use halo2_proofs::{arithmetic::Field, dev::MockProver, circuit::Value};
+use halo2_proofs::{arithmetic::Field, dev::MockProver};
 use incrementalmerkletree::{bridgetree::BridgeTree, Tree};
 use pasta_curves::{
     arithmetic::CurveAffine,
@@ -54,27 +54,7 @@ fn main() {
     let coins: Vec<LeadCoin> = epoch.create_coins();
     let coin_idx = 0;
     let coin = coins[coin_idx];
-
-    let contract = LeadContract {
-        path: Value::known(coin.path.unwrap()),
-        coin_pk_x: Value::known(coin.pk_x.unwrap()),
-        coin_pk_y: Value::known(coin.pk_y.unwrap()),
-        root_sk: Value::known(coin.root_sk.unwrap()),
-        sf_root_sk: Value::known(mod_r_p(coin.root_sk.unwrap())),
-        path_sk: Value::known(coin.path_sk.unwrap()),
-        coin_timestamp: Value::known(coin.tau.unwrap()), //
-        coin_nonce: Value::known(coin.nonce.unwrap()),
-        coin1_blind: Value::known(coin.c1_blind.unwrap()),
-        value: Value::known(coin.value.unwrap()),
-        coin2_blind: Value::known(coin.c2_blind.unwrap()),
-        cm_pos: Value::known(coin.idx),
-        //sn_c1: Value::known(coin.sn.unwrap()),
-        slot: Value::known(coin.sl.unwrap()),
-        mau_rho: Value::known(mod_r_p(coin.rho_mu.unwrap())),
-        mau_y: Value::known(mod_r_p(coin.y_mu.unwrap())),
-        root_cm: Value::known(coin.root_cm.unwrap()),
-    };
-
+    let contract = coin.create_contract();
     //let proof = create_lead_proof(lead_pk.clone(), coin.clone()).unwrap();
     //verify_lead_proof(&lead_vk, &proof, coin);
 

+ 32 - 5
src/crypto/leadcoin.rs

@@ -1,9 +1,12 @@
 use pasta_curves::pallas;
-
-use crate::crypto::{
-    constants::MERKLE_DEPTH_ORCHARD,
-    merkle_node::MerkleNode,
-    util::{mod_r_p, pedersen_commitment_scalar},
+use halo2_proofs::{circuit::Value};
+use crate::{
+    zk::circuit::lead_contract::LeadContract,
+    crypto::{
+        constants::MERKLE_DEPTH_ORCHARD,
+        merkle_node::MerkleNode,
+        util::{mod_r_p, pedersen_commitment_scalar},
+    }
 };
 
 use incrementalmerkletree::Hashable;
@@ -89,4 +92,28 @@ impl LeadCoin {
         ];
         public_inputs
     }
+
+    pub fn create_contract(&self) -> LeadContract
+    {
+        let contract = LeadContract {
+            path: Value::known(self.path.unwrap()),
+            coin_pk_x: Value::known(self.pk_x.unwrap()),
+            coin_pk_y: Value::known(self.pk_y.unwrap()),
+            root_sk: Value::known(self.root_sk.unwrap()),
+            sf_root_sk: Value::known(mod_r_p(self.root_sk.unwrap())),
+            path_sk: Value::known(self.path_sk.unwrap()),
+            coin_timestamp: Value::known(self.tau.unwrap()), //
+            coin_nonce: Value::known(self.nonce.unwrap()),
+            coin1_blind: Value::known(self.c1_blind.unwrap()),
+            value: Value::known(self.value.unwrap()),
+            coin2_blind: Value::known(self.c2_blind.unwrap()),
+            cm_pos: Value::known(self.idx),
+            //sn_c1: Value::known(self.sn.unwrap()),
+            slot: Value::known(self.sl.unwrap()),
+            mau_rho: Value::known(mod_r_p(self.rho_mu.unwrap())),
+            mau_y: Value::known(mod_r_p(self.y_mu.unwrap())),
+            root_cm: Value::known(self.root_cm.unwrap()),
+        };
+        contract
+    }
 }

+ 1 - 0
src/stakeholder/stakeholder.rs

@@ -8,6 +8,7 @@ use crate::{
 use pasta_curves::{
     pallas,
 };
+
 use group::ff::PrimeField;
 
 pub struct Stakeholder