Преглед изворни кода

[crypsinous:example/lead] fix sn PRF

mohab metwally пре 4 година
родитељ
комит
8a143e1ba9
5 измењених фајлова са 19 додато и 19 уклоњено
  1. 2 3
      example/lead.rs
  2. 3 3
      src/blockchain/epoch.rs
  3. 7 7
      src/crypto/leadcoin.rs
  4. 2 1
      src/crypto/util.rs
  5. 5 5
      src/zk/circuit/lead_contract.rs

+ 2 - 3
example/lead.rs

@@ -25,7 +25,6 @@ use darkfi::{
         leadcoin::LeadCoin,
         lead_proof,
         merkle_node::MerkleNode,
-        util::{mod_r_p, pedersen_commitment_scalar},
     },
     tx::Transaction,
     consensus::{TransactionLeadProof, Metadata, StreamletMetadata, BlockInfo},
@@ -81,8 +80,9 @@ fn main() {
 
     //TODO (fix) proof panics
     let lead_tx = TransactionLeadProof::new(lead_pk, coin.clone());
-    /*
+
     //lead_tx.verify(lead_vk, coin);
+
     let (st_id, st_hash)  = stakeholder.blockchain.last().unwrap();
     let empty_txs : Vec<Transaction> = vec!();
     let metadata = Metadata::new(Timestamp::current_time(), epoch.eta.to_repr(), lead_tx);
@@ -95,5 +95,4 @@ fn main() {
     let public_inputs = coin.public_inputs();
     let prover = MockProver::run(k, &contract, vec![public_inputs]).unwrap();
     assert_eq!(prover.verify(), Ok(()));
-    */
 }

+ 3 - 3
src/blockchain/epoch.rs

@@ -19,7 +19,7 @@ use crate::{
         lead_proof,
         proof::{Proof, ProvingKey, VerifyingKey},
         merkle_node::MerkleNode,
-        util::{mod_r_p, pedersen_commitment_scalar, pedersen_commitment_base, pedersen_commitment_u64},
+        util::{mod_r_p, pedersen_commitment_base, pedersen_commitment_u64},
         types::DrkValueBlind,
     },
 };
@@ -194,11 +194,11 @@ impl Epoch {
                 c_seed,
                 c_root_sk.inner(),
             ];
-            let c_sn : pallas::Base = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<2>, 3, 2>::init().hash(coin_pk_msg);
+            let c_sn : pallas::Base = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<2>, 3, 2>::init().hash(sn_msg);
 
 
             let coin_commit_msg = c_pk*c_v*c_seed;
-            let c_cm: pallas::Point = pedersen_commitment_scalar(mod_r_p(coin_commit_msg), c_cm1_blind);
+            let c_cm: pallas::Point = pedersen_commitment_base(coin_commit_msg, c_cm1_blind);
             let c_cm_coordinates = c_cm.to_affine().coordinates().unwrap();
             let c_cm_base: pallas::Base = c_cm_coordinates.x() * c_cm_coordinates.y();
             let c_cm_node = MerkleNode(c_cm_base);

+ 7 - 7
src/crypto/leadcoin.rs

@@ -5,7 +5,7 @@ use crate::{
     crypto::{
         constants::MERKLE_DEPTH_ORCHARD,
         merkle_node::MerkleNode,
-        util::{mod_r_p, pedersen_commitment_scalar},
+        util::{mod_r_p, pedersen_commitment_base},
     }
 };
 
@@ -42,7 +42,7 @@ pub struct LeadCoin {
 impl LeadCoin {
     pub fn public_inputs(&self) -> Vec<pallas::Base> {
         let po_nonce = self.nonce_cm.unwrap();
-        let _po_tau = pedersen_commitment_scalar(mod_r_p(self.tau.unwrap()), self.root_cm.unwrap())
+        let _po_tau = pedersen_commitment_base(self.tau.unwrap(), self.root_cm.unwrap())
             .to_affine()
             .coordinates()
             .unwrap();
@@ -77,11 +77,11 @@ impl LeadCoin {
             po_nonce,
             po_pk,
             po_sn,
-            *po_cm.x(),
-            *po_cm.y(),
-            *po_cm2.x(),
-            *po_cm2.y(),
-            cm_root.0,
+            //*po_cm.x(),
+            //*po_cm.y(),
+            //*po_cm2.x(),
+            //*po_cm2.y(),
+            //cm_root.0,
             //po_cmp,
         ];
         public_inputs

+ 2 - 1
src/crypto/util.rs

@@ -45,6 +45,7 @@ pub fn pedersen_commitment_u64(value: u64, blind: DrkValueBlind) -> DrkValueComm
     V * mod_r_p(DrkValue::from(value)) + R * blind
 }
 
+/*
 #[allow(non_snake_case)]
 pub fn pedersen_commitment_base(value: pallas::Base, blind: DrkValueBlind) -> DrkValueCommit {
     let hasher = DrkValueCommit::hash_to_curve(VALUE_COMMITMENT_PERSONALIZATION);
@@ -53,7 +54,7 @@ pub fn pedersen_commitment_base(value: pallas::Base, blind: DrkValueBlind) -> Dr
 
     V * mod_r_p(value) + R * blind
 }
-
+*/
 /// Converts from pallas::Base to pallas::Scalar (aka $x \pmod{r_\mathbb{P}}$).
 ///
 /// This requires no modular reduction because Pallas' base field is smaller than its

+ 5 - 5
src/zk/circuit/lead_contract.rs

@@ -90,9 +90,9 @@ impl LeadConfig {
 }
 
 const LEAD_COIN_NONCE2_OFFSET: usize = 0;
-const LEAD_COIN_PK_OFFSET: usize = 2;
-const LEAD_COIN_SERIAL_NUMBER_OFFSET: usize = 4;
-const LEAD_COIN_COMMIT_X_OFFSET: usize = 6;
+const LEAD_COIN_PK_OFFSET: usize = 1;
+const LEAD_COIN_SERIAL_NUMBER_OFFSET: usize = 2;
+const LEAD_COIN_COMMIT_X_OFFSET: usize = 3;
 const LEAD_COIN_COMMIT_Y_OFFSET: usize = 7;
 const LEAD_COIN_COMMIT2_X_OFFSET: usize = 8;
 const LEAD_COIN_COMMIT2_Y_OFFSET: usize = 9;
@@ -388,7 +388,7 @@ impl Circuit<pallas::Base> for LeadContract {
             config.primary,
             LEAD_COIN_SERIAL_NUMBER_OFFSET,
         )?;
-
+        /*
         // ================================================
         // coin commiment H=COMMIT(pk||V||nonce||r)
         // ================================================
@@ -591,7 +591,7 @@ impl Circuit<pallas::Base> for LeadContract {
             Value::known(pallas::Base::one()), // note! this parameter to be tuned.
         )?;
 
-        /*
+
         let ord = ar_chip.mul(layouter.namespace(|| ""), &scalar, &c)?;
         let target = ar_chip.mul(layouter.namespace(|| "calculate target"), &ord, &coin_value.clone())?;
         eb_chip.decompose(layouter.namespace(|| "target range check"), target.clone())?;