diff options
author | Martin Zumsande <mzumsande@gmail.com> | 2019-11-25 02:44:40 +0100 |
---|---|---|
committer | Martin Zumsande <mzumsande@gmail.com> | 2019-11-25 16:40:03 +0100 |
commit | f613e5dfdafe708f63ebb5193c44e2bc770c6651 (patch) | |
tree | e5ea15d63a856feb8bbda714507615838bbc71bb | |
parent | 2cb4e8bdc7ef75ae8d95c246af1e8e1f9c7045bd (diff) |
[test] move mining helper functions into test library
-rw-r--r-- | src/Makefile.test_util.include | 3 | ||||
-rw-r--r-- | src/bench/block_assemble.cpp | 1 | ||||
-rw-r--r-- | src/bench/wallet_balance.cpp | 1 | ||||
-rw-r--r-- | src/test/util.cpp | 44 | ||||
-rw-r--r-- | src/test/util.h | 14 | ||||
-rw-r--r-- | src/test/util/mining.cpp | 51 | ||||
-rw-r--r-- | src/test/util/mining.h | 24 |
7 files changed, 79 insertions, 59 deletions
diff --git a/src/Makefile.test_util.include b/src/Makefile.test_util.include index cf55d141b0..139b709569 100644 --- a/src/Makefile.test_util.include +++ b/src/Makefile.test_util.include @@ -10,6 +10,7 @@ EXTRA_LIBRARIES += \ TEST_UTIL_H = \ test/util/blockfilter.h \ test/util/logging.h \ + test/util/mining.h \ test/util/setup_common.h \ test/util/str.h \ test/util/transaction_utils.h @@ -19,6 +20,7 @@ libtest_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libtest_util_a_SOURCES = \ test/util/blockfilter.cpp \ test/util/logging.cpp \ + test/util/mining.cpp \ test/util/setup_common.cpp \ test/util/str.cpp \ test/util/transaction_utils.cpp \ @@ -28,4 +30,3 @@ LIBTEST_UTIL += $(LIBBITCOIN_SERVER) LIBTEST_UTIL += $(LIBBITCOIN_COMMON) LIBTEST_UTIL += $(LIBBITCOIN_UTIL) LIBTEST_UTIL += $(LIBBITCOIN_CRYPTO_BASE) - diff --git a/src/bench/block_assemble.cpp b/src/bench/block_assemble.cpp index 2f47398d99..2ccae0c667 100644 --- a/src/bench/block_assemble.cpp +++ b/src/bench/block_assemble.cpp @@ -6,6 +6,7 @@ #include <consensus/validation.h> #include <crypto/sha256.h> #include <test/util.h> +#include <test/util/mining.h> #include <txmempool.h> #include <validation.h> diff --git a/src/bench/wallet_balance.cpp b/src/bench/wallet_balance.cpp index 0e660d6bcd..bd79ddfdd6 100644 --- a/src/bench/wallet_balance.cpp +++ b/src/bench/wallet_balance.cpp @@ -7,6 +7,7 @@ #include <node/context.h> #include <optional.h> #include <test/util.h> +#include <test/util/mining.h> #include <validationinterface.h> #include <wallet/wallet.h> diff --git a/src/test/util.cpp b/src/test/util.cpp index ed031270f2..e775ad323b 100644 --- a/src/test/util.cpp +++ b/src/test/util.cpp @@ -4,15 +4,9 @@ #include <test/util.h> -#include <chainparams.h> -#include <consensus/merkle.h> #include <key_io.h> -#include <miner.h> #include <outputtype.h> -#include <pow.h> #include <script/standard.h> -#include <validation.h> -#include <validationinterface.h> #ifdef ENABLE_WALLET #include <wallet/wallet.h> #endif @@ -44,41 +38,3 @@ void importaddress(CWallet& wallet, const std::string& address) wallet.SetAddressBook(dest, /* label */ "", "receive"); } #endif // ENABLE_WALLET - -CTxIn generatetoaddress(const std::string& address) -{ - const auto dest = DecodeDestination(address); - assert(IsValidDestination(dest)); - const auto coinbase_script = GetScriptForDestination(dest); - - return MineBlock(coinbase_script); -} - -CTxIn MineBlock(const CScript& coinbase_scriptPubKey) -{ - auto block = PrepareBlock(coinbase_scriptPubKey); - - while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) { - ++block->nNonce; - assert(block->nNonce); - } - - bool processed{ProcessNewBlock(Params(), block, true, nullptr)}; - assert(processed); - - return CTxIn{block->vtx[0]->GetHash(), 0}; -} - -std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey) -{ - auto block = std::make_shared<CBlock>( - BlockAssembler{Params()} - .CreateNewBlock(coinbase_scriptPubKey) - ->block); - - LOCK(cs_main); - block->nTime = ::ChainActive().Tip()->GetMedianTimePast() + 1; - block->hashMerkleRoot = BlockMerkleRoot(*block); - - return block; -} diff --git a/src/test/util.h b/src/test/util.h index 3cf830dd38..7adeaea772 100644 --- a/src/test/util.h +++ b/src/test/util.h @@ -5,33 +5,19 @@ #ifndef BITCOIN_TEST_UTIL_H #define BITCOIN_TEST_UTIL_H -#include <memory> #include <string> -class CBlock; -class CScript; -class CTxIn; class CWallet; // Constants // extern const std::string ADDRESS_BCRT1_UNSPENDABLE; -// Lower-level utils // - -/** Returns the generated coin */ -CTxIn MineBlock(const CScript& coinbase_scriptPubKey); -/** Prepare a block to be mined */ -std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey); - - // RPC-like // /** Import the address to the wallet */ void importaddress(CWallet& wallet, const std::string& address); /** Returns a new address from the wallet */ std::string getnewaddress(CWallet& w); -/** Returns the generated coin */ -CTxIn generatetoaddress(const std::string& address); #endif // BITCOIN_TEST_UTIL_H diff --git a/src/test/util/mining.cpp b/src/test/util/mining.cpp new file mode 100644 index 0000000000..30f0f5d7e6 --- /dev/null +++ b/src/test/util/mining.cpp @@ -0,0 +1,51 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include <test/util/mining.h> + +#include <chainparams.h> +#include <consensus/merkle.h> +#include <key_io.h> +#include <miner.h> +#include <pow.h> +#include <script/standard.h> +#include <validation.h> + +CTxIn generatetoaddress(const std::string& address) +{ + const auto dest = DecodeDestination(address); + assert(IsValidDestination(dest)); + const auto coinbase_script = GetScriptForDestination(dest); + + return MineBlock(coinbase_script); +} + +CTxIn MineBlock(const CScript& coinbase_scriptPubKey) +{ + auto block = PrepareBlock(coinbase_scriptPubKey); + + while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) { + ++block->nNonce; + assert(block->nNonce); + } + + bool processed{ProcessNewBlock(Params(), block, true, nullptr)}; + assert(processed); + + return CTxIn{block->vtx[0]->GetHash(), 0}; +} + +std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey) +{ + auto block = std::make_shared<CBlock>( + BlockAssembler{Params()} + .CreateNewBlock(coinbase_scriptPubKey) + ->block); + + LOCK(cs_main); + block->nTime = ::ChainActive().Tip()->GetMedianTimePast() + 1; + block->hashMerkleRoot = BlockMerkleRoot(*block); + + return block; +} diff --git a/src/test/util/mining.h b/src/test/util/mining.h new file mode 100644 index 0000000000..afe4de684f --- /dev/null +++ b/src/test/util/mining.h @@ -0,0 +1,24 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITCOIN_TEST_UTIL_MINING_H +#define BITCOIN_TEST_UTIL_MINING_H + +#include <memory> +#include <string> + +class CBlock; +class CScript; +class CTxIn; + +/** Returns the generated coin */ +CTxIn MineBlock(const CScript& coinbase_scriptPubKey); + +/** Prepare a block to be mined */ +std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey); + +/** RPC-like helper function, returns the generated coin */ +CTxIn generatetoaddress(const std::string& address); + +#endif // BITCOIN_TEST_UTIL_MINING_H |