Bitcoin Core  25.99.0
P2P Digital Currency
Typedefs | Functions
standard.cpp File Reference
#include <script/standard.h>
#include <crypto/sha256.h>
#include <hash.h>
#include <pubkey.h>
#include <script/interpreter.h>
#include <script/script.h>
#include <util/strencodings.h>
#include <string>
Include dependency graph for standard.cpp:

Go to the source code of this file.

Typedefs

typedef std::vector< unsigned char > valtype
 

Functions

CKeyID ToKeyID (const PKHash &key_hash)
 
CKeyID ToKeyID (const WitnessV0KeyHash &key_hash)
 
std::string GetTxnOutputType (TxoutType t)
 Get the name of a TxoutType as a string. More...
 
static bool MatchPayToPubkey (const CScript &script, valtype &pubkey)
 
static bool MatchPayToPubkeyHash (const CScript &script, valtype &pubkeyhash)
 
static constexpr bool IsSmallInteger (opcodetype opcode)
 Test for "small positive integer" script opcodes - OP_1 through OP_16. More...
 
static std::optional< int > GetScriptNumber (opcodetype opcode, valtype data, int min, int max)
 Retrieve a minimally-encoded number in range [min,max] from an (opcode, data) pair, whether it's OP_n or through a push. More...
 
static bool MatchMultisig (const CScript &script, int &required_sigs, std::vector< valtype > &pubkeys)
 
std::optional< std::pair< int, std::vector< Span< const unsigned char > > > > MatchMultiA (const CScript &script)
 
TxoutType Solver (const CScript &scriptPubKey, std::vector< std::vector< unsigned char >> &vSolutionsRet)
 Parse a scriptPubKey and identify script type for standard scripts. More...
 
bool ExtractDestination (const CScript &scriptPubKey, CTxDestination &addressRet)
 Parse a standard scriptPubKey for the destination address. More...
 
CScript GetScriptForDestination (const CTxDestination &dest)
 Generate a Bitcoin scriptPubKey for the given CTxDestination. More...
 
CScript GetScriptForRawPubKey (const CPubKey &pubKey)
 Generate a P2PK script for the given pubkey. More...
 
CScript GetScriptForMultisig (int nRequired, const std::vector< CPubKey > &keys)
 Generate a multisig script. More...
 
bool IsValidDestination (const CTxDestination &dest)
 Check whether a CTxDestination is a CNoDestination. More...
 
std::optional< std::vector< std::tuple< int, std::vector< unsigned char >, int > > > InferTaprootTree (const TaprootSpendData &spenddata, const XOnlyPubKey &output)
 Given a TaprootSpendData and the output key, reconstruct its script tree. More...
 

Typedef Documentation

◆ valtype

typedef std::vector<unsigned char> valtype

Definition at line 17 of file standard.cpp.

Function Documentation

◆ ExtractDestination()

bool ExtractDestination ( const CScript scriptPubKey,
CTxDestination addressRet 
)

Parse a standard scriptPubKey for the destination address.

Assigns result to the addressRet parameter and returns true if successful. Currently only works for P2PK, P2PKH, P2SH, P2WPKH, and P2WSH scripts.

Definition at line 237 of file standard.cpp.

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

◆ GetScriptForDestination()

CScript GetScriptForDestination ( const CTxDestination dest)

Generate a Bitcoin scriptPubKey for the given CTxDestination.

Returns a P2PKH script for a CKeyID destination, a P2SH script for a CScriptID, and an empty script for CNoDestination.

Definition at line 334 of file standard.cpp.

◆ GetScriptForMultisig()

CScript GetScriptForMultisig ( int  nRequired,
const std::vector< CPubKey > &  keys 
)

Generate a multisig script.

Definition at line 344 of file standard.cpp.

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

◆ GetScriptForRawPubKey()

CScript GetScriptForRawPubKey ( const CPubKey pubKey)

Generate a P2PK script for the given pubkey.

Definition at line 339 of file standard.cpp.

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

◆ GetScriptNumber()

static std::optional<int> GetScriptNumber ( opcodetype  opcode,
valtype  data,
int  min,
int  max 
)
static

Retrieve a minimally-encoded number in range [min,max] from an (opcode, data) pair, whether it's OP_n or through a push.

Definition at line 93 of file standard.cpp.

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

◆ GetTxnOutputType()

std::string GetTxnOutputType ( TxoutType  t)

Get the name of a TxoutType as a string.

Definition at line 46 of file standard.cpp.

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

◆ InferTaprootTree()

std::optional<std::vector<std::tuple<int, std::vector<unsigned char>, int> > > InferTaprootTree ( const TaprootSpendData spenddata,
const XOnlyPubKey output 
)

Given a TaprootSpendData and the output key, reconstruct its script tree.

If the output doesn't match the spenddata, or if the data in spenddata is incomplete, std::nullopt is returned. Otherwise, a vector of (depth, script, leaf_ver) tuples is returned, corresponding to a depth-first traversal of the script tree.

Data structure to represent the nodes of the tree we're going to build.

Hash of this node, if known; 0 otherwise.

The left and right subtrees (note that their order is irrelevant).

If this is known to be a leaf node, a pointer to the (script, leaf_ver) pair. nullptr otherwise.

Whether or not this node has been explored (is known to be a leaf, or known to have children).

Whether or not this node is an inner node (unknown until explored = true).

Whether or not we have produced output for this subtree.

Definition at line 504 of file standard.cpp.

Here is the call graph for this function:

◆ IsSmallInteger()

static constexpr bool IsSmallInteger ( opcodetype  opcode)
staticconstexpr

Test for "small positive integer" script opcodes - OP_1 through OP_16.

Definition at line 86 of file standard.cpp.

Here is the caller graph for this function:

◆ IsValidDestination()

bool IsValidDestination ( const CTxDestination dest)

Check whether a CTxDestination is a CNoDestination.

Definition at line 356 of file standard.cpp.

Here is the caller graph for this function:

◆ MatchMultiA()

std::optional<std::pair<int, std::vector<Span<const unsigned char> > > > MatchMultiA ( const CScript script)

Definition at line 134 of file standard.cpp.

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

◆ MatchMultisig()

static bool MatchMultisig ( const CScript script,
int &  required_sigs,
std::vector< valtype > &  pubkeys 
)
static

Definition at line 112 of file standard.cpp.

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

◆ MatchPayToPubkey()

static bool MatchPayToPubkey ( const CScript script,
valtype pubkey 
)
static

Definition at line 63 of file standard.cpp.

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

◆ MatchPayToPubkeyHash()

static bool MatchPayToPubkeyHash ( const CScript script,
valtype pubkeyhash 
)
static

Definition at line 76 of file standard.cpp.

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

◆ Solver()

TxoutType Solver ( const CScript scriptPubKey,
std::vector< std::vector< unsigned char >> &  vSolutionsRet 
)

Parse a scriptPubKey and identify script type for standard scripts.

If successful, returns script type and parsed pubkeys or hashes, depending on the type. For example, for a P2SH script, vSolutionsRet will contain the script hash, for P2PKH it will contain the key hash, etc.

Parameters
[in]scriptPubKeyScript to parse
[out]vSolutionsRetVector of parsed pubkeys and hashes
Returns
The script type. TxoutType::NONSTANDARD represents a failed solve.

Definition at line 168 of file standard.cpp.

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

◆ ToKeyID() [1/2]

CKeyID ToKeyID ( const PKHash key_hash)

Definition at line 31 of file standard.cpp.

Here is the caller graph for this function:

◆ ToKeyID() [2/2]

CKeyID ToKeyID ( const WitnessV0KeyHash key_hash)

Definition at line 36 of file standard.cpp.