mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-04 10:07:27 -05:00
f201ba59ff
This moves CWallet members and methods dealing with keys to a new LegacyScriptPubKeyMan class, and updates calling code to reference the new class instead of CWallet. Most of the changes are simple text replacements and variable substitutions easily verified with: git log -p -n1 -U0 --word-diff-regex=. The only nontrivial chunk of code added is the new LegacyScriptPubKeyMan class declaration, but this code isn't new and is just selectively copied and moved from the previous CWallet class declaration. This can be verified with: git log -p -n1 --color-moved=dimmed_zebra src/wallet/scriptpubkeyman.h src/wallet/wallet.h or git diff HEAD~1:src/wallet/wallet.h HEAD:src/wallet/scriptpubkeyman.h This commit does not change behavior.
84 lines
2.4 KiB
C++
84 lines
2.4 KiB
C++
// 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.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
|
|
|
|
const std::string ADDRESS_BCRT1_UNSPENDABLE = "bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj";
|
|
|
|
#ifdef ENABLE_WALLET
|
|
std::string getnewaddress(CWallet& w)
|
|
{
|
|
constexpr auto output_type = OutputType::BECH32;
|
|
CTxDestination dest;
|
|
std::string error;
|
|
if (!w.GetNewDestination(output_type, "", dest, error)) assert(false);
|
|
|
|
return EncodeDestination(dest);
|
|
}
|
|
|
|
void importaddress(CWallet& wallet, const std::string& address)
|
|
{
|
|
auto spk_man = wallet.GetLegacyScriptPubKeyMan();
|
|
LOCK(wallet.cs_wallet);
|
|
AssertLockHeld(spk_man->cs_wallet);
|
|
const auto dest = DecodeDestination(address);
|
|
assert(IsValidDestination(dest));
|
|
const auto script = GetScriptForDestination(dest);
|
|
wallet.MarkDirty();
|
|
assert(!spk_man->HaveWatchOnly(script));
|
|
if (!spk_man->AddWatchOnly(script, 0 /* nCreateTime */)) assert(false);
|
|
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;
|
|
}
|