Sfoglia il codice sorgente

darkfid: use claimable fees in reward reporting

brid 1 settimana fa
parent
commit
58ffd3756c

+ 10 - 17
bin/darkfid/src/registry/model.rs

@@ -45,12 +45,12 @@ use darkfi_money_contract::{
     MONEY_CONTRACT_ZKAS_MINT_NS_V1,
 };
 use darkfi_sdk::{
+    blockchain::expected_reward,
     crypto::{
         keypair::{Address, Keypair, Network, SecretKey},
         pasta_prelude::PrimeField,
         FuncId, MerkleTree, MONEY_CONTRACT_ID,
     },
-    fee::accumulate_fee,
     pasta::pallas,
     ContractCall,
 };
@@ -215,24 +215,14 @@ impl BlockTemplate {
         Ok(params.input.value)
     }
 
-    /// Return block fees.
+    /// Return block miner-claimable fees.
     ///
     /// Note: always check if block contains transactions before
     /// calling this function.
     pub async fn fees(&self) -> Result<u64> {
-        let mut fees = 0;
-        'outer: for tx in &self.block.txs[..self.block.txs.len() - 1] {
-            for call in &tx.calls {
-                if !call.data.is_money_fee() {
-                    continue
-                }
-
-                fees = accumulate_fee(fees, call.data.money_fee_value()?)?;
-                continue 'outer
-            }
-        }
-
-        Ok(fees)
+        let reward = self.reward().await?;
+        let expected = expected_reward(self.block.header.height);
+        reward.checked_sub(expected).ok_or(Error::SubtractionUnderflow)
     }
 
     /// Return block reward excluding fees and fees values.
@@ -243,8 +233,11 @@ impl BlockTemplate {
             ))
         }
 
-        let fees = self.fees().await?;
-        let reward = self.reward().await?.checked_sub(fees).ok_or(Error::SubtractionUnderflow)?;
+        let reward = self.reward().await?;
+        let fees = reward
+            .checked_sub(expected_reward(self.block.header.height))
+            .ok_or(Error::SubtractionUnderflow)?;
+        let reward = reward.checked_sub(fees).ok_or(Error::SubtractionUnderflow)?;
 
         Ok((reward, fees))
     }

+ 7 - 4
src/contract/money/src/client/pow_reward_v1.rs

@@ -19,7 +19,7 @@
 use darkfi::{
     zk::{Proof, ProvingKey},
     zkas::ZkBinary,
-    Result,
+    Error, Result,
 };
 use darkfi_sdk::{
     blockchain::expected_reward,
@@ -65,7 +65,7 @@ pub struct PoWRewardCallBuilder {
     pub signature_keypair: Keypair,
     /// Rewarded block height
     pub block_height: u32,
-    /// Rewarded block transactions paid fees
+    /// Rewarded block transactions miner-claimable fees
     pub fees: u64,
     /// Optional recipient's public key, in case we want to mint to a different address
     pub recipient: Option<PublicKey>,
@@ -152,12 +152,15 @@ impl PoWRewardCallBuilder {
     }
 
     pub fn build(&self) -> Result<PoWRewardCallDebris> {
-        let reward = expected_reward(self.block_height) + self.fees;
+        let reward = expected_reward(self.block_height)
+            .checked_add(self.fees)
+            .ok_or(Error::AdditionOverflow)?;
         self._build(reward)
     }
 
     /// This function should only be used for testing, as PoW reward values are predefined
     pub fn build_with_custom_reward(&self, reward: u64) -> Result<PoWRewardCallDebris> {
-        self._build(reward + self.fees)
+        let reward = reward.checked_add(self.fees).ok_or(Error::AdditionOverflow)?;
+        self._build(reward)
     }
 }