rpc: Remove mempool global from miner

This commit is contained in:
MarcoFalke
2019-12-17 07:11:44 +07:00
parent 6666ef13f1
commit faa92a2297
13 changed files with 92 additions and 53 deletions

View File

@@ -8,22 +8,23 @@
#include <consensus/merkle.h>
#include <key_io.h>
#include <miner.h>
#include <node/context.h>
#include <pow.h>
#include <script/standard.h>
#include <validation.h>
CTxIn generatetoaddress(const std::string& address)
CTxIn generatetoaddress(const NodeContext& node, const std::string& address)
{
const auto dest = DecodeDestination(address);
assert(IsValidDestination(dest));
const auto coinbase_script = GetScriptForDestination(dest);
return MineBlock(coinbase_script);
return MineBlock(node, coinbase_script);
}
CTxIn MineBlock(const CScript& coinbase_scriptPubKey)
CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
{
auto block = PrepareBlock(coinbase_scriptPubKey);
auto block = PrepareBlock(node, coinbase_scriptPubKey);
while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) {
++block->nNonce;
@@ -36,10 +37,11 @@ CTxIn MineBlock(const CScript& coinbase_scriptPubKey)
return CTxIn{block->vtx[0]->GetHash(), 0};
}
std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey)
std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey)
{
assert(node.mempool);
auto block = std::make_shared<CBlock>(
BlockAssembler{Params()}
BlockAssembler{*node.mempool, Params()}
.CreateNewBlock(coinbase_scriptPubKey)
->block);

View File

@@ -11,14 +11,15 @@
class CBlock;
class CScript;
class CTxIn;
struct NodeContext;
/** Returns the generated coin */
CTxIn MineBlock(const CScript& coinbase_scriptPubKey);
CTxIn MineBlock(const NodeContext&, const CScript& coinbase_scriptPubKey);
/** Prepare a block to be mined */
std::shared_ptr<CBlock> PrepareBlock(const CScript& coinbase_scriptPubKey);
std::shared_ptr<CBlock> PrepareBlock(const NodeContext&, const CScript& coinbase_scriptPubKey);
/** RPC-like helper function, returns the generated coin */
CTxIn generatetoaddress(const std::string& address);
CTxIn generatetoaddress(const NodeContext&, const std::string& address);
#endif // BITCOIN_TEST_UTIL_MINING_H

View File

@@ -175,7 +175,7 @@ TestChain100Setup::TestChain100Setup()
CBlock TestChain100Setup::CreateAndProcessBlock(const std::vector<CMutableTransaction>& txns, const CScript& scriptPubKey)
{
const CChainParams& chainparams = Params();
std::unique_ptr<CBlockTemplate> pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey);
std::unique_ptr<CBlockTemplate> pblocktemplate = BlockAssembler(*m_node.mempool, chainparams).CreateNewBlock(scriptPubKey);
CBlock& block = pblocktemplate->block;
// Replace mempool-selected txns with just coinbase plus passed-in txns: