|
@@ -30,9 +30,9 @@ use halo2_proofs::{arithmetic::Field, circuit::Value};
|
|
|
use log::info;
|
|
use log::info;
|
|
|
use rand::rngs::OsRng;
|
|
use rand::rngs::OsRng;
|
|
|
|
|
|
|
|
-use super::constants::EPOCH_LENGTH;
|
|
|
|
|
|
|
+use super::constants::{EPOCH_LENGTH};
|
|
|
use crate::{
|
|
use crate::{
|
|
|
- consensus::{constants, TransferStx, TxRcpt},
|
|
|
|
|
|
|
+ consensus::{constants, TransferStx, TxRcpt, Float10, utils::fbig2base},
|
|
|
zk::{
|
|
zk::{
|
|
|
proof::{Proof, ProvingKey},
|
|
proof::{Proof, ProvingKey},
|
|
|
vm::ZkCircuit,
|
|
vm::ZkCircuit,
|
|
@@ -213,6 +213,7 @@ 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(),
|
|
@@ -228,6 +229,7 @@ impl LeadCoin {
|
|
|
rho,
|
|
rho,
|
|
|
sigma1,
|
|
sigma1,
|
|
|
sigma2,
|
|
sigma2,
|
|
|
|
|
+ headstart,
|
|
|
];
|
|
];
|
|
|
public_inputs
|
|
public_inputs
|
|
|
}
|
|
}
|
|
@@ -282,6 +284,12 @@ impl LeadCoin {
|
|
|
}
|
|
}
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
+ pub fn headstart() -> pallas::Base {
|
|
|
|
|
+ let headstart = constants::MIN_F.clone() * Float10::try_from(constants::P.clone()).unwrap();
|
|
|
|
|
+ let headstart_base = fbig2base(headstart);
|
|
|
|
|
+ headstart_base
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
pub fn is_leader(
|
|
pub fn is_leader(
|
|
|
&self,
|
|
&self,
|
|
|
sigma1: pallas::Base,
|
|
sigma1: pallas::Base,
|
|
@@ -298,7 +306,8 @@ impl LeadCoin {
|
|
|
|
|
|
|
|
let value = pallas::Base::from(self.value);
|
|
let value = pallas::Base::from(self.value);
|
|
|
|
|
|
|
|
- let target = sigma1 * value + sigma2 * value * value;
|
|
|
|
|
|
|
+ let headstart = Self::headstart();
|
|
|
|
|
+ let target = sigma1 * value + sigma2 * value * value + headstart;
|
|
|
|
|
|
|
|
let y_t_str = format!("{:?},{:?}\n", y, target);
|
|
let y_t_str = format!("{:?},{:?}\n", y, target);
|
|
|
let f =
|
|
let f =
|