|
|
@@ -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))
|
|
|
}
|