scriptpubkeyman: Implement GetScriptPubKeys in Legacy
This commit is contained in:
1 parent
e664af2976
commit
ea1ab390e4
3 files changed
+98
-4
No files matched your search
@@ -1658,6 +1658,59 @@ std::set<CKeyID> LegacyScriptPubKeyMan::GetKeys() const
|
|||||||
return set_address;
|
return set_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::unordered_set<CScript, SaltedSipHasher> LegacyScriptPubKeyMan::GetScriptPubKeys() const
|
||||||
|
{
|
||||||
|
LOCK(cs_KeyStore);
|
||||||
|
std::unordered_set<CScript, SaltedSipHasher> spks;
|
||||||
|
|
||||||
|
// All keys have at least P2PK and P2PKH
|
||||||
|
for (const auto& key_pair : mapKeys) {
|
||||||
|
const CPubKey& pub = key_pair.second.GetPubKey();
|
||||||
|
spks.insert(GetScriptForRawPubKey(pub));
|
||||||
|
spks.insert(GetScriptForDestination(PKHash(pub)));
|
||||||
|
}
|
||||||
|
for (const auto& key_pair : mapCryptedKeys) {
|
||||||
|
const CPubKey& pub = key_pair.second.first;
|
||||||
|
spks.insert(GetScriptForRawPubKey(pub));
|
||||||
|
spks.insert(GetScriptForDestination(PKHash(pub)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// For every script in mapScript, only the ISMINE_SPENDABLE ones are being tracked.
|
||||||
|
// The watchonly ones will be in setWatchOnly which we deal with later
|
||||||
|
// For all keys, if they have segwit scripts, those scripts will end up in mapScripts
|
||||||
|
for (const auto& script_pair : mapScripts) {
|
||||||
|
const CScript& script = script_pair.second;
|
||||||
|
if (IsMine(script) == ISMINE_SPENDABLE) {
|
||||||
|
// Add ScriptHash for scripts that are not already P2SH
|
||||||
|
if (!script.IsPayToScriptHash()) {
|
||||||
|
spks.insert(GetScriptForDestination(ScriptHash(script)));
|
||||||
|
}
|
||||||
|
// For segwit scripts, we only consider them spendable if we have the segwit spk
|
||||||
|
int wit_ver = -1;
|
||||||
|
std::vector<unsigned char> witprog;
|
||||||
|
if (script.IsWitnessProgram(wit_ver, witprog) && wit_ver == 0) {
|
||||||
|
spks.insert(script);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Multisigs are special. They don't show up as ISMINE_SPENDABLE unless they are in a P2SH
|
||||||
|
// So check the P2SH of a multisig to see if we should insert it
|
||||||
|
std::vector<std::vector<unsigned char>> sols;
|
||||||
|
TxoutType type = Solver(script, sols);
|
||||||
|
if (type == TxoutType::MULTISIG) {
|
||||||
|
CScript ms_spk = GetScriptForDestination(ScriptHash(script));
|
||||||
|
if (IsMine(ms_spk) != ISMINE_NO) {
|
||||||
|
spks.insert(ms_spk);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All watchonly scripts are raw
|
||||||
|
spks.insert(setWatchOnly.begin(), setWatchOnly.end());
|
||||||
|
|
||||||
|
return spks;
|
||||||
|
}
|
||||||
|
|
||||||
util::Result<CTxDestination> DescriptorScriptPubKeyMan::GetNewDestination(const OutputType type)
|
util::Result<CTxDestination> DescriptorScriptPubKeyMan::GetNewDestination(const OutputType type)
|
||||||
{
|
{
|
||||||
// Returns true if this descriptor supports getting new addresses. Conditions where we may be unable to fetch them (e.g. locked) are caught later
|
// Returns true if this descriptor supports getting new addresses. Conditions where we may be unable to fetch them (e.g. locked) are caught later
|
||||||
@@ -2327,14 +2380,14 @@ const WalletDescriptor DescriptorScriptPubKeyMan::GetWalletDescriptor() const
|
|||||||
return m_wallet_descriptor;
|
return m_wallet_descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<CScript> DescriptorScriptPubKeyMan::GetScriptPubKeys() const
|
const std::unordered_set<CScript, SaltedSipHasher> DescriptorScriptPubKeyMan::GetScriptPubKeys() const
|
||||||
{
|
{
|
||||||
LOCK(cs_desc_man);
|
LOCK(cs_desc_man);
|
||||||
std::vector<CScript> script_pub_keys;
|
std::unordered_set<CScript, SaltedSipHasher> script_pub_keys;
|
||||||
script_pub_keys.reserve(m_map_script_pub_keys.size());
|
script_pub_keys.reserve(m_map_script_pub_keys.size());
|
||||||
|
|
||||||
for (auto const& script_pub_key: m_map_script_pub_keys) {
|
for (auto const& script_pub_key: m_map_script_pub_keys) {
|
||||||
script_pub_keys.push_back(script_pub_key.first);
|
script_pub_keys.insert(script_pub_key.first);
|
||||||
}
|
}
|
||||||
return script_pub_keys;
|
return script_pub_keys;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,6 +242,9 @@ public:
|
|||||||
|
|
||||||
virtual uint256 GetID() const { return uint256(); }
|
virtual uint256 GetID() const { return uint256(); }
|
||||||
|
|
||||||
|
/** Returns a set of all the scriptPubKeys that this ScriptPubKeyMan watches */
|
||||||
|
virtual const std::unordered_set<CScript, SaltedSipHasher> GetScriptPubKeys() const { return {}; };
|
||||||
|
|
||||||
/** Prepends the wallet name in logging output to ease debugging in multi-wallet use cases */
|
/** Prepends the wallet name in logging output to ease debugging in multi-wallet use cases */
|
||||||
template<typename... Params>
|
template<typename... Params>
|
||||||
void WalletLogPrintf(std::string fmt, Params... parameters) const {
|
void WalletLogPrintf(std::string fmt, Params... parameters) const {
|
||||||
@@ -507,6 +510,7 @@ public:
|
|||||||
const std::map<CKeyID, int64_t>& GetAllReserveKeys() const { return m_pool_key_to_index; }
|
const std::map<CKeyID, int64_t>& GetAllReserveKeys() const { return m_pool_key_to_index; }
|
||||||
|
|
||||||
std::set<CKeyID> GetKeys() const override;
|
std::set<CKeyID> GetKeys() const override;
|
||||||
|
const std::unordered_set<CScript, SaltedSipHasher> GetScriptPubKeys() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Wraps a LegacyScriptPubKeyMan so that it can be returned in a new unique_ptr. Does not provide privkeys */
|
/** Wraps a LegacyScriptPubKeyMan so that it can be returned in a new unique_ptr. Does not provide privkeys */
|
||||||
@@ -630,7 +634,7 @@ public:
|
|||||||
void WriteDescriptor();
|
void WriteDescriptor();
|
||||||
|
|
||||||
const WalletDescriptor GetWalletDescriptor() const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man);
|
const WalletDescriptor GetWalletDescriptor() const EXCLUSIVE_LOCKS_REQUIRED(cs_desc_man);
|
||||||
const std::vector<CScript> GetScriptPubKeys() const;
|
const std::unordered_set<CScript, SaltedSipHasher> GetScriptPubKeys() const override;
|
||||||
|
|
||||||
bool GetDescriptorString(std::string& out, const bool priv) const;
|
bool GetDescriptorString(std::string& out, const bool priv) const;
|
||||||
|
|
||||||
|
|||||||
@@ -43,11 +43,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have key
|
// Keystore does not have key
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has key
|
// Keystore has key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2PK uncompressed
|
// P2PK uncompressed
|
||||||
@@ -60,11 +62,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have key
|
// Keystore does not have key
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has key
|
// Keystore has key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2PKH compressed
|
// P2PKH compressed
|
||||||
@@ -77,11 +81,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have key
|
// Keystore does not have key
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has key
|
// Keystore has key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2PKH uncompressed
|
// P2PKH uncompressed
|
||||||
@@ -94,11 +100,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have key
|
// Keystore does not have key
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has key
|
// Keystore has key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2SH
|
// P2SH
|
||||||
@@ -113,16 +121,19 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have redeemScript or key
|
// Keystore does not have redeemScript or key
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has redeemScript but no key
|
// Keystore has redeemScript but no key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has redeemScript and key
|
// Keystore has redeemScript and key
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// (P2PKH inside) P2SH inside P2SH (invalid)
|
// (P2PKH inside) P2SH inside P2SH (invalid)
|
||||||
@@ -141,6 +152,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// (P2PKH inside) P2SH inside P2WSH (invalid)
|
// (P2PKH inside) P2SH inside P2WSH (invalid)
|
||||||
@@ -159,6 +171,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WPKH inside P2WSH (invalid)
|
// P2WPKH inside P2WSH (invalid)
|
||||||
@@ -175,6 +188,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// (P2PKH inside) P2WSH inside P2WSH (invalid)
|
// (P2PKH inside) P2WSH inside P2WSH (invalid)
|
||||||
@@ -193,6 +207,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WPKH compressed
|
// P2WPKH compressed
|
||||||
@@ -208,6 +223,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WPKH uncompressed
|
// P2WPKH uncompressed
|
||||||
@@ -222,11 +238,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore has key, but no P2SH redeemScript
|
// Keystore has key, but no P2SH redeemScript
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has key and P2SH redeemScript
|
// Keystore has key and P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// scriptPubKey multisig
|
// scriptPubKey multisig
|
||||||
@@ -240,24 +258,28 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore does not have any keys
|
// Keystore does not have any keys
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has 1/2 keys
|
// Keystore has 1/2 keys
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(uncompressedKey));
|
||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has 2/2 keys
|
// Keystore has 2/2 keys
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));
|
||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has 2/2 keys and the script
|
// Keystore has 2/2 keys and the script
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2SH multisig
|
// P2SH multisig
|
||||||
@@ -274,11 +296,13 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore has no redeemScript
|
// Keystore has no redeemScript
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has redeemScript
|
// Keystore has redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WSH multisig with compressed keys
|
// P2WSH multisig with compressed keys
|
||||||
@@ -295,16 +319,19 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore has keys, but no witnessScript or P2SH redeemScript
|
// Keystore has keys, but no witnessScript or P2SH redeemScript
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has keys and witnessScript, but no P2SH redeemScript
|
// Keystore has keys and witnessScript, but no P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has keys, witnessScript, P2SH redeemScript
|
// Keystore has keys, witnessScript, P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WSH multisig with uncompressed key
|
// P2WSH multisig with uncompressed key
|
||||||
@@ -321,16 +348,19 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore has keys, but no witnessScript or P2SH redeemScript
|
// Keystore has keys, but no witnessScript or P2SH redeemScript
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has keys and witnessScript, but no P2SH redeemScript
|
// Keystore has keys and witnessScript, but no P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has keys, witnessScript, P2SH redeemScript
|
// Keystore has keys, witnessScript, P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(scriptPubKey));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// P2WSH multisig wrapped in P2SH
|
// P2WSH multisig wrapped in P2SH
|
||||||
@@ -346,18 +376,21 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
// Keystore has no witnessScript, P2SH redeemScript, or keys
|
// Keystore has no witnessScript, P2SH redeemScript, or keys
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has witnessScript and P2SH redeemScript, but no keys
|
// Keystore has witnessScript and P2SH redeemScript, but no keys
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(redeemScript));
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddCScript(witnessScript));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
|
|
||||||
// Keystore has keys, witnessScript, P2SH redeemScript
|
// Keystore has keys, witnessScript, P2SH redeemScript
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[0]));
|
||||||
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->AddKey(keys[1]));
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
BOOST_CHECK_EQUAL(result, ISMINE_SPENDABLE);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// OP_RETURN
|
// OP_RETURN
|
||||||
@@ -372,6 +405,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// witness unspendable
|
// witness unspendable
|
||||||
@@ -386,6 +420,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// witness unknown
|
// witness unknown
|
||||||
@@ -400,6 +435,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nonstandard
|
// Nonstandard
|
||||||
@@ -414,6 +450,7 @@ BOOST_AUTO_TEST_CASE(ismine_standard)
|
|||||||
|
|
||||||
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
result = keystore.GetLegacyScriptPubKeyMan()->IsMine(scriptPubKey);
|
||||||
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
BOOST_CHECK_EQUAL(result, ISMINE_NO);
|
||||||
|
BOOST_CHECK(keystore.GetLegacyScriptPubKeyMan()->GetScriptPubKeys().count(scriptPubKey) == 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user