From 55db03e144e133db8401c7463da31db87151d0ff Mon Sep 17 00:00:00 2001 From: mohab metwally Date: Fri, 30 Sep 2022 17:45:00 +0200 Subject: [PATCH] [stakeholder/stakeholder] fix mint/burn value --- src/blockchain/epoch.rs | 17 +++++++++-------- src/crypto/leadcoin.rs | 4 ++-- src/stakeholder/stakeholder.rs | 6 ++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/blockchain/epoch.rs b/src/blockchain/epoch.rs index 5eb5481de..0e1e1dc54 100644 --- a/src/blockchain/epoch.rs +++ b/src/blockchain/epoch.rs @@ -191,14 +191,14 @@ impl Epoch { if owned.len()>0 { let mut slot_coins = vec![]; for j in 0..owned.len() { - let coin = self.create_leadcoin(sigma, pallas::Base::from(owned[j].note.value), i, root_sks[i], path_sks[i], seeds[i]); + let coin = self.create_leadcoin(sigma, owned[j].note.value, i, root_sks[i], path_sks[i], seeds[i]); slot_coins.push(coin.clone()); } self.coins.push(slot_coins); } // otherwise compete with zero stake else { - let coin = self.create_leadcoin(sigma, pallas::Base::zero(), i, root_sks[i], path_sks[i], seeds[i]); + let coin = self.create_leadcoin(sigma, 0, i, root_sks[i], path_sks[i], seeds[i]); self.coins.push(vec!(coin)); } } @@ -206,7 +206,7 @@ impl Epoch { } pub fn create_leadcoin(&self, sigma: pallas::Base, - value : pallas::Base, + value : u64, i: usize, c_root_sk: MerkleNode, c_path_sk: [MerkleNode; MERKLE_DEPTH_ORCHARD], @@ -216,7 +216,7 @@ impl Epoch { let c_cm1_blind: DrkValueBlind = pallas::Scalar::random(&mut rng); let c_cm2_blind: DrkValueBlind = pallas::Scalar::random(&mut rng); let mut tree_cm = BridgeTree::::new(self.len()); - let c_v = value; + let c_v = pallas::Base::from(value); // coin relative slot index in the epoch let c_sl = pallas::Base::from(u64::try_from(i).unwrap()); // @@ -303,9 +303,9 @@ impl Epoch { assert!(slusize < self.coins.len()); let competing_coins : &Vec= &self.coins.clone()[sl as usize]; let mut am_leader = vec![]; - let mut highest_stake = pallas::Base::zero(); + let mut highest_stake = 0; let mut highest_stake_idx : usize= 0; - for (idx, coin) in competing_coins.iter().enumerate() { + for (winning_idx, coin) in competing_coins.iter().enumerate() { let y_exp = [coin.root_sk.unwrap(), coin.nonce.unwrap()]; let y_exp_hash: pallas::Base = poseidon::Hash::<_, poseidon::P128Pow5T3, poseidon::ConstantLength<2>, 3, 2>::init() @@ -317,16 +317,17 @@ impl Epoch { .unwrap() .x(); let ord = pallas::Base::from(10241024); //TODO fine tune this scalar. - let target = ord * coin.value.unwrap(); + let target = ord * pallas::Base::from(coin.value.unwrap()); debug!("y_x: {:?}, target: {:?}", y_x, target); //TODO (FIX) reversed for testin let iam_leader = target < y_x; if iam_leader && coin.value.unwrap() > highest_stake { highest_stake = coin.value.unwrap(); - highest_stake_idx = idx; + highest_stake_idx = winning_idx; } am_leader.push(iam_leader); } + *idx = highest_stake_idx; am_leader.len() > 0 } diff --git a/src/crypto/leadcoin.rs b/src/crypto/leadcoin.rs index 54d3cf354..d787014fe 100644 --- a/src/crypto/leadcoin.rs +++ b/src/crypto/leadcoin.rs @@ -21,7 +21,7 @@ pub const LEAD_PUBLIC_INPUT_LEN: usize = 10; #[derive(Debug, Default, Clone, Copy)] pub struct LeadCoin { - pub value: Option, // coin stake + pub value: Option, // coin stake pub cm: Option, // coin commitment pub cm2: Option, // poured coin commitment pub idx: u32, // coin idex @@ -118,7 +118,7 @@ impl LeadCoin { 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()), + value: Value::known(pallas::Base::from(self.value.unwrap())), coin2_blind: Value::known(self.c2_blind.unwrap()), cm_pos: Value::known(self.idx), //sn_c1: Value::known(self.sn.unwrap()), diff --git a/src/stakeholder/stakeholder.rs b/src/stakeholder/stakeholder.rs index 9ad990e42..90db7e0c2 100644 --- a/src/stakeholder/stakeholder.rs +++ b/src/stakeholder/stakeholder.rs @@ -575,15 +575,13 @@ impl Stakeholder { let token_id = pallas::Base::random(&mut OsRng); let builder = TransactionBuilder { clear_inputs: vec![TransactionBuilderClearInputInfo { - //value: coin.value.unwrap(), - value: 10, + value: coin.value.unwrap(), token_id, signature_secret: self.cashier_signature_secret, }], inputs: vec![], outputs: vec![TransactionBuilderOutputInfo { - //value: coin.value.unwrap(), - value: 10, + value: coin.value.unwrap(), token_id, public: self.keypair.public, }],