legacy spkm: Make IsMine() and CanProvide() private and migration only

This commit is contained in:
Ava Chow committed 2025-05-06 16:53:16 -07:00
1 parent c0f3f3264f
commit 5dff04a1bb
2 files changed
+12 -10

No files matched your search

+8 -6
View File
@@ -28,6 +28,8 @@ namespace wallet {
typedef std::vector<unsigned char> valtype; typedef std::vector<unsigned char> valtype;
// Legacy wallet IsMine(). Used only in migration
// DO NOT USE ANYTHING IN THIS NAMESPACE OUTSIDE OF MIGRATION
namespace { namespace {
/** /**
@@ -79,7 +81,7 @@ bool HaveKeys(const std::vector<valtype>& pubkeys, const LegacyDataSPKM& keystor
//! scripts or simply treat any script that has been //! scripts or simply treat any script that has been
//! stored in the keystore as spendable //! stored in the keystore as spendable
// NOLINTNEXTLINE(misc-no-recursion) // NOLINTNEXTLINE(misc-no-recursion)
IsMineResult IsMineInner(const LegacyDataSPKM& keystore, const CScript& scriptPubKey, IsMineSigVersion sigversion, bool recurse_scripthash=true) IsMineResult LegacyWalletIsMineInnerDONOTUSE(const LegacyDataSPKM& keystore, const CScript& scriptPubKey, IsMineSigVersion sigversion, bool recurse_scripthash=true)
{ {
IsMineResult ret = IsMineResult::NO; IsMineResult ret = IsMineResult::NO;
@@ -115,7 +117,7 @@ IsMineResult IsMineInner(const LegacyDataSPKM& keystore, const CScript& scriptPu
// This also applies to the P2WSH case. // This also applies to the P2WSH case.
break; break;
} }
ret = std::max(ret, IsMineInner(keystore, GetScriptForDestination(PKHash(uint160(vSolutions[0]))), IsMineSigVersion::WITNESS_V0)); ret = std::max(ret, LegacyWalletIsMineInnerDONOTUSE(keystore, GetScriptForDestination(PKHash(uint160(vSolutions[0]))), IsMineSigVersion::WITNESS_V0));
break; break;
} }
case TxoutType::PUBKEYHASH: case TxoutType::PUBKEYHASH:
@@ -139,7 +141,7 @@ IsMineResult IsMineInner(const LegacyDataSPKM& keystore, const CScript& scriptPu
CScriptID scriptID = CScriptID(uint160(vSolutions[0])); CScriptID scriptID = CScriptID(uint160(vSolutions[0]));
CScript subscript; CScript subscript;
if (keystore.GetCScript(scriptID, subscript)) { if (keystore.GetCScript(scriptID, subscript)) {
ret = std::max(ret, recurse_scripthash ? IsMineInner(keystore, subscript, IsMineSigVersion::P2SH) : IsMineResult::SPENDABLE); ret = std::max(ret, recurse_scripthash ? LegacyWalletIsMineInnerDONOTUSE(keystore, subscript, IsMineSigVersion::P2SH) : IsMineResult::SPENDABLE);
} }
break; break;
} }
@@ -155,7 +157,7 @@ IsMineResult IsMineInner(const LegacyDataSPKM& keystore, const CScript& scriptPu
CScriptID scriptID{RIPEMD160(vSolutions[0])}; CScriptID scriptID{RIPEMD160(vSolutions[0])};
CScript subscript; CScript subscript;
if (keystore.GetCScript(scriptID, subscript)) { if (keystore.GetCScript(scriptID, subscript)) {
ret = std::max(ret, recurse_scripthash ? IsMineInner(keystore, subscript, IsMineSigVersion::WITNESS_V0) : IsMineResult::SPENDABLE); ret = std::max(ret, recurse_scripthash ? LegacyWalletIsMineInnerDONOTUSE(keystore, subscript, IsMineSigVersion::WITNESS_V0) : IsMineResult::SPENDABLE);
} }
break; break;
} }
@@ -197,7 +199,7 @@ IsMineResult IsMineInner(const LegacyDataSPKM& keystore, const CScript& scriptPu
isminetype LegacyDataSPKM::IsMine(const CScript& script) const isminetype LegacyDataSPKM::IsMine(const CScript& script) const
{ {
switch (IsMineInner(*this, script, IsMineSigVersion::TOP)) { switch (LegacyWalletIsMineInnerDONOTUSE(*this, script, IsMineSigVersion::TOP)) {
case IsMineResult::INVALID: case IsMineResult::INVALID:
case IsMineResult::NO: case IsMineResult::NO:
return ISMINE_NO; return ISMINE_NO;
@@ -256,7 +258,7 @@ std::unique_ptr<SigningProvider> LegacyDataSPKM::GetSolvingProvider(const CScrip
bool LegacyDataSPKM::CanProvide(const CScript& script, SignatureData& sigdata) bool LegacyDataSPKM::CanProvide(const CScript& script, SignatureData& sigdata)
{ {
IsMineResult ismine = IsMineInner(*this, script, IsMineSigVersion::TOP, /* recurse_scripthash= */ false); IsMineResult ismine = LegacyWalletIsMineInnerDONOTUSE(*this, script, IsMineSigVersion::TOP, /* recurse_scripthash= */ false);
if (ismine == IsMineResult::SPENDABLE || ismine == IsMineResult::WATCH_ONLY) { if (ismine == IsMineResult::SPENDABLE || ismine == IsMineResult::WATCH_ONLY) {
// If ismine, it means we recognize keys or script ids in the script, or // If ismine, it means we recognize keys or script ids in the script, or
// are watching the script itself, and we can at least provide metadata // are watching the script itself, and we can at least provide metadata
+4 -4
View File
@@ -188,7 +188,7 @@ static const std::unordered_set<OutputType> LEGACY_OUTPUT_TYPES {
// This is the minimum necessary to load a legacy wallet so that it can be migrated. // This is the minimum necessary to load a legacy wallet so that it can be migrated.
class LegacyDataSPKM : public ScriptPubKeyMan, public FillableSigningProvider class LegacyDataSPKM : public ScriptPubKeyMan, public FillableSigningProvider
{ {
protected: private:
using WatchOnlySet = std::set<CScript>; using WatchOnlySet = std::set<CScript>;
using WatchKeyMap = std::map<CKeyID, CPubKey>; using WatchKeyMap = std::map<CKeyID, CPubKey>;
using CryptedKeyMap = std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char>>>; using CryptedKeyMap = std::map<CKeyID, std::pair<CPubKey, std::vector<unsigned char>>>;
@@ -212,6 +212,9 @@ protected:
// It may include scripts that are invalid or not actually watched by this LegacyDataSPKM. // It may include scripts that are invalid or not actually watched by this LegacyDataSPKM.
// Used only in migration. // Used only in migration.
std::unordered_set<CScript, SaltedSipHasher> GetCandidateScriptPubKeys() const; std::unordered_set<CScript, SaltedSipHasher> GetCandidateScriptPubKeys() const;
isminetype IsMine(const CScript& script) const override;
bool CanProvide(const CScript& script, SignatureData& sigdata) override;
public: public:
using ScriptPubKeyMan::ScriptPubKeyMan; using ScriptPubKeyMan::ScriptPubKeyMan;
@@ -226,9 +229,6 @@ public:
std::unordered_set<CScript, SaltedSipHasher> GetScriptPubKeys() const override; std::unordered_set<CScript, SaltedSipHasher> GetScriptPubKeys() const override;
std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const override; std::unique_ptr<SigningProvider> GetSolvingProvider(const CScript& script) const override;
uint256 GetID() const override { return uint256::ONE; } uint256 GetID() const override { return uint256::ONE; }
// TODO: Remove IsMine when deleting LegacyScriptPubKeyMan
isminetype IsMine(const CScript& script) const override;
bool CanProvide(const CScript& script, SignatureData& sigdata) override;
// FillableSigningProvider overrides // FillableSigningProvider overrides
bool HaveKey(const CKeyID &address) const override; bool HaveKey(const CKeyID &address) const override;