mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 23:07:59 +01:00
Add IsSingleType to Descriptors
IsSingleType will return whether the descriptor will give one or multiple scriptPubKeys
This commit is contained in:
parent
953feb3d27
commit
d1ec3e4f19
2 changed files with 12 additions and 0 deletions
|
@ -575,6 +575,7 @@ public:
|
||||||
default: return nullopt;
|
default: return nullopt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed raw(H) descriptor. */
|
/** A parsed raw(H) descriptor. */
|
||||||
|
@ -602,6 +603,7 @@ public:
|
||||||
default: return nullopt;
|
default: return nullopt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed pk(P) descriptor. */
|
/** A parsed pk(P) descriptor. */
|
||||||
|
@ -611,6 +613,7 @@ protected:
|
||||||
std::vector<CScript> MakeScripts(const std::vector<CPubKey>& keys, const CScript*, FlatSigningProvider&) const override { return Vector(GetScriptForRawPubKey(keys[0])); }
|
std::vector<CScript> MakeScripts(const std::vector<CPubKey>& keys, const CScript*, FlatSigningProvider&) const override { return Vector(GetScriptForRawPubKey(keys[0])); }
|
||||||
public:
|
public:
|
||||||
PKDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "pk") {}
|
PKDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "pk") {}
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed pkh(P) descriptor. */
|
/** A parsed pkh(P) descriptor. */
|
||||||
|
@ -626,6 +629,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
PKHDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "pkh") {}
|
PKHDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "pkh") {}
|
||||||
Optional<OutputType> GetOutputType() const override { return OutputType::LEGACY; }
|
Optional<OutputType> GetOutputType() const override { return OutputType::LEGACY; }
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed wpkh(P) descriptor. */
|
/** A parsed wpkh(P) descriptor. */
|
||||||
|
@ -641,6 +645,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
WPKHDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "wpkh") {}
|
WPKHDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "wpkh") {}
|
||||||
Optional<OutputType> GetOutputType() const override { return OutputType::BECH32; }
|
Optional<OutputType> GetOutputType() const override { return OutputType::BECH32; }
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed combo(P) descriptor. */
|
/** A parsed combo(P) descriptor. */
|
||||||
|
@ -664,6 +669,7 @@ protected:
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
ComboDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "combo") {}
|
ComboDescriptor(std::unique_ptr<PubkeyProvider> prov) : DescriptorImpl(Vector(std::move(prov)), {}, "combo") {}
|
||||||
|
bool IsSingleType() const final { return false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed multi(...) or sortedmulti(...) descriptor */
|
/** A parsed multi(...) or sortedmulti(...) descriptor */
|
||||||
|
@ -683,6 +689,7 @@ protected:
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
MultisigDescriptor(int threshold, std::vector<std::unique_ptr<PubkeyProvider>> providers, bool sorted = false) : DescriptorImpl(std::move(providers), {}, sorted ? "sortedmulti" : "multi"), m_threshold(threshold), m_sorted(sorted) {}
|
MultisigDescriptor(int threshold, std::vector<std::unique_ptr<PubkeyProvider>> providers, bool sorted = false) : DescriptorImpl(std::move(providers), {}, sorted ? "sortedmulti" : "multi"), m_threshold(threshold), m_sorted(sorted) {}
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed sh(...) descriptor. */
|
/** A parsed sh(...) descriptor. */
|
||||||
|
@ -699,6 +706,7 @@ public:
|
||||||
if (m_subdescriptor_arg->GetOutputType() == OutputType::BECH32) return OutputType::P2SH_SEGWIT;
|
if (m_subdescriptor_arg->GetOutputType() == OutputType::BECH32) return OutputType::P2SH_SEGWIT;
|
||||||
return OutputType::LEGACY;
|
return OutputType::LEGACY;
|
||||||
}
|
}
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A parsed wsh(...) descriptor. */
|
/** A parsed wsh(...) descriptor. */
|
||||||
|
@ -709,6 +717,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
WSHDescriptor(std::unique_ptr<DescriptorImpl> desc) : DescriptorImpl({}, std::move(desc), "wsh") {}
|
WSHDescriptor(std::unique_ptr<DescriptorImpl> desc) : DescriptorImpl({}, std::move(desc), "wsh") {}
|
||||||
Optional<OutputType> GetOutputType() const override { return OutputType::BECH32; }
|
Optional<OutputType> GetOutputType() const override { return OutputType::BECH32; }
|
||||||
|
bool IsSingleType() const final { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -87,6 +87,9 @@ struct Descriptor {
|
||||||
/** 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;
|
||||||
|
|
||||||
|
/** Whether this descriptor will return one scriptPubKey or multiple (aka is or is not combo) */
|
||||||
|
virtual bool IsSingleType() const = 0;
|
||||||
|
|
||||||
/** Convert the descriptor to a private string. This fails if the provided provider does not have the relevant private keys. */
|
/** Convert the descriptor to a private string. This fails if the provided provider does not have the relevant private keys. */
|
||||||
virtual bool ToPrivateString(const SigningProvider& provider, std::string& out) const = 0;
|
virtual bool ToPrivateString(const SigningProvider& provider, std::string& out) const = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue