Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/test/scriptpubkeyman_tests.cpp
- This file was added.
// Copyright (c) 2020 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 <chainparams.h> | |||||
#include <key.h> | |||||
#include <script/standard.h> | |||||
#include <test/util/setup_common.h> | |||||
#include <wallet/scriptpubkeyman.h> | |||||
#include <wallet/wallet.h> | |||||
#include <boost/test/unit_test.hpp> | |||||
BOOST_FIXTURE_TEST_SUITE(scriptpubkeyman_tests, BasicTestingSetup) | |||||
// Test LegacyScriptPubKeyMan::CanProvide behavior, making sure it returns true | |||||
// for recognized scripts even when keys may not be available for signing. | |||||
BOOST_AUTO_TEST_CASE(CanProvide) { | |||||
// Set up wallet and keyman variables. | |||||
NodeContext node; | |||||
std::unique_ptr<interfaces::Chain> chain = | |||||
interfaces::MakeChain(node, Params()); | |||||
CWallet wallet(chain.get(), WalletLocation(), | |||||
WalletDatabase::CreateDummy()); | |||||
LegacyScriptPubKeyMan &keyman = *wallet.GetOrCreateLegacyScriptPubKeyMan(); | |||||
// Make a 1 of 2 multisig script | |||||
std::vector<CKey> keys(2); | |||||
std::vector<CPubKey> pubkeys; | |||||
for (CKey &key : keys) { | |||||
key.MakeNewKey(true); | |||||
pubkeys.emplace_back(key.GetPubKey()); | |||||
} | |||||
CScript multisig_script = GetScriptForMultisig(1, pubkeys); | |||||
CScript p2sh_script = GetScriptForDestination(ScriptHash(multisig_script)); | |||||
SignatureData data; | |||||
// Verify the p2sh(multisig) script is not recognized until the multisig | |||||
// script is added to the keystore to make it solvable | |||||
BOOST_CHECK(!keyman.CanProvide(p2sh_script, data)); | |||||
keyman.AddCScript(multisig_script); | |||||
BOOST_CHECK(keyman.CanProvide(p2sh_script, data)); | |||||
} | |||||
BOOST_AUTO_TEST_SUITE_END() |