From 84097e861d09c48d1e4e3b4a49d0ef78c5d568a4 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> Date: Thu, 28 Oct 2021 14:08:07 +0530 Subject: [PATCH] partial bitcoin#15749: fix importmulti only imports origin info for PKH outputs --- src/script/descriptor.cpp | 2 +- src/script/sign.cpp | 8 +++++++- src/script/sign.h | 2 +- src/test/descriptor_tests.cpp | 4 ++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index d81bfdf1c5cf8..1f761c5fc13a3 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -446,7 +446,7 @@ class DescriptorImpl : public Descriptor pubkeys.reserve(entries.size()); for (auto& entry : entries) { pubkeys.push_back(entry.first); - out.origins.emplace(entry.first.GetID(), std::move(entry.second)); + out.origins.emplace(entry.first.GetID(), std::make_pair(CPubKey(entry.first), std::move(entry.second))); } if (m_script_arg) { for (const auto& subscript : subscripts) { diff --git a/src/script/sign.cpp b/src/script/sign.cpp index 901a6d6328b2a..d6fb44ce4b65f 100644 --- a/src/script/sign.cpp +++ b/src/script/sign.cpp @@ -419,7 +419,13 @@ bool HidingSigningProvider::GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& inf bool FlatSigningProvider::GetCScript(const CScriptID& scriptid, CScript& script) const { return LookupHelper(scripts, scriptid, script); } bool FlatSigningProvider::GetPubKey(const CKeyID& keyid, CPubKey& pubkey) const { return LookupHelper(pubkeys, keyid, pubkey); } -bool FlatSigningProvider::GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const { return LookupHelper(origins, keyid, info); } +bool FlatSigningProvider::GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const +{ + std::pair out; + bool ret = LookupHelper(origins, keyid, out); + if (ret) info = std::move(out.second); + return ret; +} bool FlatSigningProvider::GetKey(const CKeyID& keyid, CKey& key) const { return LookupHelper(keys, keyid, key); } FlatSigningProvider Merge(const FlatSigningProvider& a, const FlatSigningProvider& b) diff --git a/src/script/sign.h b/src/script/sign.h index f18eed5ac4237..8a696ac59f87e 100644 --- a/src/script/sign.h +++ b/src/script/sign.h @@ -63,7 +63,7 @@ struct FlatSigningProvider final : public SigningProvider { std::map scripts; std::map pubkeys; - std::map origins; + std::map> origins; std::map keys; bool GetCScript(const CScriptID& scriptid, CScript& script) const override; diff --git a/src/test/descriptor_tests.cpp b/src/test/descriptor_tests.cpp index fb41e3ac3e148..9de11f4320b8d 100644 --- a/src/test/descriptor_tests.cpp +++ b/src/test/descriptor_tests.cpp @@ -154,8 +154,8 @@ void Check(const std::string& prv, const std::string& pub, int flags, const std: // Test whether the observed key path is present in the 'paths' variable (which contains expected, unobserved paths), // and then remove it from that set. for (const auto& origin : script_provider.origins) { - BOOST_CHECK_MESSAGE(paths.count(origin.second.path), "Unexpected key path: " + prv); - left_paths.erase(origin.second.path); + BOOST_CHECK_MESSAGE(paths.count(origin.second.second.path), "Unexpected key path: " + prv); + left_paths.erase(origin.second.second.path); } } }