Bitcoin Core 32.99.0
P2P Digital Currency
Classes | Typedefs | Functions
descriptor.h File Reference
#include <outputtype.h>
#include <pubkey.h>
#include <uint256.h>
#include <util/expected.h>
#include <cstddef>
#include <cstdint>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <string_view>
#include <unordered_map>
#include <vector>
Include dependency graph for descriptor.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  DescriptorCache
 Cache for single descriptor's derived extended pubkeys. More...
 
struct  Descriptor
 Interface for parsed descriptor objects. More...
 

Typedefs

using ExtPubKeyMap = std::unordered_map< uint32_t, CExtPubKey >
 

Functions

util::Expected< void, std::string > CheckDescriptorRangeBounds (int64_t low, int64_t high)
 Validate the numeric bounds of a descriptor key-expression range [low, high] (high inclusive). More...
 
std::vector< std::unique_ptr< Descriptor > > Parse (std::string_view descriptor, FlatSigningProvider &out, std::string &error, bool require_checksum=false)
 Parse a descriptor string. More...
 
std::string GetDescriptorChecksum (const std::string &descriptor)
 Get the checksum for a descriptor. More...
 
std::unique_ptr< Descriptor > InferDescriptor (const CScript &script, const SigningProvider &provider)
 Find a descriptor for the specified script, using information from provider where possible. More...
 
uint256 CompatDescriptorHash (const Descriptor &desc)
 Hash of the COMPAT string representation of the descriptor that is not supposed to change over time. More...
 

Typedef Documentation

◆ ExtPubKeyMap

using ExtPubKeyMap = std::unordered_map<uint32_t, CExtPubKey>

Definition at line 27 of file descriptor.h.

Function Documentation

◆ CheckDescriptorRangeBounds()

util::Expected< void, std::string > CheckDescriptorRangeBounds ( int64_t  low,
int64_t  high 
)

Validate the numeric bounds of a descriptor key-expression range [low, high] (high inclusive).

On success returns an Expected with no value; on failure returns the first violated invariant's user-facing message.

Definition at line 52 of file descriptor.cpp.

Here is the caller graph for this function:

◆ CompatDescriptorHash()

uint256 CompatDescriptorHash ( const Descriptor &  desc)

Hash of the COMPAT string representation of the descriptor that is not supposed to change over time.

Due to the hash's usage in previous versions, the COMPAT string is computed with some quirks.

The hash is the sha256 of the public descriptor using apostrophes as the hardened indicator, except inside of Miniscript expressions, where the public serialization is used as provided.

Definition at line 3042 of file descriptor.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDescriptorChecksum()

std::string GetDescriptorChecksum ( const std::string &  descriptor)

Get the checksum for a descriptor.

  • If it already has one, and it is correct, return the checksum in the input.
  • If it already has one that is wrong, return "".
  • If it does not already have one, return the checksum that would need to be added.

Definition at line 3028 of file descriptor.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ InferDescriptor()

std::unique_ptr< Descriptor > InferDescriptor ( const CScript &  script,
const SigningProvider &  provider 
)

Find a descriptor for the specified script, using information from provider where possible.

A non-ranged descriptor which only generates the specified script will be returned in all circumstances.

For public keys with key origin information, this information will be preserved in the returned descriptor.

  • If all information for solving script is present in provider, a descriptor will be returned which is IsSolvable() and encapsulates said information.
  • Failing that, if script corresponds to a known address type, an "addr()" descriptor will be returned (which is not IsSolvable()).
  • Failing that, a "raw()" descriptor is returned.

Definition at line 3037 of file descriptor.cpp.

Here is the caller graph for this function:

◆ Parse()

std::vector< std::unique_ptr< Descriptor > > Parse ( std::string_view  descriptor,
FlatSigningProvider &  out,
std::string &  error,
bool  require_checksum = false 
)

Parse a descriptor string.

Included private keys are put in out.

If the descriptor has a checksum, it must be valid. If require_checksum is set, the checksum is mandatory - otherwise it is optional.

If a parse error occurs, or the checksum is missing/invalid, or anything else is wrong, an empty vector is returned.

Definition at line 3011 of file descriptor.cpp.

Here is the call graph for this function: