Bitcoin Core  24.1.0
P2P Digital Currency
Classes | Namespaces | Typedefs | Enumerations | Functions
miniscript.h File Reference
#include <algorithm>
#include <functional>
#include <numeric>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include <stdlib.h>
#include <assert.h>
#include <policy/policy.h>
#include <primitives/transaction.h>
#include <script/script.h>
#include <span.h>
#include <util/spanparsing.h>
#include <util/strencodings.h>
#include <util/string.h>
#include <util/vector.h>
Include dependency graph for miniscript.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  miniscript::Type
 This type encapsulates the miniscript type system properties. More...
 
struct  miniscript::Node< Key >
 A node in a miniscript expression. More...
 
struct  miniscript::internal::MaxInt< I >
 Class whose objects represent the maximum of a list of integers. More...
 
struct  miniscript::internal::Ops
 
struct  miniscript::internal::StackSize
 
struct  miniscript::internal::NoDupCheck
 
struct  miniscript::Node< Key >
 A node in a miniscript expression. More...
 

Namespaces

 miniscript
 
 miniscript::internal
 

Typedefs

using miniscript::Opcode = std::pair< opcodetype, std::vector< unsigned char > >
 
template<typename Key >
using miniscript::NodeRef = std::shared_ptr< const Node< Key > >
 

Enumerations

enum  miniscript::Fragment {
  miniscript::Fragment::JUST_0, miniscript::Fragment::JUST_1, miniscript::Fragment::PK_K, miniscript::Fragment::PK_H,
  miniscript::Fragment::OLDER, miniscript::Fragment::AFTER, miniscript::Fragment::SHA256, miniscript::Fragment::HASH256,
  miniscript::Fragment::RIPEMD160, miniscript::Fragment::HASH160, miniscript::Fragment::WRAP_A, miniscript::Fragment::WRAP_S,
  miniscript::Fragment::WRAP_C, miniscript::Fragment::WRAP_D, miniscript::Fragment::WRAP_V, miniscript::Fragment::WRAP_J,
  miniscript::Fragment::WRAP_N, miniscript::Fragment::AND_V, miniscript::Fragment::AND_B, miniscript::Fragment::OR_B,
  miniscript::Fragment::OR_C, miniscript::Fragment::OR_D, miniscript::Fragment::OR_I, miniscript::Fragment::ANDOR,
  miniscript::Fragment::THRESH, miniscript::Fragment::MULTI
}
 The different node types in miniscript. More...
 
enum  miniscript::internal::ParseContext {
  miniscript::internal::ParseContext::WRAPPED_EXPR, miniscript::internal::ParseContext::EXPR, miniscript::internal::ParseContext::SWAP, miniscript::internal::ParseContext::ALT,
  miniscript::internal::ParseContext::CHECK, miniscript::internal::ParseContext::DUP_IF, miniscript::internal::ParseContext::VERIFY, miniscript::internal::ParseContext::NON_ZERO,
  miniscript::internal::ParseContext::ZERO_NOTEQUAL, miniscript::internal::ParseContext::WRAP_U, miniscript::internal::ParseContext::WRAP_T, miniscript::internal::ParseContext::AND_N,
  miniscript::internal::ParseContext::AND_V, miniscript::internal::ParseContext::AND_B, miniscript::internal::ParseContext::ANDOR, miniscript::internal::ParseContext::OR_B,
  miniscript::internal::ParseContext::OR_C, miniscript::internal::ParseContext::OR_D, miniscript::internal::ParseContext::OR_I, miniscript::internal::ParseContext::THRESH,
  miniscript::internal::ParseContext::COMMA, miniscript::internal::ParseContext::CLOSE_BRACKET
}
 
enum  miniscript::internal::DecodeContext {
  miniscript::internal::DecodeContext::SINGLE_BKV_EXPR, miniscript::internal::DecodeContext::BKV_EXPR, miniscript::internal::DecodeContext::W_EXPR, miniscript::internal::DecodeContext::SWAP,
  miniscript::internal::DecodeContext::ALT, miniscript::internal::DecodeContext::CHECK, miniscript::internal::DecodeContext::DUP_IF, miniscript::internal::DecodeContext::VERIFY,
  miniscript::internal::DecodeContext::NON_ZERO, miniscript::internal::DecodeContext::ZERO_NOTEQUAL, miniscript::internal::DecodeContext::MAYBE_AND_V, miniscript::internal::DecodeContext::AND_V,
  miniscript::internal::DecodeContext::AND_B, miniscript::internal::DecodeContext::ANDOR, miniscript::internal::DecodeContext::OR_B, miniscript::internal::DecodeContext::OR_C,
  miniscript::internal::DecodeContext::OR_D, miniscript::internal::DecodeContext::THRESH_W, miniscript::internal::DecodeContext::THRESH_E, miniscript::internal::DecodeContext::ENDIF,
  miniscript::internal::DecodeContext::ENDIF_NOTIF, miniscript::internal::DecodeContext::ENDIF_ELSE
}
 

Functions

constexpr Type miniscript::operator"" _mst (const char *c, size_t l)
 Literal operator to construct Type objects. More...
 
template<typename Key , typename... Args>
NodeRef< Key > miniscript::MakeNodeRef (Args &&... args)
 Construct a miniscript node as a shared_ptr. More...
 
Type miniscript::internal::ComputeType (Fragment fragment, Type x, Type y, Type z, const std::vector< Type > &sub_types, uint32_t k, size_t data_size, size_t n_subs, size_t n_keys)
 Helper function for Node::CalcType. More...
 
size_t miniscript::internal::ComputeScriptLen (Fragment fragment, Type sub0typ, size_t subsize, uint32_t k, size_t n_subs, size_t n_keys)
 Helper function for Node::CalcScriptLen. More...
 
Type miniscript::internal::SanitizeType (Type x)
 A helper sanitizer/checker for the output of CalcType. More...
 
int miniscript::internal::FindNextChar (Span< const char > sp, const char m)
 
template<typename Key , typename Ctx >
std::optional< std::pair< Key, int > > miniscript::internal::ParseKeyEnd (Span< const char > in, const Ctx &ctx)
 Parse a key string ending at the end of the fragment's text representation. More...
 
template<typename Ctx >
std::optional< std::pair< std::vector< unsigned char >, int > > miniscript::internal::ParseHexStrEnd (Span< const char > in, const size_t expected_size, const Ctx &ctx)
 Parse a hex string ending at the end of the fragment's text representation. More...
 
template<typename Key >
void miniscript::internal::BuildBack (Fragment nt, std::vector< NodeRef< Key >> &constructed, const bool reverse=false)
 BuildBack pops the last two elements off constructed and wraps them in the specified Fragment. More...
 
template<typename Key , typename Ctx >
NodeRef< Key > miniscript::internal::Parse (Span< const char > in, const Ctx &ctx)
 Parse a miniscript from its textual descriptor form. More...
 
std::optional< std::vector< Opcode > > miniscript::internal::DecomposeScript (const CScript &script)
 Decode a script into opcode/push pairs. More...
 
std::optional< int64_t > miniscript::internal::ParseScriptNumber (const Opcode &in)
 Determine whether the passed pair (created by DecomposeScript) is pushing a number. More...
 
template<typename Key , typename Ctx , typename I >
NodeRef< Key > miniscript::internal::DecodeScript (I &in, I last, const Ctx &ctx)
 Parse a miniscript from a bitcoin script. More...
 
template<typename Ctx >
NodeRef< typename Ctx::Key > miniscript::FromString (const std::string &str, const Ctx &ctx)
 
template<typename Ctx >
NodeRef< typename Ctx::Key > miniscript::FromScript (const CScript &script, const Ctx &ctx)