|
|
@ -2,25 +2,58 @@ |
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
|
|
|
|
#include "primitives/transaction.h" |
|
|
|
#include "chainparams.h" |
|
|
|
#include "main.h" |
|
|
|
#include "main.h" |
|
|
|
|
|
|
|
|
|
|
|
#include "test/test_bitcoin.h" |
|
|
|
#include "test/test_bitcoin.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <boost/signals2/signal.hpp> |
|
|
|
#include <boost/test/unit_test.hpp> |
|
|
|
#include <boost/test/unit_test.hpp> |
|
|
|
|
|
|
|
|
|
|
|
BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup) |
|
|
|
BOOST_FIXTURE_TEST_SUITE(main_tests, TestingSetup) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
int maxHalvings = 64; |
|
|
|
|
|
|
|
CAmount nInitialSubsidy = 50 * COIN; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0
|
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2); |
|
|
|
|
|
|
|
for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) { |
|
|
|
|
|
|
|
int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval; |
|
|
|
|
|
|
|
CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams); |
|
|
|
|
|
|
|
BOOST_CHECK(nSubsidy <= nInitialSubsidy); |
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2); |
|
|
|
|
|
|
|
nPreviousSubsidy = nSubsidy; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Consensus::Params consensusParams; |
|
|
|
|
|
|
|
consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval; |
|
|
|
|
|
|
|
TestBlockSubsidyHalvings(consensusParams); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(block_subsidy_test) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
TestBlockSubsidyHalvings(Params(CBaseChainParams::MAIN).GetConsensus()); // As in main
|
|
|
|
|
|
|
|
TestBlockSubsidyHalvings(150); // As in regtest
|
|
|
|
|
|
|
|
TestBlockSubsidyHalvings(1000); // Just another interval
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(subsidy_limit_test) |
|
|
|
BOOST_AUTO_TEST_CASE(subsidy_limit_test) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
const Consensus::Params& consensusParams = Params(CBaseChainParams::MAIN).GetConsensus(); |
|
|
|
CAmount nSum = 0; |
|
|
|
CAmount nSum = 0; |
|
|
|
for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) { |
|
|
|
for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) { |
|
|
|
CAmount nSubsidy = GetBlockValue(nHeight, 0); |
|
|
|
CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams); |
|
|
|
BOOST_CHECK(nSubsidy <= 50 * COIN); |
|
|
|
BOOST_CHECK(nSubsidy <= 50 * COIN); |
|
|
|
nSum += nSubsidy * 1000; |
|
|
|
nSum += nSubsidy * 1000; |
|
|
|
BOOST_CHECK(MoneyRange(nSum)); |
|
|
|
BOOST_CHECK(MoneyRange(nSum)); |
|
|
|
} |
|
|
|
} |
|
|
|
BOOST_CHECK(nSum == 2099999997690000ULL); |
|
|
|
BOOST_CHECK_EQUAL(nSum, 2099999997690000ULL); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool ReturnFalse() { return false; } |
|
|
|
bool ReturnFalse() { return false; } |
|
|
|