Bitcoin Core 30.99.0
P2P Digital Currency
Classes | Typedefs | Enumerations | Functions | Variables
interpreter.h File Reference
#include <consensus/amount.h>
#include <hash.h>
#include <primitives/transaction.h>
#include <script/script_error.h>
#include <script/verify_flags.h>
#include <span.h>
#include <uint256.h>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <vector>
Include dependency graph for interpreter.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  PrecomputedTransactionData
 
struct  ScriptExecutionData
 
class  SigHashCache
 Data structure to cache SHA256 midstates for the ECDSA sighash calculations (bare, P2SH, P2WPKH, P2WSH). More...
 
class  BaseSignatureChecker
 
class  GenericTransactionSignatureChecker< T >
 
class  DeferringSignatureChecker
 

Typedefs

using TransactionSignatureChecker = GenericTransactionSignatureChecker< CTransaction >
 
using MutableTransactionSignatureChecker = GenericTransactionSignatureChecker< CMutableTransaction >
 

Enumerations

enum  {
  SIGHASH_ALL = 1 , SIGHASH_NONE = 2 , SIGHASH_SINGLE = 3 , SIGHASH_ANYONECANPAY = 0x80 ,
  SIGHASH_DEFAULT = 0 , SIGHASH_OUTPUT_MASK = 3 , SIGHASH_INPUT_MASK = 0x80
}
 Signature hash types/flags. More...
 
enum class  script_verify_flag_name : uint8_t {
  SCRIPT_VERIFY_P2SH , SCRIPT_VERIFY_STRICTENC , SCRIPT_VERIFY_DERSIG , SCRIPT_VERIFY_LOW_S ,
  SCRIPT_VERIFY_NULLDUMMY , SCRIPT_VERIFY_SIGPUSHONLY , SCRIPT_VERIFY_MINIMALDATA , SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS ,
  SCRIPT_VERIFY_CLEANSTACK , SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY , SCRIPT_VERIFY_CHECKSEQUENCEVERIFY , SCRIPT_VERIFY_WITNESS ,
  SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM , SCRIPT_VERIFY_MINIMALIF , SCRIPT_VERIFY_NULLFAIL , SCRIPT_VERIFY_WITNESS_PUBKEYTYPE ,
  SCRIPT_VERIFY_CONST_SCRIPTCODE , SCRIPT_VERIFY_TAPROOT , SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION , SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS ,
  SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE , SCRIPT_VERIFY_END_MARKER
}
 
enum class  SigVersion { BASE = 0 , WITNESS_V0 = 1 , TAPROOT = 2 , TAPSCRIPT = 3 }
 
enum class  MissingDataBehavior { ASSERT_FAIL , FAIL }
 Enum to specify what *TransactionSignatureChecker's behavior should be when dealing with missing transaction data. More...
 

Functions

bool CheckSignatureEncoding (const std::vector< unsigned char > &vchSig, script_verify_flags flags, ScriptError *serror)
 
template<class T >
uint256 SignatureHash (const CScript &scriptCode, const T &txTo, unsigned int nIn, int32_t nHashType, const CAmount &amount, SigVersion sigversion, const PrecomputedTransactionData *cache=nullptr, SigHashCache *sighash_cache=nullptr)
 
template<typename T >
bool SignatureHashSchnorr (uint256 &hash_out, ScriptExecutionData &execdata, const T &tx_to, uint32_t in_pos, uint8_t hash_type, SigVersion sigversion, const PrecomputedTransactionData &cache, MissingDataBehavior mdb)
 
uint256 ComputeTapleafHash (uint8_t leaf_version, std::span< const unsigned char > script)
 Compute the BIP341 tapleaf hash from leaf version & script. More...
 
uint256 ComputeTapbranchHash (std::span< const unsigned char > a, std::span< const unsigned char > b)
 Compute the BIP341 tapbranch hash from two branches. More...
 
uint256 ComputeTaprootMerkleRoot (std::span< const unsigned char > control, const uint256 &tapleaf_hash)
 Compute the BIP341 taproot script tree Merkle root from control block and leaf hash. More...
 
bool EvalScript (std::vector< std::vector< unsigned char > > &stack, const CScript &script, script_verify_flags flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptExecutionData &execdata, ScriptError *error=nullptr)
 
bool EvalScript (std::vector< std::vector< unsigned char > > &stack, const CScript &script, script_verify_flags flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptError *error=nullptr)
 
bool VerifyScript (const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, script_verify_flags flags, const BaseSignatureChecker &checker, ScriptError *serror=nullptr)
 
size_t CountWitnessSigOps (const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, script_verify_flags flags)
 
int FindAndDelete (CScript &script, const CScript &b)
 
const std::map< std::string, script_verify_flag_name > & ScriptFlagNamesToEnum ()
 
std::vector< std::string > GetScriptFlagNames (script_verify_flags flags)
 

Variables

static constexpr script_verify_flags SCRIPT_VERIFY_NONE {0}
 Script verification flags. More...
 
static constexpr int MAX_SCRIPT_VERIFY_FLAGS_BITS = static_cast<int>(SCRIPT_VERIFY_END_MARKER)
 
static constexpr script_verify_flags::value_type MAX_SCRIPT_VERIFY_FLAGS = ((script_verify_flags::value_type{1} << MAX_SCRIPT_VERIFY_FLAGS_BITS) - 1)
 
static constexpr size_t WITNESS_V0_SCRIPTHASH_SIZE = 32
 Signature hash sizes. More...
 
static constexpr size_t WITNESS_V0_KEYHASH_SIZE = 20
 
static constexpr size_t WITNESS_V1_TAPROOT_SIZE = 32
 
static constexpr uint8_t TAPROOT_LEAF_MASK = 0xfe
 
static constexpr uint8_t TAPROOT_LEAF_TAPSCRIPT = 0xc0
 
static constexpr size_t TAPROOT_CONTROL_BASE_SIZE = 33
 
static constexpr size_t TAPROOT_CONTROL_NODE_SIZE = 32
 
static constexpr size_t TAPROOT_CONTROL_MAX_NODE_COUNT = 128
 
static constexpr size_t TAPROOT_CONTROL_MAX_SIZE = TAPROOT_CONTROL_BASE_SIZE + TAPROOT_CONTROL_NODE_SIZE * TAPROOT_CONTROL_MAX_NODE_COUNT
 
const HashWriter HASHER_TAPSIGHASH
 Hasher with tag "TapSighash" pre-fed to it. More...
 
const HashWriter HASHER_TAPLEAF
 Hasher with tag "TapLeaf" pre-fed to it. More...
 
const HashWriter HASHER_TAPBRANCH
 Hasher with tag "TapBranch" pre-fed to it. More...
 

Typedef Documentation

◆ MutableTransactionSignatureChecker

Definition at line 337 of file interpreter.h.

◆ TransactionSignatureChecker

Definition at line 336 of file interpreter.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Signature hash types/flags.

Enumerator
SIGHASH_ALL 
SIGHASH_NONE 
SIGHASH_SINGLE 
SIGHASH_ANYONECANPAY 
SIGHASH_DEFAULT 

Taproot only; implied when sighash byte is missing, and equivalent to SIGHASH_ALL.

SIGHASH_OUTPUT_MASK 
SIGHASH_INPUT_MASK 

Definition at line 29 of file interpreter.h.

◆ MissingDataBehavior

enum class MissingDataBehavior
strong

Enum to specify what *TransactionSignatureChecker's behavior should be when dealing with missing transaction data.

Enumerator
ASSERT_FAIL 

Abort execution through assertion failure (for consensus code)

FAIL 

Just act as if the signature was invalid.

Definition at line 303 of file interpreter.h.

◆ script_verify_flag_name

enum class script_verify_flag_name : uint8_t
strong
Enumerator
SCRIPT_VERIFY_P2SH 
SCRIPT_VERIFY_STRICTENC 
SCRIPT_VERIFY_DERSIG 
SCRIPT_VERIFY_LOW_S 
SCRIPT_VERIFY_NULLDUMMY 
SCRIPT_VERIFY_SIGPUSHONLY 
SCRIPT_VERIFY_MINIMALDATA 
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS 
SCRIPT_VERIFY_CLEANSTACK 
SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY 
SCRIPT_VERIFY_CHECKSEQUENCEVERIFY 
SCRIPT_VERIFY_WITNESS 
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM 
SCRIPT_VERIFY_MINIMALIF 
SCRIPT_VERIFY_NULLFAIL 
SCRIPT_VERIFY_WITNESS_PUBKEYTYPE 
SCRIPT_VERIFY_CONST_SCRIPTCODE 
SCRIPT_VERIFY_TAPROOT 
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION 
SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS 
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE 
SCRIPT_VERIFY_END_MARKER 

Definition at line 49 of file interpreter.h.

◆ SigVersion

enum class SigVersion
strong
Enumerator
BASE 

Bare scripts and BIP16 P2SH-wrapped redeemscripts.

WITNESS_V0 

Witness v0 (P2WPKH and P2WSH); see BIP 141.

TAPROOT 

Witness v1 with 32-byte program, not BIP16 P2SH-wrapped, key path spending; see BIP 341.

TAPSCRIPT 

Witness v1 with 32-byte program, not BIP16 P2SH-wrapped, script path spending, leaf version 0xc0; see BIP 342.

Definition at line 200 of file interpreter.h.

Function Documentation

◆ CheckSignatureEncoding()

bool CheckSignatureEncoding ( const std::vector< unsigned char > &  vchSig,
script_verify_flags  flags,
ScriptError serror 
)

Definition at line 201 of file interpreter.cpp.

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

◆ ComputeTapbranchHash()

uint256 ComputeTapbranchHash ( std::span< const unsigned char >  a,
std::span< const unsigned char >  b 
)

Compute the BIP341 tapbranch hash from two branches.

Spans must be 32 bytes each.

Definition at line 1873 of file interpreter.cpp.

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

◆ ComputeTapleafHash()

uint256 ComputeTapleafHash ( uint8_t  leaf_version,
std::span< const unsigned char >  script 
)

Compute the BIP341 tapleaf hash from leaf version & script.

Definition at line 1868 of file interpreter.cpp.

Here is the caller graph for this function:

◆ ComputeTaprootMerkleRoot()

uint256 ComputeTaprootMerkleRoot ( std::span< const unsigned char >  control,
const uint256 tapleaf_hash 
)

Compute the BIP341 taproot script tree Merkle root from control block and leaf hash.

Requires control block to have valid length (33 + k*32, with k in {0,1,..,128}).

Definition at line 1884 of file interpreter.cpp.

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

◆ CountWitnessSigOps()

size_t CountWitnessSigOps ( const CScript scriptSig,
const CScript scriptPubKey,
const CScriptWitness witness,
script_verify_flags  flags 
)

Definition at line 2135 of file interpreter.cpp.

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

◆ EvalScript() [1/2]

bool EvalScript ( std::vector< std::vector< unsigned char > > &  stack,
const CScript script,
script_verify_flags  flags,
const BaseSignatureChecker checker,
SigVersion  sigversion,
ScriptError error = nullptr 
)

Definition at line 1237 of file interpreter.cpp.

Here is the call graph for this function:

◆ EvalScript() [2/2]

bool EvalScript ( std::vector< std::vector< unsigned char > > &  stack,
const CScript script,
script_verify_flags  flags,
const BaseSignatureChecker checker,
SigVersion  sigversion,
ScriptExecutionData execdata,
ScriptError error = nullptr 
)

Definition at line 407 of file interpreter.cpp.

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

◆ FindAndDelete()

int FindAndDelete ( CScript script,
const CScript b 
)

Definition at line 229 of file interpreter.cpp.

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

◆ GetScriptFlagNames()

std::vector< std::string > GetScriptFlagNames ( script_verify_flags  flags)

Definition at line 2196 of file interpreter.cpp.

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

◆ ScriptFlagNamesToEnum()

const std::map< std::string, script_verify_flag_name > & ScriptFlagNamesToEnum ( )

Definition at line 2166 of file interpreter.cpp.

Here is the caller graph for this function:

◆ SignatureHash()

template<class T >
uint256 SignatureHash ( const CScript scriptCode,
const T &  txTo,
unsigned int  nIn,
int32_t  nHashType,
const CAmount amount,
SigVersion  sigversion,
const PrecomputedTransactionData cache = nullptr,
SigHashCache sighash_cache = nullptr 
)

Definition at line 1596 of file interpreter.cpp.

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

◆ SignatureHashSchnorr()

template<typename T >
bool SignatureHashSchnorr ( uint256 hash_out,
ScriptExecutionData execdata,
const T &  tx_to,
uint32_t  in_pos,
uint8_t  hash_type,
SigVersion  sigversion,
const PrecomputedTransactionData cache,
MissingDataBehavior  mdb 
)

Definition at line 1479 of file interpreter.cpp.

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

◆ VerifyScript()

bool VerifyScript ( const CScript scriptSig,
const CScript scriptPubKey,
const CScriptWitness witness,
script_verify_flags  flags,
const BaseSignatureChecker checker,
ScriptError serror = nullptr 
)

Definition at line 1998 of file interpreter.cpp.

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

Variable Documentation

◆ HASHER_TAPBRANCH

const HashWriter HASHER_TAPBRANCH
extern

Hasher with tag "TapBranch" pre-fed to it.

Definition at line 1464 of file interpreter.cpp.

◆ HASHER_TAPLEAF

const HashWriter HASHER_TAPLEAF
extern

Hasher with tag "TapLeaf" pre-fed to it.

Definition at line 1463 of file interpreter.cpp.

◆ HASHER_TAPSIGHASH

const HashWriter HASHER_TAPSIGHASH
extern

Hasher with tag "TapSighash" pre-fed to it.

Definition at line 1462 of file interpreter.cpp.

◆ MAX_SCRIPT_VERIFY_FLAGS

constexpr script_verify_flags::value_type MAX_SCRIPT_VERIFY_FLAGS = ((script_verify_flags::value_type{1} << MAX_SCRIPT_VERIFY_FLAGS_BITS) - 1)
staticconstexpr

Definition at line 159 of file interpreter.h.

◆ MAX_SCRIPT_VERIFY_FLAGS_BITS

constexpr int MAX_SCRIPT_VERIFY_FLAGS_BITS = static_cast<int>(SCRIPT_VERIFY_END_MARKER)
staticconstexpr

Definition at line 154 of file interpreter.h.

◆ SCRIPT_VERIFY_NONE

constexpr script_verify_flags SCRIPT_VERIFY_NONE {0}
staticconstexpr

Script verification flags.

All flags are intended to be soft forks: the set of acceptable scripts under flags (A | B) is a subset of the acceptable scripts under flag (A).

Definition at line 47 of file interpreter.h.

◆ TAPROOT_CONTROL_BASE_SIZE

constexpr size_t TAPROOT_CONTROL_BASE_SIZE = 33
staticconstexpr

Definition at line 243 of file interpreter.h.

◆ TAPROOT_CONTROL_MAX_NODE_COUNT

constexpr size_t TAPROOT_CONTROL_MAX_NODE_COUNT = 128
staticconstexpr

Definition at line 245 of file interpreter.h.

◆ TAPROOT_CONTROL_MAX_SIZE

constexpr size_t TAPROOT_CONTROL_MAX_SIZE = TAPROOT_CONTROL_BASE_SIZE + TAPROOT_CONTROL_NODE_SIZE * TAPROOT_CONTROL_MAX_NODE_COUNT
staticconstexpr

Definition at line 246 of file interpreter.h.

◆ TAPROOT_CONTROL_NODE_SIZE

constexpr size_t TAPROOT_CONTROL_NODE_SIZE = 32
staticconstexpr

Definition at line 244 of file interpreter.h.

◆ TAPROOT_LEAF_MASK

constexpr uint8_t TAPROOT_LEAF_MASK = 0xfe
staticconstexpr

Definition at line 241 of file interpreter.h.

◆ TAPROOT_LEAF_TAPSCRIPT

constexpr uint8_t TAPROOT_LEAF_TAPSCRIPT = 0xc0
staticconstexpr

Definition at line 242 of file interpreter.h.

◆ WITNESS_V0_KEYHASH_SIZE

constexpr size_t WITNESS_V0_KEYHASH_SIZE = 20
staticconstexpr

Definition at line 238 of file interpreter.h.

◆ WITNESS_V0_SCRIPTHASH_SIZE

constexpr size_t WITNESS_V0_SCRIPTHASH_SIZE = 32
staticconstexpr

Signature hash sizes.

Definition at line 237 of file interpreter.h.

◆ WITNESS_V1_TAPROOT_SIZE

constexpr size_t WITNESS_V1_TAPROOT_SIZE = 32
staticconstexpr

Definition at line 239 of file interpreter.h.