Branch data Line data Source code
# 1 : : // Copyright (c) 2020 The Bitcoin Core developers # 2 : : // Distributed under the MIT software license, see the accompanying # 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. # 4 : : # 5 : : #include <key.h> # 6 : : #include <script/standard.h> # 7 : : #include <test/util/setup_common.h> # 8 : : #include <wallet/scriptpubkeyman.h> # 9 : : #include <wallet/wallet.h> # 10 : : # 11 : : #include <boost/test/unit_test.hpp> # 12 : : # 13 : : BOOST_FIXTURE_TEST_SUITE(scriptpubkeyman_tests, BasicTestingSetup) # 14 : : # 15 : : // Test LegacyScriptPubKeyMan::CanProvide behavior, making sure it returns true # 16 : : // for recognized scripts even when keys may not be available for signing. # 17 : : BOOST_AUTO_TEST_CASE(CanProvide) # 18 : 1 : { # 19 : : // Set up wallet and keyman variables. # 20 : 1 : CWallet wallet(m_node.chain.get(), "", CreateDummyWalletDatabase()); # 21 : 1 : LegacyScriptPubKeyMan& keyman = *wallet.GetOrCreateLegacyScriptPubKeyMan(); # 22 : : # 23 : : // Make a 1 of 2 multisig script # 24 : 1 : std::vector<CKey> keys(2); # 25 : 1 : std::vector<CPubKey> pubkeys; # 26 [ + + ]: 2 : for (CKey& key : keys) { # 27 : 2 : key.MakeNewKey(true); # 28 : 2 : pubkeys.emplace_back(key.GetPubKey()); # 29 : 2 : } # 30 : 1 : CScript multisig_script = GetScriptForMultisig(1, pubkeys); # 31 : 1 : CScript p2sh_script = GetScriptForDestination(ScriptHash(multisig_script)); # 32 : 1 : SignatureData data; # 33 : : # 34 : : // Verify the p2sh(multisig) script is not recognized until the multisig # 35 : : // script is added to the keystore to make it solvable # 36 : 1 : BOOST_CHECK(!keyman.CanProvide(p2sh_script, data)); # 37 : 1 : keyman.AddCScript(multisig_script); # 38 : 1 : BOOST_CHECK(keyman.CanProvide(p2sh_script, data)); # 39 : 1 : } # 40 : : # 41 : : BOOST_AUTO_TEST_SUITE_END()