git / moonbite-core / src/test/util/mining.cpp · raw

// 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 <node/context.h>#include <pow.h>#include <script/standard.h>#include <util/check.h>#include <validation.h>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(node, coinbase_script);}CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey){    auto block = PrepareBlock(node, coinbase_scriptPubKey);    while (!CheckProofOfWork(block->GetPoWHash(), block->nBits, Params().GetConsensus())) {        ++block->nNonce;        assert(block->nNonce);    }    bool processed{Assert(node.chainman)->ProcessNewBlock(Params(), block, true, nullptr)};    assert(processed);    return CTxIn{block->vtx[0]->GetHash(), 0};}std::shared_ptr<CBlock> PrepareBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey){    auto block = std::make_shared<CBlock>(        BlockAssembler{*Assert(node.mempool), Params()}            .CreateNewBlock(coinbase_scriptPubKey)            ->block);    LOCK(cs_main);    block->nTime = ::ChainActive().Tip()->GetMedianTimePast() + 1;    block->hashMerkleRoot = BlockMerkleRoot(*block);    return block;}