From cebf133182b586d4bbb438315d80dd6539b19819 Mon Sep 17 00:00:00 2001 From: Filip Gospodinov Date: Mon, 27 Aug 2018 16:59:19 +0200 Subject: [PATCH] Derive bc::settings::recursive_money. --- include/bitcoin/bitcoin/settings.hpp | 1 + src/settings.cpp | 8 +++++++- test/settings.cpp | 21 --------------------- 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/include/bitcoin/bitcoin/settings.hpp b/include/bitcoin/bitcoin/settings.hpp index fe5af201e21..d38d3ed5197 100644 --- a/include/bitcoin/bitcoin/settings.hpp +++ b/include/bitcoin/bitcoin/settings.hpp @@ -40,6 +40,7 @@ class BC_API settings //-------------------------------------------------------------------------- uint64_t bitcoin_to_satoshi(uint64_t bitcoin_units=1) const; + uint64_t max_money_recursive(uint64_t money) const; uint32_t retargeting_factor; uint32_t target_spacing_seconds; diff --git a/src/settings.cpp b/src/settings.cpp index 865833fc6fc..6cb5c195ba8 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -41,7 +41,8 @@ settings::settings() bip9_version_base(0x20000000), satoshi_per_bitcoin(100000000), initial_block_subsidy_bitcoin(50), - recursive_money(9999999989u) + recursive_money(max_money_recursive(bitcoin_to_satoshi( + initial_block_subsidy_bitcoin))) { } @@ -254,4 +255,9 @@ uint64_t settings::bitcoin_to_satoshi(uint64_t bitcoin_units) const return bitcoin_units * satoshi_per_bitcoin; } +uint64_t settings::max_money_recursive(uint64_t money) const +{ + return money > 0 ? money + max_money_recursive(money >> 1) : 0; +} + } // namespace libbitcoin diff --git a/test/settings.cpp b/test/settings.cpp index 4d862612464..73ab7ca9938 100644 --- a/test/settings.cpp +++ b/test/settings.cpp @@ -23,11 +23,6 @@ using namespace bc; BOOST_AUTO_TEST_SUITE(settings_tests) -uint64_t max_money_recursive(uint64_t money) -{ - return money > 0 ? money + max_money_recursive(money >> 1) : 0; -} - // constructors //----------------------------------------------------------------------------- @@ -52,10 +47,6 @@ BOOST_AUTO_TEST_CASE(settings__construct__default_context__expected) BOOST_REQUIRE_EQUAL(configuration.satoshi_per_bitcoin, 100000000); BOOST_REQUIRE_EQUAL(configuration.initial_block_subsidy_bitcoin, 50); BOOST_REQUIRE_EQUAL(configuration.recursive_money, 9999999989u); - auto coin_subsidy = configuration.initial_block_subsidy_bitcoin; - coin_subsidy = configuration.bitcoin_to_satoshi(coin_subsidy); - const auto recursive_money = max_money_recursive(coin_subsidy); - BOOST_REQUIRE_EQUAL(recursive_money, configuration.recursive_money); const auto satoshi_per_bitcoin = configuration.bitcoin_to_satoshi(1); BOOST_REQUIRE_EQUAL(satoshi_per_bitcoin, configuration.satoshi_per_bitcoin); } @@ -140,10 +131,6 @@ BOOST_AUTO_TEST_CASE(settings__construct__mainnet_context__expected) BOOST_REQUIRE_EQUAL(configuration.initial_block_subsidy_bitcoin, 50); BOOST_REQUIRE_EQUAL(configuration.recursive_money, 9999999989u); BOOST_REQUIRE_EQUAL(configuration.subsidy_interval, 210000); - auto coin_subsidy = configuration.initial_block_subsidy_bitcoin; - coin_subsidy = configuration.bitcoin_to_satoshi(coin_subsidy); - const auto recursive_money = max_money_recursive(coin_subsidy); - BOOST_REQUIRE_EQUAL(recursive_money, configuration.recursive_money); const auto satoshi_per_bitcoin = configuration.bitcoin_to_satoshi(1); BOOST_REQUIRE_EQUAL(satoshi_per_bitcoin, configuration.satoshi_per_bitcoin); BOOST_REQUIRE_EQUAL(configuration.max_money, 2099999997690000); @@ -229,10 +216,6 @@ BOOST_AUTO_TEST_CASE(settings__construct__testnet_context__expected) BOOST_REQUIRE_EQUAL(configuration.initial_block_subsidy_bitcoin, 50); BOOST_REQUIRE_EQUAL(configuration.recursive_money, 9999999989u); BOOST_REQUIRE_EQUAL(configuration.subsidy_interval, 210000); - auto coin_subsidy = configuration.initial_block_subsidy_bitcoin; - coin_subsidy = configuration.bitcoin_to_satoshi(coin_subsidy); - const auto recursive_money = max_money_recursive(coin_subsidy); - BOOST_REQUIRE_EQUAL(recursive_money, configuration.recursive_money); const auto satoshi_per_bitcoin = configuration.bitcoin_to_satoshi(1); BOOST_REQUIRE_EQUAL(satoshi_per_bitcoin, configuration.satoshi_per_bitcoin); BOOST_REQUIRE_EQUAL(configuration.max_money, 2099999997690000); @@ -307,10 +290,6 @@ BOOST_AUTO_TEST_CASE(settings__construct__regtest_context__expected) BOOST_REQUIRE_EQUAL(configuration.initial_block_subsidy_bitcoin, 50); BOOST_REQUIRE_EQUAL(configuration.recursive_money, 9999999989u); BOOST_REQUIRE_EQUAL(configuration.subsidy_interval, 150); - auto coin_subsidy = configuration.initial_block_subsidy_bitcoin; - coin_subsidy = configuration.bitcoin_to_satoshi(coin_subsidy); - const auto recursive_money = max_money_recursive(coin_subsidy); - BOOST_REQUIRE_EQUAL(recursive_money, configuration.recursive_money); const auto satoshi_per_bitcoin = configuration.bitcoin_to_satoshi(1); BOOST_REQUIRE_EQUAL(satoshi_per_bitcoin, configuration.satoshi_per_bitcoin); BOOST_REQUIRE_EQUAL(configuration.max_money, 1499999998350);