From 4ff042dde9cc2345bdf86557147b32e924764745 Mon Sep 17 00:00:00 2001 From: aggstam Date: Tue, 27 Dec 2022 17:08:24 +0200 Subject: [PATCH] consensus/leadcoin: renamed tau to slot --- proof/lead.zk | 4 +-- src/consensus/leadcoin.rs | 33 +++++++++++------------- src/consensus/stx.rs | 4 +-- src/consensus/validator.rs | 2 +- src/contract/money/proof/lead_burn_v1.zk | 4 +-- src/contract/money/proof/lead_mint_v1.zk | 4 +-- src/contract/money/src/client.rs | 6 ++--- 7 files changed, 27 insertions(+), 30 deletions(-) diff --git a/proof/lead.zk b/proof/lead.zk index 031869308..34fe19ff1 100644 --- a/proof/lead.zk +++ b/proof/lead.zk @@ -11,7 +11,7 @@ contract "Lead" { Base c1_sk, Base c1_sk_root, MerklePath c1_sk_path, - Base c1_tau, + Base c1_slot, Base c1_rho, Scalar c1_opening, Base value, @@ -33,7 +33,7 @@ circuit "Lead" { PREFIX_SN = witness_base(6); # coin (1) pk - pk = poseidon_hash(PREFIX_PK, c1_sk_root, c1_tau, ZERO); + pk = poseidon_hash(PREFIX_PK, c1_sk_root, c1_slot, ZERO); constrain_instance(pk); # coin (1) cm/commitment c1_cm_msg = poseidon_hash(PREFIX_CM, pk, value, c1_rho); diff --git a/src/consensus/leadcoin.rs b/src/consensus/leadcoin.rs index 97d179d51..042015ab2 100644 --- a/src/consensus/leadcoin.rs +++ b/src/consensus/leadcoin.rs @@ -58,8 +58,8 @@ pub const PREFIX_SN: u64 = 6; pub struct LeadCoin { /// Coin's stake value pub value: u64, - /// Coin timestamp as slot index. - pub tau: pallas::Base, + /// Coin creation slot. + pub slot: u64, /// Coin nonce pub nonce: pallas::Base, /// Commitment for coin1 @@ -101,7 +101,7 @@ impl LeadCoin { // Stake value value: u64, // Slot absolute index - slot_index: u64, + slot: u64, // coin1 sk coin1_sk: pallas::Base, // Merkle root of the `coin_1` secret key in the Merkle tree of secret keys @@ -118,13 +118,11 @@ impl LeadCoin { // Generate random blinding values for commitments: let coin1_blind = pallas::Scalar::random(&mut OsRng); let coin2_blind = pallas::Scalar::random(&mut OsRng); - let tau = pallas::Base::from(slot_index); - //TODO disable tau, set to zero. // pk - let pk = Self::util_pk(coin1_sk_root, tau); + let pk = Self::util_pk(coin1_sk_root, slot); // Derive the nonce for coin2 let coin2_seed = Self::util_derived_rho(coin1_sk_root, seed); - info!("coin2_seed[{}]: {:?}", slot_index, coin2_seed); + info!("coin2_seed[{}]: {:?}", slot, coin2_seed); let coin1_commitment = Self::commitment(pk, pallas::Base::from(value), seed, coin1_blind); // Hash its coordinates to get a base field element let c1_cm_coords = coin1_commitment.to_affine().coordinates().unwrap(); @@ -145,17 +143,15 @@ impl LeadCoin { coin2_blind, ); // Derive election seeds - let (y_mu, rho_mu) = Self::election_seeds(eta, pallas::Base::from(slot_index)); + let (y_mu, rho_mu) = Self::election_seeds_u64(eta, slot); // Return the object Self { value, - // Assume tau is sl for simplicity - tau, + slot, nonce: seed, coin1_commitment, coin2_commitment, coin1_commitment_root, - // TODO: Should be abs slot coin1_commitment_pos: u32::try_from(usize::from(coin1_commitment_pos)).unwrap(), coin1_commitment_merkle_path: coin1_commitment_merkle_path.try_into().unwrap(), coin1_sk, @@ -233,15 +229,16 @@ impl LeadCoin { public_inputs } - fn util_pk(sk_root: MerkleNode, tau: pallas::Base) -> pallas::Base { - let pk_msg = [pallas::Base::from(PREFIX_PK), sk_root.inner(), tau, ZERO]; + fn util_pk(sk_root: MerkleNode, slot: u64) -> pallas::Base { + let pk_msg = + [pallas::Base::from(PREFIX_PK), sk_root.inner(), pallas::Base::from(slot), ZERO]; poseidon_hash(pk_msg) } /// calculate coin public key: hash of root coin secret key - /// and timestmap. + /// and creation slot. pub fn pk(&self) -> pallas::Base { - Self::util_pk(self.coin1_sk_root, self.tau) + Self::util_pk(self.coin1_sk_root, self.slot) } fn util_derived_rho(sk_root: MerkleNode, nonce: pallas::Base) -> pallas::Base { @@ -319,7 +316,7 @@ impl LeadCoin { coin_commitment_tree.authentication_path(leaf_pos, &commitment_root).unwrap(); LeadCoin { value: self.value + constants::REWARD, - tau: self.tau, + slot: self.slot, nonce: derived_c1_rho, coin1_commitment: self.coin2_commitment, coin2_commitment: derived_c2_cm, @@ -360,7 +357,7 @@ impl LeadCoin { Witness::Base(Value::known(self.coin1_sk)), Witness::Base(Value::known(self.coin1_sk_root.inner())), Witness::MerklePath(Value::known(self.coin1_sk_merkle_path)), - Witness::Base(Value::known(self.tau)), + Witness::Base(Value::known(pallas::Base::from(self.slot))), Witness::Base(Value::known(self.nonce)), Witness::Scalar(Value::known(self.coin1_blind)), Witness::Base(Value::known(pallas::Base::from(self.value))), @@ -442,7 +439,7 @@ impl LeadCoin { change_coin_commitment: cm3, transfered_coin_commitment: cm4, nullifier: self.sn(), - tau: self.tau, + slot: pallas::Base::from(self.slot), root: self.coin1_commitment_root, proof, }; diff --git a/src/consensus/stx.rs b/src/consensus/stx.rs index 2483f6ac3..f719e2df9 100644 --- a/src/consensus/stx.rs +++ b/src/consensus/stx.rs @@ -41,8 +41,8 @@ pub struct TransferStx { pub transfered_coin_commitment: pallas::Point, /// nullifiers coin1_nullifier pub nullifier: pallas::Base, - /// sk coin pos - pub tau: pallas::Base, + /// sk coin creation slot + pub slot: pallas::Base, /// root to coin's commitments pub root: MerkleNode, /// transfer proof diff --git a/src/consensus/validator.rs b/src/consensus/validator.rs index c70715410..26d9fe5ba 100644 --- a/src/consensus/validator.rs +++ b/src/consensus/validator.rs @@ -306,7 +306,7 @@ impl ValidatorState { signed_proposal, public_key, public_inputs, - slot, + coin.slot, coin.eta, LeadProof::from(proof?), self.consensus.get_current_offset(slot), diff --git a/src/contract/money/proof/lead_burn_v1.zk b/src/contract/money/proof/lead_burn_v1.zk index d29fd4232..011a72886 100644 --- a/src/contract/money/proof/lead_burn_v1.zk +++ b/src/contract/money/proof/lead_burn_v1.zk @@ -11,7 +11,7 @@ contract "Lead_Burn_V1" { Base c1_sk, Base c1_sk_root, MerklePath c1_sk_path, - Base c1_tau, + Base c1_slot, Base c1_rho, Scalar c1_opening, Base value, @@ -36,7 +36,7 @@ circuit "Lead_Burn_V1" { pk = poseidon_hash( PREFIX_PK, c1_sk_root, - c1_tau, + c1_slot, ZERO ); constrain_instance(pk); diff --git a/src/contract/money/proof/lead_mint_v1.zk b/src/contract/money/proof/lead_mint_v1.zk index b18ba8bb4..10831db24 100644 --- a/src/contract/money/proof/lead_mint_v1.zk +++ b/src/contract/money/proof/lead_mint_v1.zk @@ -7,7 +7,7 @@ constant "Lead_Mint_V1" { contract "Lead_Mint_V1" { Base c1_sk, Base c1_sk_root, - Base c1_tau, + Base c1_slot, Base c1_rho, Scalar c1_opening, Base value, @@ -28,7 +28,7 @@ circuit "Lead_Mint_V1" { constrain_instance(ec_get_y(value_commit)); # coin (1) pk - pk = poseidon_hash(PREFIX_PK, c1_sk_root, c1_tau, ZERO); + pk = poseidon_hash(PREFIX_PK, c1_sk_root, c1_slot, ZERO); constrain_instance(pk); # coin (1) cm/commitment diff --git a/src/contract/money/src/client.rs b/src/contract/money/src/client.rs index 56bb48e44..d07d5005a 100644 --- a/src/contract/money/src/client.rs +++ b/src/contract/money/src/client.rs @@ -595,7 +595,7 @@ fn create_unstake_burn_proof( commitment: pallas::Point, commitment_root: pallas::Base, commitment_pos: incrementalmerkletree::Position, - tau: pallas::Base, + slot: u64, nonce: pallas::Base, nullifier: pallas::Base, ) -> Result<(Proof, UnstakeLeadBurnRevealed)> { @@ -616,7 +616,7 @@ fn create_unstake_burn_proof( Witness::Base(Value::known(sk)), Witness::Base(Value::known(sk_root)), Witness::MerklePath(Value::known(sk_path.try_into().unwrap())), - Witness::Base(Value::known(tau)), + Witness::Base(Value::known(pallas::Base::from(slot))), Witness::Base(Value::known(nonce)), Witness::Scalar(Value::known(coin_blind)), Witness::Base(Value::known(value)), @@ -1193,7 +1193,7 @@ pub fn build_unstake_tx( coin.coin1_commitment, coin.coin1_commitment_root.inner(), incrementalmerkletree::Position::from(coin.coin1_commitment_pos as usize), - coin.tau, + coin.slot, coin.nonce, nullifier, )?;