diff --git a/src/test/blockfilter_index_tests.cpp b/src/test/blockfilter_index_tests.cpp --- a/src/test/blockfilter_index_tests.cpp +++ b/src/test/blockfilter_index_tests.cpp @@ -57,10 +57,11 @@ static CBlock CreateBlock(const CBlockIndex *prev, const std::vector &txns, - const CScript &scriptPubKey) { + const CScript &scriptPubKey, + const CTxMemPool &mempool) { const Config &config = GetConfig(); std::unique_ptr pblocktemplate = - BlockAssembler(config, g_mempool).CreateNewBlock(scriptPubKey); + BlockAssembler(config, mempool).CreateNewBlock(scriptPubKey); CBlock &block = pblocktemplate->block; block.hashPrevBlock = prev->GetBlockHash(); block.nTime = prev->nTime + 1; @@ -84,13 +85,14 @@ static bool BuildChain(const CBlockIndex *pindex, const CScript &coinbase_script_pub_key, size_t length, - std::vector> &chain) { + std::vector> &chain, + const CTxMemPool &mempool) { std::vector no_txns; chain.resize(length); for (auto &block : chain) { block = std::make_shared( - CreateBlock(pindex, no_txns, coinbase_script_pub_key)); + CreateBlock(pindex, no_txns, coinbase_script_pub_key, mempool)); CBlockHeader header = block->GetBlockHeader(); CValidationState state; @@ -164,8 +166,10 @@ CScript coinbase_script_pub_key = GetScriptForDestination(PKHash(coinbaseKey.GetPubKey())); std::vector> chainA, chainB; - BOOST_REQUIRE(BuildChain(tip, coinbase_script_pub_key, 10, chainA)); - BOOST_REQUIRE(BuildChain(tip, coinbase_script_pub_key, 10, chainB)); + BOOST_REQUIRE( + BuildChain(tip, coinbase_script_pub_key, 10, chainA, ::g_mempool)); + BOOST_REQUIRE( + BuildChain(tip, coinbase_script_pub_key, 10, chainB, ::g_mempool)); // Check that new blocks on chain A get indexed. uint256 chainA_last_header = last_header; diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -234,7 +234,8 @@ BOOST_CHECK(pblocktemplate->block.vtx[8]->GetId() == lowFeeTxId2); } -void TestCoinbaseMessageEB(uint64_t eb, std::string cbmsg) { +void TestCoinbaseMessageEB(uint64_t eb, std::string cbmsg, + const CTxMemPool &mempool) { GlobalConfig config; config.SetMaxBlockSize(eb); @@ -245,7 +246,7 @@ << OP_CHECKSIG; std::unique_ptr pblocktemplate = - BlockAssembler(config, g_mempool).CreateNewBlock(scriptPubKey); + BlockAssembler(config, mempool).CreateNewBlock(scriptPubKey); CBlock *pblock = &pblocktemplate->block; @@ -263,10 +264,10 @@ // Coinbase scriptSig has to contains the correct EB value // converted to MB, rounded down to the first decimal BOOST_AUTO_TEST_CASE(CheckCoinbase_EB) { - TestCoinbaseMessageEB(1000001, "/EB1.0/"); - TestCoinbaseMessageEB(2000000, "/EB2.0/"); - TestCoinbaseMessageEB(8000000, "/EB8.0/"); - TestCoinbaseMessageEB(8320000, "/EB8.3/"); + TestCoinbaseMessageEB(1000001, "/EB1.0/", ::g_mempool); + TestCoinbaseMessageEB(2000000, "/EB2.0/", ::g_mempool); + TestCoinbaseMessageEB(8000000, "/EB8.0/", ::g_mempool); + TestCoinbaseMessageEB(8320000, "/EB8.3/", ::g_mempool); } // NOTE: These tests rely on CreateNewBlock doing its own self-validation! @@ -684,10 +685,11 @@ fCheckpointsEnabled = true; } -void CheckBlockMaxSize(const Config &config, uint64_t size, uint64_t expected) { +void CheckBlockMaxSize(const Config &config, const CTxMemPool &mempool, + uint64_t size, uint64_t expected) { gArgs.ForceSetArg("-blockmaxsize", std::to_string(size)); - BlockAssembler ba(config, g_mempool); + BlockAssembler ba(config, mempool); BOOST_CHECK_EQUAL(ba.GetMaxGeneratedBlockSize(), expected); } @@ -699,27 +701,30 @@ // Test around historical 1MB (plus one byte because that's mandatory) config.SetMaxBlockSize(ONE_MEGABYTE + 1); - CheckBlockMaxSize(config, 0, 1000); - CheckBlockMaxSize(config, 1000, 1000); - CheckBlockMaxSize(config, 1001, 1001); - CheckBlockMaxSize(config, 12345, 12345); - - CheckBlockMaxSize(config, ONE_MEGABYTE - 1001, ONE_MEGABYTE - 1001); - CheckBlockMaxSize(config, ONE_MEGABYTE - 1000, ONE_MEGABYTE - 1000); - CheckBlockMaxSize(config, ONE_MEGABYTE - 999, ONE_MEGABYTE - 999); - CheckBlockMaxSize(config, ONE_MEGABYTE, ONE_MEGABYTE - 999); + CheckBlockMaxSize(config, ::g_mempool, 0, 1000); + CheckBlockMaxSize(config, ::g_mempool, 1000, 1000); + CheckBlockMaxSize(config, ::g_mempool, 1001, 1001); + CheckBlockMaxSize(config, ::g_mempool, 12345, 12345); + + CheckBlockMaxSize(config, ::g_mempool, ONE_MEGABYTE - 1001, + ONE_MEGABYTE - 1001); + CheckBlockMaxSize(config, ::g_mempool, ONE_MEGABYTE - 1000, + ONE_MEGABYTE - 1000); + CheckBlockMaxSize(config, ::g_mempool, ONE_MEGABYTE - 999, + ONE_MEGABYTE - 999); + CheckBlockMaxSize(config, ::g_mempool, ONE_MEGABYTE, ONE_MEGABYTE - 999); // Test around default cap config.SetMaxBlockSize(DEFAULT_MAX_BLOCK_SIZE); // Now we can use the default max block size. - CheckBlockMaxSize(config, DEFAULT_MAX_BLOCK_SIZE - 1001, + CheckBlockMaxSize(config, ::g_mempool, DEFAULT_MAX_BLOCK_SIZE - 1001, DEFAULT_MAX_BLOCK_SIZE - 1001); - CheckBlockMaxSize(config, DEFAULT_MAX_BLOCK_SIZE - 1000, + CheckBlockMaxSize(config, ::g_mempool, DEFAULT_MAX_BLOCK_SIZE - 1000, DEFAULT_MAX_BLOCK_SIZE - 1000); - CheckBlockMaxSize(config, DEFAULT_MAX_BLOCK_SIZE - 999, + CheckBlockMaxSize(config, ::g_mempool, DEFAULT_MAX_BLOCK_SIZE - 999, DEFAULT_MAX_BLOCK_SIZE - 1000); - CheckBlockMaxSize(config, DEFAULT_MAX_BLOCK_SIZE, + CheckBlockMaxSize(config, ::g_mempool, DEFAULT_MAX_BLOCK_SIZE, DEFAULT_MAX_BLOCK_SIZE - 1000); // If the parameter is not specified, we use diff --git a/src/test/validation_block_tests.cpp b/src/test/validation_block_tests.cpp --- a/src/test/validation_block_tests.cpp +++ b/src/test/validation_block_tests.cpp @@ -50,7 +50,7 @@ } }; -std::shared_ptr Block(const Config &config, +std::shared_ptr Block(const Config &config, const CTxMemPool &mempool, const BlockHash &prev_hash) { static int i = 0; static uint64_t time = config.GetChainParams().GenesisBlock().nTime; @@ -58,7 +58,7 @@ CScript pubKey; pubKey << i++ << OP_TRUE; - auto ptemplate = BlockAssembler(config, g_mempool).CreateNewBlock(pubKey); + auto ptemplate = BlockAssembler(config, mempool).CreateNewBlock(pubKey); auto pblock = std::make_shared(ptemplate->block); pblock->hashPrevBlock = prev_hash; pblock->nTime = ++time; @@ -83,15 +83,17 @@ // construct a valid block const std::shared_ptr GoodBlock(const Config &config, + const CTxMemPool &mempool, const BlockHash &prev_hash) { return FinalizeBlock(config.GetChainParams().GetConsensus(), - Block(config, prev_hash)); + Block(config, mempool, prev_hash)); } // construct an invalid block (but with a valid header) const std::shared_ptr BadBlock(const Config &config, + const CTxMemPool &mempool, const BlockHash &prev_hash) { - auto pblock = Block(config, prev_hash); + auto pblock = Block(config, mempool, prev_hash); CMutableTransaction coinbase_spend; coinbase_spend.vin.push_back( @@ -105,7 +107,8 @@ return ret; } -void BuildChain(const Config &config, const BlockHash &root, int height, +void BuildChain(const Config &config, const CTxMemPool &mempool, + const BlockHash &root, int height, const unsigned int invalid_rate, const unsigned int branch_rate, const unsigned int max_size, std::vector> &blocks) { @@ -117,17 +120,18 @@ bool gen_fork = InsecureRandRange(100) < branch_rate; const std::shared_ptr pblock = - gen_invalid ? BadBlock(config, root) : GoodBlock(config, root); + gen_invalid ? BadBlock(config, mempool, root) + : GoodBlock(config, mempool, root); blocks.push_back(pblock); if (!gen_invalid) { - BuildChain(config, pblock->GetHash(), height - 1, invalid_rate, + BuildChain(config, mempool, pblock->GetHash(), height - 1, invalid_rate, branch_rate, max_size, blocks); } if (gen_fork) { - blocks.push_back(GoodBlock(config, root)); - BuildChain(config, blocks.back()->GetHash(), height - 1, invalid_rate, - branch_rate, max_size, blocks); + blocks.push_back(GoodBlock(config, mempool, root)); + BuildChain(config, mempool, blocks.back()->GetHash(), height - 1, + invalid_rate, branch_rate, max_size, blocks); } } @@ -139,8 +143,8 @@ std::vector> blocks; while (blocks.size() < 50) { blocks.clear(); - BuildChain(config, chainParams.GenesisBlock().GetHash(), 100, 15, 10, - 500, blocks); + BuildChain(config, ::g_mempool, chainParams.GenesisBlock().GetHash(), + 100, 15, 10, 500, blocks); } bool ignored;