mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 14:48:08 -05:00
[consensus] reward for leaders
This commit is contained in:
@@ -25,6 +25,7 @@ contract "Lead" {
|
||||
circuit "Lead" {
|
||||
ZERO = witness_base(0);
|
||||
ONE = witness_base(1);
|
||||
REWARD = witness_base(420);
|
||||
PREFIX_EVL = witness_base(2);
|
||||
PREFIX_SEED = witness_base(3);
|
||||
PREFIX_CM = witness_base(4);
|
||||
@@ -47,7 +48,9 @@ circuit "Lead" {
|
||||
constrain_instance(c1_cm_x);
|
||||
constrain_instance(c1_cm_y);
|
||||
# coin (2) cm/commitment
|
||||
c2_cm_msg = poseidon_hash(PREFIX_CM, pk, value, c2_rho);
|
||||
# reward
|
||||
c2_value = base_add(value, REWARD);
|
||||
c2_cm_msg = poseidon_hash(PREFIX_CM, pk, c2_value, c2_rho);
|
||||
c2_cm_v = ec_mul_base(c2_cm_msg, NULLIFIER_K);
|
||||
c2_cm_r = ec_mul(c2_opening, VALUE_COMMIT_RANDOM);
|
||||
c2_cm = ec_add(c2_cm_v, c2_cm_r);
|
||||
|
||||
@@ -32,7 +32,7 @@ use rand::rngs::OsRng;
|
||||
|
||||
use super::constants::EPOCH_LENGTH;
|
||||
use crate::{
|
||||
consensus::{TransferStx, TxRcpt},
|
||||
consensus::{TransferStx, TxRcpt, constants},
|
||||
crypto::{proof::ProvingKey, Proof},
|
||||
zk::{vm::ZkCircuit, vm_stack::Witness},
|
||||
zkas::ZkBinary,
|
||||
@@ -139,7 +139,7 @@ impl LeadCoin {
|
||||
// Create commitment to coin2
|
||||
let coin2_commitment = Self::commitment(
|
||||
pk,
|
||||
pallas::Base::from(value),
|
||||
pallas::Base::from(value+constants::REWARD),
|
||||
pallas::Base::from(coin2_seed),
|
||||
coin2_blind,
|
||||
);
|
||||
@@ -317,6 +317,7 @@ impl LeadCoin {
|
||||
derived.coin2_commitment = cm;
|
||||
derived.coin1_blind = derived.coin2_blind;
|
||||
derived.coin2_blind = blind;
|
||||
derived.value = self.value + constants::REWARD;
|
||||
derived
|
||||
}
|
||||
|
||||
|
||||
@@ -417,9 +417,11 @@ impl ValidatorState {
|
||||
return Ok(false)
|
||||
}
|
||||
let eta = self.get_eta();
|
||||
// TODO: slot parameter should be absolute slot, not relative.
|
||||
// At start of epoch, relative slot is 0.
|
||||
self.consensus.coins = self.create_epoch_coins(eta, epoch).await?;
|
||||
if self.consensus.coins.len() == 0 {
|
||||
//TODO: DRK coin need to be burned, and consensus coin to be minted.
|
||||
self.consensus.coins = self.create_epoch_coins(eta, epoch).await?;
|
||||
}
|
||||
self.consensus.epoch = epoch;
|
||||
self.consensus.epoch_eta = eta;
|
||||
|
||||
@@ -907,15 +909,19 @@ impl ValidatorState {
|
||||
return Err(Error::ProposalIsSpent)
|
||||
}
|
||||
}
|
||||
|
||||
// cm
|
||||
|
||||
let prop_cm_x: pallas::Base = lf.public_inputs[constants::PI_COMMITMENT_X_INDEX];
|
||||
let prop_cm_y: pallas::Base = lf.public_inputs[constants::PI_COMMITMENT_Y_INDEX];
|
||||
/*
|
||||
for cm in &self.consensus.leaders_spent_coins {
|
||||
if *cm == (prop_cm_x, prop_cm_y) {
|
||||
error!("receive_proposal(): Proposal coin already spent.");
|
||||
return Err(Error::ProposalIsSpent)
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// Check if proposal extends any existing fork chains
|
||||
let index = self.find_extended_chain_index(proposal)?;
|
||||
|
||||
@@ -98,7 +98,6 @@ pub async fn proposal_task(consensus_p2p: P2pPtr, sync_p2p: P2pPtr, state: Valid
|
||||
|
||||
// Retrieve slot sigmas
|
||||
let (sigma1, sigma2) = state.write().await.sigmas();
|
||||
|
||||
// Node checks if epoch has changed, to generate new epoch coins
|
||||
let epoch_changed = state.write().await.epoch_changed(sigma1, sigma2).await;
|
||||
match epoch_changed {
|
||||
|
||||
Reference in New Issue
Block a user