From b81ebff0d99c45c071b999796b8ae3f0f2517b22 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Tue, 8 Aug 2023 10:35:08 -0400 Subject: [PATCH] Remove ScriptHash from CScriptID constructor Replaces the constructor in CScriptID that converts a ScriptHash with a function ToScriptID that does the same. This prepares for a move of CScriptID to avoid a circular dependency. --- src/script/signingprovider.cpp | 2 +- src/script/standard.cpp | 6 +++++- src/script/standard.h | 3 +-- src/wallet/rpc/addresses.cpp | 3 +-- src/wallet/rpc/coins.cpp | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/script/signingprovider.cpp b/src/script/signingprovider.cpp index ef055573b97..fb5ae79c19f 100644 --- a/src/script/signingprovider.cpp +++ b/src/script/signingprovider.cpp @@ -205,7 +205,7 @@ CKeyID GetKeyForDestination(const SigningProvider& store, const CTxDestination& } if (auto script_hash = std::get_if(&dest)) { CScript script; - CScriptID script_id(*script_hash); + CScriptID script_id = ToScriptID(*script_hash); CTxDestination inner_dest; if (store.GetCScript(script_id, script) && ExtractDestination(script, inner_dest)) { if (auto inner_witness_id = std::get_if(&inner_dest)) { diff --git a/src/script/standard.cpp b/src/script/standard.cpp index 7c4a05b6e69..e13784e0fc3 100644 --- a/src/script/standard.cpp +++ b/src/script/standard.cpp @@ -17,7 +17,6 @@ typedef std::vector valtype; CScriptID::CScriptID(const CScript& in) : BaseHash(Hash160(in)) {} -CScriptID::CScriptID(const ScriptHash& in) : BaseHash(static_cast(in)) {} ScriptHash::ScriptHash(const CScript& in) : BaseHash(Hash160(in)) {} ScriptHash::ScriptHash(const CScriptID& in) : BaseHash(static_cast(in)) {} @@ -38,6 +37,11 @@ CKeyID ToKeyID(const WitnessV0KeyHash& key_hash) return CKeyID{static_cast(key_hash)}; } +CScriptID ToScriptID(const ScriptHash& script_hash) +{ + return CScriptID{static_cast(script_hash)}; +} + WitnessV0ScriptHash::WitnessV0ScriptHash(const CScript& in) { CSHA256().Write(in.data(), in.size()).Finalize(begin()); diff --git a/src/script/standard.h b/src/script/standard.h index 54065f6e302..3e60ea453db 100644 --- a/src/script/standard.h +++ b/src/script/standard.h @@ -20,7 +20,6 @@ static const bool DEFAULT_ACCEPT_DATACARRIER = true; class CKeyID; class CScript; -struct ScriptHash; /** A reference to a CScript: the Hash160 of its serialization (see script.h) */ class CScriptID : public BaseHash @@ -29,7 +28,6 @@ public: CScriptID() : BaseHash() {} explicit CScriptID(const CScript& in); explicit CScriptID(const uint160& in) : BaseHash(in) {} - explicit CScriptID(const ScriptHash& in); }; /** @@ -80,6 +78,7 @@ struct ScriptHash : public BaseHash explicit ScriptHash(const CScript& script); explicit ScriptHash(const CScriptID& script); }; +CScriptID ToScriptID(const ScriptHash& script_hash); struct WitnessV0ScriptHash : public BaseHash { diff --git a/src/wallet/rpc/addresses.cpp b/src/wallet/rpc/addresses.cpp index a8ef0a5731f..06f396a6d7c 100644 --- a/src/wallet/rpc/addresses.cpp +++ b/src/wallet/rpc/addresses.cpp @@ -440,10 +440,9 @@ public: UniValue operator()(const ScriptHash& scripthash) const { - CScriptID scriptID(scripthash); UniValue obj(UniValue::VOBJ); CScript subscript; - if (provider && provider->GetCScript(scriptID, subscript)) { + if (provider && provider->GetCScript(ToScriptID(scripthash), subscript)) { ProcessSubScript(subscript, obj); } return obj; diff --git a/src/wallet/rpc/coins.cpp b/src/wallet/rpc/coins.cpp index 22f0f0b83c5..521378e188c 100644 --- a/src/wallet/rpc/coins.cpp +++ b/src/wallet/rpc/coins.cpp @@ -672,7 +672,7 @@ RPCHelpMan listunspent() std::unique_ptr provider = pwallet->GetSolvingProvider(scriptPubKey); if (provider) { if (scriptPubKey.IsPayToScriptHash()) { - const CScriptID& hash = CScriptID(std::get(address)); + const CScriptID hash = ToScriptID(std::get(address)); CScript redeemScript; if (provider->GetCScript(hash, redeemScript)) { entry.pushKV("redeemScript", HexStr(redeemScript));