5#include <chainparams.h>
25 if (is_ranged.has_value()) {
30 if (is_solvable.has_value()) {
43 std::vector<CScript> out_scripts;
44 (void)desc.
Expand(0, sig_provider, out_scripts, sig_provider, &cache);
49 if (!out_scripts.empty()) {
61 const bool is_nontop_or_nonsolvable{!*is_solvable || !desc.
GetOutputType()};
62 const bool is_input_size_info_set{max_sat_maxsig && max_sat_nonmaxsig && max_elems};
63 assert(is_input_size_info_set || is_nontop_or_nonsolvable);
80 const std::string mocked_descriptor{buffer.begin(), buffer.end()};
85 const auto desc =
Parse(*descriptor, signing_provider, error);
86 std::optional<bool> is_ranged;
87 std::optional<bool> is_solvable;
88 for (
const auto& d : desc) {
90 TestDescriptor(*d, signing_provider, error, is_ranged, is_solvable);
99 const std::string descriptor(buffer.begin(), buffer.end());
102 for (
const bool require_checksum : {
true,
false}) {
103 const auto desc =
Parse(descriptor, signing_provider, error, require_checksum);
104 std::optional<bool> is_ranged;
105 std::optional<bool> is_solvable;
106 for (
const auto& d : desc) {
108 TestDescriptor(*d, signing_provider, error, is_ranged, is_solvable);
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given chain type.
Cache for single descriptor's derived extended pubkeys.
RAII class initializing and deinitializing global state for elliptic curve support.
Converts a mocked descriptor string to a valid one.
void Init()
When initializing the target, populate the list of keys.
std::optional< std::string > GetDescriptor(std::string_view mocked_desc) const
Get an actual descriptor string from a descriptor string whose keys were mocked.
static UniValue Parse(std::string_view raw, ParamFormat format=ParamFormat::JSON)
Parse string to UniValue or throw runtime_error if string contains invalid JSON.
static void TestDescriptor(const Descriptor &desc, FlatSigningProvider &sig_provider, std::string &dummy, std::optional< bool > &is_ranged, std::optional< bool > &is_solvable)
Test a successfully parsed descriptor.
FUZZ_TARGET(mocked_descriptor_parse,.init=initialize_mocked_descriptor_parse)
void initialize_mocked_descriptor_parse()
void initialize_descriptor_parse()
MockedDescriptorConverter MOCKED_DESC_CONVERTER
The converter of mocked descriptors, needs to be initialized when the target is.
std::unique_ptr< Descriptor > InferDescriptor(const CScript &script, const SigningProvider &provider)
Find a descriptor for the specified script, using information from provider where possible.
constexpr auto MakeUCharSpan(const V &v) -> decltype(UCharSpanCast(std::span{v}))
Like the std::span constructor, but for (const) unsigned char member types only.
Interface for parsed descriptor objects.
virtual bool IsSingleType() const =0
Whether this descriptor will return one scriptPubKey or multiple (aka is or is not combo)
virtual std::optional< int64_t > MaxSatisfactionElems() const =0
Get the maximum size number of stack elements for satisfying this descriptor.
virtual bool ToNormalizedString(const SigningProvider &provider, std::string &out, const DescriptorCache *cache=nullptr) const =0
Convert the descriptor to a normalized string.
virtual std::optional< int64_t > MaxSatisfactionWeight(bool use_max_sig) const =0
Get the maximum size of a satisfaction for this descriptor, in weight units.
virtual std::string ToString(bool compat_format=false) const =0
Convert the descriptor back to a string, undoing parsing.
virtual std::optional< OutputType > GetOutputType() const =0
virtual bool Expand(int pos, const SigningProvider &provider, std::vector< CScript > &output_scripts, FlatSigningProvider &out, DescriptorCache *write_cache=nullptr) const =0
Expand a descriptor at a specified position.
virtual bool IsRange() const =0
Whether the expansion of this descriptor depends on the position.
virtual std::optional< int64_t > ScriptSize() const =0
Get the size of the scriptPubKey for this descriptor.
virtual bool IsSolvable() const =0
Whether this descriptor has all information about signing ignoring lack of private keys.
virtual void ExpandPrivate(int pos, const SigningProvider &provider, FlatSigningProvider &out) const =0
Expand the private key for a descriptor at a specified position, if possible.
virtual bool ToPrivateString(const SigningProvider &provider, std::string &out) const =0
Convert the descriptor to a private string.
virtual bool ExpandFromCache(int pos, const DescriptorCache &read_cache, std::vector< CScript > &output_scripts, FlatSigningProvider &out) const =0
Expand a descriptor at a specified position using cached expansion data.
bool IsTooExpensive(std::span< const uint8_t > buffer)
Deriving "expensive" descriptors will consume useful fuzz compute. The compute is better spent on a s...