Changeset View
Changeset View
Standalone View
Standalone View
src/test/util/mining.cpp
// Copyright (c) 2019 The Bitcoin Core developers | // Copyright (c) 2019 The Bitcoin Core developers | ||||
// 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 <test/util/mining.h> | #include <test/util/mining.h> | ||||
#include <chainparams.h> | #include <chainparams.h> | ||||
#include <config.h> | #include <config.h> | ||||
#include <consensus/merkle.h> | #include <consensus/merkle.h> | ||||
#include <key_io.h> | #include <key_io.h> | ||||
#include <miner.h> | #include <miner.h> | ||||
#include <node/context.h> | #include <node/context.h> | ||||
#include <pow/pow.h> | #include <pow/pow.h> | ||||
#include <script/standard.h> | #include <script/standard.h> | ||||
#include <util/check.h> | |||||
#include <validation.h> | #include <validation.h> | ||||
const std::string ADDRESS_BCHREG_UNSPENDABLE = | const std::string ADDRESS_BCHREG_UNSPENDABLE = | ||||
"bchreg:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqha9s37tt"; | "bchreg:qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqha9s37tt"; | ||||
CTxIn generatetoaddress(const Config &config, const NodeContext &node, | CTxIn generatetoaddress(const Config &config, const NodeContext &node, | ||||
const std::string &address) { | const std::string &address) { | ||||
const auto dest = DecodeDestination(address, config.GetChainParams()); | const auto dest = DecodeDestination(address, config.GetChainParams()); | ||||
Show All 9 Lines | CTxIn MineBlock(const Config &config, const NodeContext &node, | ||||
while (!CheckProofOfWork(block->GetHash(), block->nBits, | while (!CheckProofOfWork(block->GetHash(), block->nBits, | ||||
config.GetChainParams().GetConsensus())) { | config.GetChainParams().GetConsensus())) { | ||||
++block->nNonce; | ++block->nNonce; | ||||
assert(block->nNonce); | assert(block->nNonce); | ||||
} | } | ||||
bool processed{ | bool processed{ | ||||
EnsureChainman(node).ProcessNewBlock(config, block, true, nullptr)}; | Assert(node.chainman)->ProcessNewBlock(config, block, true, nullptr)}; | ||||
assert(processed); | assert(processed); | ||||
return CTxIn{block->vtx[0]->GetId(), 0}; | return CTxIn{block->vtx[0]->GetId(), 0}; | ||||
} | } | ||||
std::shared_ptr<CBlock> PrepareBlock(const Config &config, | std::shared_ptr<CBlock> PrepareBlock(const Config &config, | ||||
const NodeContext &node, | const NodeContext &node, | ||||
const CScript &coinbase_scriptPubKey) { | const CScript &coinbase_scriptPubKey) { | ||||
assert(node.mempool); | |||||
auto block = | auto block = | ||||
std::make_shared<CBlock>(BlockAssembler{config, *node.mempool} | std::make_shared<CBlock>(BlockAssembler{config, *Assert(node.mempool)} | ||||
.CreateNewBlock(coinbase_scriptPubKey) | .CreateNewBlock(coinbase_scriptPubKey) | ||||
->block); | ->block); | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
block->nTime = ::ChainActive().Tip()->GetMedianTimePast() + 1; | block->nTime = ::ChainActive().Tip()->GetMedianTimePast() + 1; | ||||
block->hashMerkleRoot = BlockMerkleRoot(*block); | block->hashMerkleRoot = BlockMerkleRoot(*block); | ||||
return block; | return block; | ||||
} | } |