From 75e857754de5c47ec4641147b810c32272f04870 Mon Sep 17 00:00:00 2001 From: Peter Shugalev Date: Fri, 26 Jan 2024 12:36:58 +0100 Subject: [PATCH] Allow validateaddress to print hdkeypath for exchange addresses --- src/base58.cpp | 11 +++++++++++ src/base58.h | 1 + src/rpc/misc.cpp | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/base58.cpp b/src/base58.cpp index 7044503063..47fc8e12c2 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -320,6 +320,17 @@ bool CBitcoinAddress::GetKeyID(CKeyID& keyID) const return true; } +bool CBitcoinAddress::GetKeyIDExt(CKeyID& keyID) const +{ + if (!IsValid() || !(vchVersion == Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS) || + vchVersion == Params().Base58Prefix(CChainParams::EXCHANGE_PUBKEY_ADDRESS))) + return false; + uint160 id; + memcpy(&id, &vchData[0], 20); + keyID = CKeyID(id); + return true; +} + bool CBitcoinAddress::IsScript() const { return IsValid() && vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); diff --git a/src/base58.h b/src/base58.h index 1ea609ae40..4f2789c0c1 100644 --- a/src/base58.h +++ b/src/base58.h @@ -127,6 +127,7 @@ class CBitcoinAddress : public CBase58Data { CTxDestination Get() const; bool GetIndexKey(uint160& hashBytes, AddressType & type) const; bool GetKeyID(CKeyID &keyID) const; + bool GetKeyIDExt(CKeyID &keyID) const; // same as GetKeyID() but also works in case of exchange address bool IsScript() const; }; diff --git a/src/rpc/misc.cpp b/src/rpc/misc.cpp index bafb94b712..c7142df306 100644 --- a/src/rpc/misc.cpp +++ b/src/rpc/misc.cpp @@ -233,7 +233,7 @@ UniValue validateaddress(const JSONRPCRequest& request) CKeyID keyID; if (pwallet) { const auto& meta = pwallet->mapKeyMetadata; - auto it = address.GetKeyID(keyID) ? meta.find(keyID) : meta.end(); + auto it = address.GetKeyIDExt(keyID) ? meta.find(keyID) : meta.end(); if (it == meta.end()) { it = meta.find(CScriptID(scriptPubKey)); }