Skip to content

Commit

Permalink
Including tx fee into block rewards (#764)
Browse files Browse the repository at this point in the history
* Including tx fee into block rewards
* Fix lint error
* Use defined number instead of magaic number result
* Addfork height check for including fees
  • Loading branch information
ShengguangXiao authored Sep 30, 2021
1 parent 6c36d77 commit cbdf6ba
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/miner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,11 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
coinbaseTx.vout.resize(2);

// Explicitly set miner reward
coinbaseTx.vout[0].nValue = CalculateCoinbaseReward(blockReward, consensus.dist.masternode);
if (nHeight >= consensus.FortCanningHeight) {
coinbaseTx.vout[0].nValue = nFees + CalculateCoinbaseReward(blockReward, consensus.dist.masternode);
} else {
coinbaseTx.vout[0].nValue = CalculateCoinbaseReward(blockReward, consensus.dist.masternode);
}

// Community payment always expected
coinbaseTx.vout[1].scriptPubKey = consensus.foundationShareScript;
Expand Down
43 changes: 43 additions & 0 deletions test/functional/feature_block_reward.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env python3
# Copyright (c) 2014-2019 The Bitcoin Core developers
# Copyright (c) DeFi Blockchain Developers
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
"""Test account mining behaviour"""

from test_framework.test_framework import DefiTestFramework
from test_framework.util import (
assert_greater_than,
assert_equal
)

class BlockRewardTest(DefiTestFramework):
def set_test_params(self):
self.num_nodes = 1
self.setup_clean_chain = True
self.extra_args = [['-txnotokens=0', '-amkheight=50', '-eunosheight=100', '-eunosheight=100', '-fortcanningheight=110', '-subsidytest=1']]

def run_test(self):
node = self.nodes[0]
node.generate(120)

newBaseBlockSubsidy = 405.0400
masternodePortion = 0.3333 # 33.33%
mingBaseReward = newBaseBlockSubsidy * masternodePortion

result = node.listaccounthistory("mine", {"depth":0})
assert_equal(result[0]["amounts"][0], f'{mingBaseReward:.8f}@DFI')

account = node.getnewaddress()
node.utxostoaccount({account: "1.1@0"})
node.utxostoaccount({account: "1.2@0"})
node.utxostoaccount({account: "1.3@0"})
node.generate(1)

result = node.listaccounthistory("mine", {"depth":0})
for subResult in result:
if subResult["type"] == "blockReward":
assert_greater_than(subResult["amounts"][0], f'{mingBaseReward:.8f}@DFI')

if __name__ == '__main__':
BlockRewardTest().main ()
1 change: 1 addition & 0 deletions test/functional/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@
'feature_burn_address.py',
'feature_eunos_balances.py',
'feature_sendutxosfrom.py',
'feature_block_reward.py',
# Don't append tests at the end to avoid merge conflicts
# Put them in a random line within the section that fits their approximate run-time
]
Expand Down

0 comments on commit cbdf6ba

Please sign in to comment.