Browse Source

contract: Move POW_REWARD constant to money contract

parazyd 2 years ago
parent
commit
64c80377a2

+ 8 - 8
src/contract/consensus/src/client/proposal_v1.rs

@@ -26,7 +26,7 @@ use darkfi::{
 };
 use darkfi_money_contract::{
     client::{ConsensusNote, ConsensusOwnCoin},
-    model::{Coin, ConsensusInput, ConsensusOutput},
+    model::{Coin, ConsensusInput, ConsensusOutput, POW_REWARD},
 };
 use darkfi_sdk::{
     blockchain::Slot,
@@ -43,8 +43,8 @@ use rand::rngs::OsRng;
 use crate::{
     client::common::{ConsensusBurnInputInfo, ConsensusMintOutputInfo},
     model::{
-        ConsensusProposalParamsV1, HEADSTART, MU_RHO_PREFIX, MU_Y_PREFIX, REWARD,
-        SECRET_KEY_PREFIX, SEED_PREFIX, SERIAL_PREFIX,
+        ConsensusProposalParamsV1, HEADSTART, MU_RHO_PREFIX, MU_Y_PREFIX, SECRET_KEY_PREFIX,
+        SEED_PREFIX, SERIAL_PREFIX,
     },
 };
 
@@ -166,7 +166,7 @@ impl ConsensusProposalCallBuilder {
             poseidon_hash([SERIAL_PREFIX, self.owncoin.secret.inner(), self.owncoin.note.serial]);
 
         let output = ConsensusMintOutputInfo {
-            value: self.owncoin.note.value + REWARD,
+            value: self.owncoin.note.value + POW_REWARD,
             epoch: 0, // We set the epoch as 0 here to eliminate a potential timelock
             public_key: output_keypair.public,
             value_blind: output_value_blind,
@@ -204,7 +204,7 @@ impl ConsensusProposalCallBuilder {
             value: output.value,
             epoch: output.epoch,
             value_blind: output.value_blind,
-            reward: REWARD,
+            reward: POW_REWARD,
             reward_blind: output_reward_blind,
         };
 
@@ -220,7 +220,7 @@ impl ConsensusProposalCallBuilder {
         let params = ConsensusProposalParamsV1 {
             input: tx_input,
             output: tx_output,
-            reward: REWARD,
+            reward: POW_REWARD,
             reward_blind: output_reward_blind,
             fork_hash: self.fork_hash,
             fork_previous_hash: self.fork_previous_hash,
@@ -322,7 +322,7 @@ fn create_proposal_proof(
         public_key,
         merkle_root,
         input_value_commit,
-        reward: REWARD,
+        reward: POW_REWARD,
         output_value_commit: pedersen_commitment_u64(output.value, output.value_blind),
         output_coin,
         vrf_proof: *vrf_proof,
@@ -340,7 +340,7 @@ fn create_proposal_proof(
         Witness::Base(Value::known(input.note.serial)),
         Witness::Base(Value::known(pallas::Base::from(input.note.value))),
         Witness::Base(Value::known(pallas::Base::from(input.note.epoch))),
-        Witness::Base(Value::known(pallas::Base::from(REWARD))),
+        Witness::Base(Value::known(pallas::Base::from(POW_REWARD))),
         Witness::Scalar(Value::known(input.value_blind)),
         Witness::Uint32(Value::known(u64::from(input.leaf_position).try_into().unwrap())),
         Witness::MerklePath(Value::known(input.merkle_path.clone().try_into().unwrap())),

+ 6 - 6
src/contract/consensus/src/entrypoint/proposal_v1.rs

@@ -17,10 +17,10 @@
  */
 
 use darkfi_money_contract::{
-    error::MoneyError, CONSENSUS_CONTRACT_INFO_TREE, CONSENSUS_CONTRACT_NULLIFIERS_TREE,
-    CONSENSUS_CONTRACT_STAKED_COINS_TREE, CONSENSUS_CONTRACT_STAKED_COIN_LATEST_COIN_ROOT,
-    CONSENSUS_CONTRACT_STAKED_COIN_MERKLE_TREE, CONSENSUS_CONTRACT_STAKED_COIN_ROOTS_TREE,
-    CONSENSUS_CONTRACT_ZKAS_PROPOSAL_NS_V1,
+    error::MoneyError, model::POW_REWARD, CONSENSUS_CONTRACT_INFO_TREE,
+    CONSENSUS_CONTRACT_NULLIFIERS_TREE, CONSENSUS_CONTRACT_STAKED_COINS_TREE,
+    CONSENSUS_CONTRACT_STAKED_COIN_LATEST_COIN_ROOT, CONSENSUS_CONTRACT_STAKED_COIN_MERKLE_TREE,
+    CONSENSUS_CONTRACT_STAKED_COIN_ROOTS_TREE, CONSENSUS_CONTRACT_ZKAS_PROPOSAL_NS_V1,
 };
 use darkfi_sdk::{
     blockchain::Slot,
@@ -39,7 +39,7 @@ use crate::{
     error::ConsensusError,
     model::{
         ConsensusProposalParamsV1, ConsensusProposalUpdateV1, GRACE_PERIOD, HEADSTART,
-        MU_RHO_PREFIX, MU_Y_PREFIX, REWARD, REWARD_PALLAS,
+        MU_RHO_PREFIX, MU_Y_PREFIX, REWARD_PALLAS,
     },
     ConsensusFunction,
 };
@@ -196,7 +196,7 @@ pub(crate) fn consensus_proposal_process_instruction_v1(
     // Here we check that input+reward == output
     let mut valcom_total = pallas::Point::identity();
     valcom_total += input.value_commit;
-    valcom_total += pedersen_commitment_u64(REWARD, params.reward_blind);
+    valcom_total += pedersen_commitment_u64(POW_REWARD, params.reward_blind);
     valcom_total -= output.value_commit;
     if valcom_total != pallas::Point::identity() {
         msg!("[ConsensusProposalV1] Error: Value commitments do not result in identity");

+ 0 - 2
src/contract/consensus/src/model.rs

@@ -104,8 +104,6 @@ pub const EPOCH_LENGTH: u64 = 10;
 pub const SLOT_TIME: u64 = 90;
 // Stake/Unstake timelock length in epochs
 pub const GRACE_PERIOD: u64 = calculate_grace_period();
-/// Configured block reward (1 DRK == 1 * 10^8)
-pub const REWARD: u64 = 100_000_000;
 /// Reward `pallas::Base`, calculated by: pallas::Base::from(REWARD)
 pub const REWARD_PALLAS: pallas::Base = pallas::Base::from_raw([100000000, 0, 0, 0]);
 /// Serial prefix, calculated by: pallas::Base::from(2)

+ 3 - 0
src/contract/money/src/model.rs

@@ -29,6 +29,9 @@ use darkfi_serial::{SerialDecodable, SerialEncodable};
 #[cfg(feature = "client")]
 use darkfi_serial::async_trait;
 
+/// Configured POW mining reward value (1 DRK == 1 * 10^8)
+pub const POW_REWARD: u64 = 100_000_000;
+
 /// A `Coin` represented in the Money state
 #[derive(Debug, Clone, Copy, Eq, PartialEq, SerialEncodable, SerialDecodable)]
 pub struct Coin(pallas::Base);

+ 6 - 1
src/contract/money/tests/integration.rs

@@ -18,6 +18,7 @@
 
 use darkfi::Result;
 use darkfi_contract_test_harness::{init_logger, Holder, TestHarness};
+use darkfi_money_contract::model::POW_REWARD;
 use log::info;
 
 #[test]
@@ -51,7 +52,8 @@ fn money_integration() -> Result<()> {
             .await?;
         }
 
-        let _ = th.gather_owncoin(&Holder::Alice, &alice_proposal_params.output, None)?;
+        let alice_owncoin =
+            th.gather_owncoin(&Holder::Alice, &alice_proposal_params.output, None)?;
 
         th.assert_trees(&HOLDERS);
         verification_slot += 1;
@@ -79,6 +81,9 @@ fn money_integration() -> Result<()> {
         verification_slot += 1;
         th.generate_slot(verification_slot).await?;
 
+        // Alice sends a payment of some DRK to Bob.
+        assert!(alice_owncoin.note.value == POW_REWARD);
+
         // Statistics
         th.statistics();
 

+ 5 - 4
src/contract/test-harness/src/consensus_proposal.rs

@@ -23,11 +23,12 @@ use darkfi::{
     Result,
 };
 use darkfi_consensus_contract::{
-    client::proposal_v1::ConsensusProposalCallBuilder,
-    model::{ConsensusProposalParamsV1, REWARD},
+    client::proposal_v1::ConsensusProposalCallBuilder, model::ConsensusProposalParamsV1,
     ConsensusFunction,
 };
-use darkfi_money_contract::{client::ConsensusOwnCoin, CONSENSUS_CONTRACT_ZKAS_PROPOSAL_NS_V1};
+use darkfi_money_contract::{
+    client::ConsensusOwnCoin, model::POW_REWARD, CONSENSUS_CONTRACT_ZKAS_PROPOSAL_NS_V1,
+};
 use darkfi_sdk::{
     blockchain::Slot,
     crypto::{MerkleNode, SecretKey, CONSENSUS_CONTRACT_ID},
@@ -155,7 +156,7 @@ impl TestHarness {
         )?;
 
         // Verify values match
-        assert!((staked_oc.note.value + REWARD) == rewarded_staked_oc.note.value);
+        assert!((staked_oc.note.value + POW_REWARD) == rewarded_staked_oc.note.value);
 
         Ok(rewarded_staked_oc)
     }