mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-20 10:38:42 +01:00
Add Descriptor::IsSolvable() to distinguish addr/raw from others
This commit is contained in:
parent
4d78bd93b5
commit
225bf3e3b0
@ -211,6 +211,7 @@ public:
|
|||||||
AddressDescriptor(CTxDestination destination) : m_destination(std::move(destination)) {}
|
AddressDescriptor(CTxDestination destination) : m_destination(std::move(destination)) {}
|
||||||
|
|
||||||
bool IsRange() const override { return false; }
|
bool IsRange() const override { return false; }
|
||||||
|
bool IsSolvable() const override { return false; }
|
||||||
std::string ToString() const override { return "addr(" + EncodeDestination(m_destination) + ")"; }
|
std::string ToString() const override { return "addr(" + EncodeDestination(m_destination) + ")"; }
|
||||||
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override { out = ToString(); return true; }
|
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override { out = ToString(); return true; }
|
||||||
bool Expand(int pos, const SigningProvider& arg, std::vector<CScript>& output_scripts, FlatSigningProvider& out) const override
|
bool Expand(int pos, const SigningProvider& arg, std::vector<CScript>& output_scripts, FlatSigningProvider& out) const override
|
||||||
@ -229,6 +230,7 @@ public:
|
|||||||
RawDescriptor(CScript script) : m_script(std::move(script)) {}
|
RawDescriptor(CScript script) : m_script(std::move(script)) {}
|
||||||
|
|
||||||
bool IsRange() const override { return false; }
|
bool IsRange() const override { return false; }
|
||||||
|
bool IsSolvable() const override { return false; }
|
||||||
std::string ToString() const override { return "raw(" + HexStr(m_script.begin(), m_script.end()) + ")"; }
|
std::string ToString() const override { return "raw(" + HexStr(m_script.begin(), m_script.end()) + ")"; }
|
||||||
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override { out = ToString(); return true; }
|
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override { out = ToString(); return true; }
|
||||||
bool Expand(int pos, const SigningProvider& arg, std::vector<CScript>& output_scripts, FlatSigningProvider& out) const override
|
bool Expand(int pos, const SigningProvider& arg, std::vector<CScript>& output_scripts, FlatSigningProvider& out) const override
|
||||||
@ -249,6 +251,7 @@ public:
|
|||||||
SingleKeyDescriptor(std::unique_ptr<PubkeyProvider> prov, const std::function<CScript(const CPubKey&)>& fn, const std::string& name) : m_script_fn(fn), m_fn_name(name), m_provider(std::move(prov)) {}
|
SingleKeyDescriptor(std::unique_ptr<PubkeyProvider> prov, const std::function<CScript(const CPubKey&)>& fn, const std::string& name) : m_script_fn(fn), m_fn_name(name), m_provider(std::move(prov)) {}
|
||||||
|
|
||||||
bool IsRange() const override { return m_provider->IsRange(); }
|
bool IsRange() const override { return m_provider->IsRange(); }
|
||||||
|
bool IsSolvable() const override { return true; }
|
||||||
std::string ToString() const override { return m_fn_name + "(" + m_provider->ToString() + ")"; }
|
std::string ToString() const override { return m_fn_name + "(" + m_provider->ToString() + ")"; }
|
||||||
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
||||||
{
|
{
|
||||||
@ -290,6 +293,8 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsSolvable() const override { return true; }
|
||||||
|
|
||||||
std::string ToString() const override
|
std::string ToString() const override
|
||||||
{
|
{
|
||||||
std::string ret = strprintf("multi(%i", m_threshold);
|
std::string ret = strprintf("multi(%i", m_threshold);
|
||||||
@ -343,6 +348,7 @@ public:
|
|||||||
ConvertorDescriptor(std::unique_ptr<Descriptor> descriptor, const std::function<CScript(const CScript&)>& fn, const std::string& name) : m_convert_fn(fn), m_fn_name(name), m_descriptor(std::move(descriptor)) {}
|
ConvertorDescriptor(std::unique_ptr<Descriptor> descriptor, const std::function<CScript(const CScript&)>& fn, const std::string& name) : m_convert_fn(fn), m_fn_name(name), m_descriptor(std::move(descriptor)) {}
|
||||||
|
|
||||||
bool IsRange() const override { return m_descriptor->IsRange(); }
|
bool IsRange() const override { return m_descriptor->IsRange(); }
|
||||||
|
bool IsSolvable() const override { return m_descriptor->IsSolvable(); }
|
||||||
std::string ToString() const override { return m_fn_name + "(" + m_descriptor->ToString() + ")"; }
|
std::string ToString() const override { return m_fn_name + "(" + m_descriptor->ToString() + ")"; }
|
||||||
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
||||||
{
|
{
|
||||||
@ -377,6 +383,7 @@ public:
|
|||||||
ComboDescriptor(std::unique_ptr<PubkeyProvider> provider) : m_provider(std::move(provider)) {}
|
ComboDescriptor(std::unique_ptr<PubkeyProvider> provider) : m_provider(std::move(provider)) {}
|
||||||
|
|
||||||
bool IsRange() const override { return m_provider->IsRange(); }
|
bool IsRange() const override { return m_provider->IsRange(); }
|
||||||
|
bool IsSolvable() const override { return true; }
|
||||||
std::string ToString() const override { return "combo(" + m_provider->ToString() + ")"; }
|
std::string ToString() const override { return "combo(" + m_provider->ToString() + ")"; }
|
||||||
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
bool ToPrivateString(const SigningProvider& arg, std::string& out) const override
|
||||||
{
|
{
|
||||||
|
@ -32,6 +32,10 @@ struct Descriptor {
|
|||||||
/** Whether the expansion of this descriptor depends on the position. */
|
/** Whether the expansion of this descriptor depends on the position. */
|
||||||
virtual bool IsRange() const = 0;
|
virtual bool IsRange() const = 0;
|
||||||
|
|
||||||
|
/** Whether this descriptor has all information about signing ignoring lack of private keys.
|
||||||
|
* This is true for all descriptors except ones that use `raw` or `addr` constructions. */
|
||||||
|
virtual bool IsSolvable() const = 0;
|
||||||
|
|
||||||
/** Convert the descriptor back to a string, undoing parsing. */
|
/** Convert the descriptor back to a string, undoing parsing. */
|
||||||
virtual std::string ToString() const = 0;
|
virtual std::string ToString() const = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user