Răsfoiți Sursa

fix lead witness bug

mohab metwally 3 ani în urmă
părinte
comite
b6e9aa4a83
3 a modificat fișierele cu 4 adăugiri și 5 ștergeri
  1. 0 1
      src/consensus/constants.rs
  2. 2 2
      src/consensus/lead_coin.rs
  3. 2 2
      src/consensus/state.rs

+ 0 - 1
src/consensus/constants.rs

@@ -50,7 +50,6 @@ lazy_static! {
     pub static ref TESTNET_INITIAL_DISTRIBUTION: u64 = 1000;
     pub static ref TESTNET_INITIAL_DISTRIBUTION: u64 = 1000;
 
 
     // Commonly used Float10
     // Commonly used Float10
-
     pub static ref FLOAT10_NEG_TWO: Float10 = Float10::try_from("-2").unwrap();
     pub static ref FLOAT10_NEG_TWO: Float10 = Float10::try_from("-2").unwrap();
     pub static ref FLOAT10_NEG_ONE: Float10 = Float10::try_from("-1").unwrap();
     pub static ref FLOAT10_NEG_ONE: Float10 = Float10::try_from("-1").unwrap();
     pub static ref FLOAT10_ZERO: Float10 = Float10::try_from("0").unwrap();
     pub static ref FLOAT10_ZERO: Float10 = Float10::try_from("0").unwrap();

+ 2 - 2
src/consensus/lead_coin.rs

@@ -213,7 +213,6 @@ impl LeadCoin {
         // rho
         // rho
         let rho_msg = [seed, rho_mu];
         let rho_msg = [seed, rho_mu];
         let rho = poseidon_hash(rho_msg);
         let rho = poseidon_hash(rho_msg);
-        let headstart = Self::headstart();
         let public_inputs = vec![
         let public_inputs = vec![
             pk,
             pk,
             *c1_cm_coord.x(),
             *c1_cm_coord.x(),
@@ -229,7 +228,6 @@ impl LeadCoin {
             rho,
             rho,
             sigma1,
             sigma1,
             sigma2,
             sigma2,
-            headstart,
         ];
         ];
         public_inputs
         public_inputs
     }
     }
@@ -388,6 +386,7 @@ impl LeadCoin {
         let (y_mu, rho_mu) = Self::election_seeds(eta, slot);
         let (y_mu, rho_mu) = Self::election_seeds(eta, slot);
         let bincode = include_bytes!("../../proof/lead.zk.bin");
         let bincode = include_bytes!("../../proof/lead.zk.bin");
         let zkbin = ZkBinary::decode(bincode).unwrap();
         let zkbin = ZkBinary::decode(bincode).unwrap();
+        let headstart = Self::headstart();
         let witnesses = vec![
         let witnesses = vec![
             Witness::MerklePath(Value::known(self.coin1_commitment_merkle_path)),
             Witness::MerklePath(Value::known(self.coin1_commitment_merkle_path)),
             Witness::Uint32(Value::known(self.coin1_commitment_pos)),
             Witness::Uint32(Value::known(self.coin1_commitment_pos)),
@@ -404,6 +403,7 @@ impl LeadCoin {
             Witness::Base(Value::known(y_mu)),
             Witness::Base(Value::known(y_mu)),
             Witness::Base(Value::known(sigma1)),
             Witness::Base(Value::known(sigma1)),
             Witness::Base(Value::known(sigma2)),
             Witness::Base(Value::known(sigma2)),
+            Witness::Base(Value::known(headstart)),
         ];
         ];
         let circuit = ZkCircuit::new(witnesses, zkbin);
         let circuit = ZkCircuit::new(witnesses, zkbin);
         let public_inputs = self.public_inputs(sigma1, sigma2, eta, slot, derived_blind);
         let public_inputs = self.public_inputs(sigma1, sigma2, eta, slot, derived_blind);

+ 2 - 2
src/consensus/state.rs

@@ -269,11 +269,11 @@ impl ConsensusState {
         let c = x.ln();
         let c = x.ln();
         let neg_c = neg_one * c;
         let neg_c = neg_one * c;
 
 
-        let sigma1_fbig = neg_c.clone() / total_sigma.clone() * field_p.clone();
+        let sigma1_fbig = neg_c.clone() / (total_sigma.clone()+constants::FLOAT10_EPSILON.clone()) * field_p.clone();
         info!(target: "consensus::state", "sigma1_fbig: {:}", sigma1_fbig);
         info!(target: "consensus::state", "sigma1_fbig: {:}", sigma1_fbig);
         let sigma1 = fbig2base(sigma1_fbig);
         let sigma1 = fbig2base(sigma1_fbig);
 
 
-        let sigma2_fbig = (neg_c / total_sigma).powf(two.clone()) * (field_p / two);
+        let sigma2_fbig = (neg_c / (total_sigma+constants::FLOAT10_EPSILON.clone())).powf(two.clone()) * (field_p / two);
         info!(target: "consensus::state", "sigma2_fbig: {:}", sigma2_fbig);
         info!(target: "consensus::state", "sigma2_fbig: {:}", sigma2_fbig);
         let sigma2 = fbig2base(sigma2_fbig);
         let sigma2 = fbig2base(sigma2_fbig);