aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/external_signer_scriptpubkeyman.cpp
diff options
context:
space:
mode:
authorSjors Provoost <sjors@sprovoost.nl>2021-11-23 16:12:55 +0100
committerSjors Provoost <sjors@sprovoost.nl>2024-04-16 17:47:43 +0200
commitdc55531087478d01fbde4f5fbb75375b672960c3 (patch)
treeefd6e9008f057bfb1599716129fff851b7117e88 /src/wallet/external_signer_scriptpubkeyman.cpp
parent6c1a2cc09a00baa6ff3ff34455c2243b43067fb5 (diff)
downloadbitcoin-dc55531087478d01fbde4f5fbb75375b672960c3.tar.xz
wallet: compare address returned by displayaddress
Update external signer documentation to reflect this requirement, which HWI already implements.
Diffstat (limited to 'src/wallet/external_signer_scriptpubkeyman.cpp')
-rw-r--r--src/wallet/external_signer_scriptpubkeyman.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/wallet/external_signer_scriptpubkeyman.cpp b/src/wallet/external_signer_scriptpubkeyman.cpp
index a71f8f9fbc..ce668539e6 100644
--- a/src/wallet/external_signer_scriptpubkeyman.cpp
+++ b/src/wallet/external_signer_scriptpubkeyman.cpp
@@ -9,6 +9,7 @@
#include <wallet/external_signer_scriptpubkeyman.h>
#include <iostream>
+#include <key_io.h>
#include <memory>
#include <stdexcept>
#include <string>
@@ -51,15 +52,19 @@ ExternalSigner ExternalSignerScriptPubKeyMan::GetExternalSigner() {
return signers[0];
}
-bool ExternalSignerScriptPubKeyMan::DisplayAddress(const CScript scriptPubKey, const ExternalSigner &signer) const
+bool ExternalSignerScriptPubKeyMan::DisplayAddress(const CTxDestination& dest, const ExternalSigner &signer) const
{
// TODO: avoid the need to infer a descriptor from inside a descriptor wallet
+ const CScript& scriptPubKey = GetScriptForDestination(dest);
auto provider = GetSolvingProvider(scriptPubKey);
auto descriptor = InferDescriptor(scriptPubKey, *provider);
- signer.DisplayAddress(descriptor->ToString());
- // TODO inspect result
- return true;
+ const UniValue& result = signer.DisplayAddress(descriptor->ToString());
+
+ const UniValue& ret_address = result.find_value("address");
+ if (!ret_address.isStr()) return false;
+
+ return ret_address.getValStr() == EncodeDestination(dest);
}
// If sign is true, transaction must previously have been filled