diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index 44e6112f2d..adb5d20edb 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -251,7 +251,7 @@ class DescriptorImpl : public Descriptor return false; } - bool ToPrivateString(const SigningProvider& arg, std::string& out) const final + bool ToStringHelper(const SigningProvider* arg, std::string& out, bool priv) const { std::string extra = ToStringExtra(); size_t pos = extra.size() > 0 ? 1 : 0; @@ -259,13 +259,17 @@ class DescriptorImpl : public Descriptor for (const auto& pubkey : m_pubkey_args) { if (pos++) ret += ","; std::string tmp; - if (!pubkey->ToPrivateString(arg, tmp)) return false; + if (priv) { + if (!pubkey->ToPrivateString(*arg, tmp)) return false; + } else { + tmp = pubkey->ToString(); + } ret += std::move(tmp); } if (m_script_arg) { if (pos++) ret += ","; std::string tmp; - if (!m_script_arg->ToPrivateString(arg, tmp)) return false; + if (!m_script_arg->ToStringHelper(arg, tmp, priv)) return false; ret += std::move(tmp); } out = std::move(ret) + ")"; @@ -274,20 +278,13 @@ class DescriptorImpl : public Descriptor std::string ToString() const final { - std::string extra = ToStringExtra(); - size_t pos = extra.size() > 0 ? 1 : 0; - std::string ret = m_name + "(" + extra; - for (const auto& pubkey : m_pubkey_args) { - if (pos++) ret += ","; - ret += pubkey->ToString(); - } - if (m_script_arg) { - if (pos++) ret += ","; - ret += m_script_arg->ToString(); - } - return std::move(ret) + ")"; + std::string ret; + ToStringHelper(nullptr, ret, false); + return ret; } + bool ToPrivateString(const SigningProvider& arg, std::string& out) const override final { return ToStringHelper(&arg, out, true); } + bool Expand(int pos, const SigningProvider& arg, std::vector& output_scripts, FlatSigningProvider& out) const final { std::vector> entries;