![]() |
Bitcoin Core 29.99.0
P2P Digital Currency
|
#include <script/interpreter.h>
#include <crypto/ripemd160.h>
#include <crypto/sha1.h>
#include <crypto/sha256.h>
#include <pubkey.h>
#include <script/script.h>
#include <uint256.h>
Go to the source code of this file.
Macros | |
#define | stacktop(i) (stack.at(size_t(int64_t(stack.size()) + int64_t{i}))) |
Script is a stack machine (like Forth) that evaluates a predicate returning a bool indicating valid or not. More... | |
#define | altstacktop(i) (altstack.at(size_t(int64_t(altstack.size()) + int64_t{i}))) |
Typedefs | |
typedef std::vector< unsigned char > | valtype |
Functions | |
bool | CastToBool (const valtype &vch) |
static void | popstack (std::vector< valtype > &stack) |
static bool | IsCompressedOrUncompressedPubKey (const valtype &vchPubKey) |
static bool | IsCompressedPubKey (const valtype &vchPubKey) |
static bool | IsValidSignatureEncoding (const std::vector< unsigned char > &sig) |
A canonical signature exists of: <30> <total len> <02> <len R> <R> <02> <len S> | |
static bool | IsLowDERSignature (const valtype &vchSig, ScriptError *serror) |
static bool | IsDefinedHashtypeSignature (const valtype &vchSig) |
bool | CheckSignatureEncoding (const std::vector< unsigned char > &vchSig, unsigned int flags, ScriptError *serror) |
static bool | CheckPubKeyEncoding (const valtype &vchPubKey, unsigned int flags, const SigVersion &sigversion, ScriptError *serror) |
int | FindAndDelete (CScript &script, const CScript &b) |
static bool | EvalChecksigPreTapscript (const valtype &vchSig, const valtype &vchPubKey, CScript::const_iterator pbegincodehash, CScript::const_iterator pend, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptError *serror, bool &fSuccess) |
static bool | EvalChecksigTapscript (const valtype &sig, const valtype &pubkey, ScriptExecutionData &execdata, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptError *serror, bool &success) |
static bool | EvalChecksig (const valtype &sig, const valtype &pubkey, CScript::const_iterator pbegincodehash, CScript::const_iterator pend, ScriptExecutionData &execdata, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptError *serror, bool &success) |
Helper for OP_CHECKSIG, OP_CHECKSIGVERIFY, and (in Tapscript) OP_CHECKSIGADD. More... | |
bool | EvalScript (std::vector< std::vector< unsigned char > > &stack, const CScript &script, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptExecutionData &execdata, ScriptError *serror) |
bool | EvalScript (std::vector< std::vector< unsigned char > > &stack, const CScript &script, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptError *serror) |
static bool | HandleMissingData (MissingDataBehavior mdb) |
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) |
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) |
static bool | ExecuteWitnessScript (const std::span< const valtype > &stack_span, const CScript &exec_script, unsigned int flags, SigVersion sigversion, const BaseSignatureChecker &checker, ScriptExecutionData &execdata, ScriptError *serror) |
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... | |
static bool | VerifyTaprootCommitment (const std::vector< unsigned char > &control, const std::vector< unsigned char > &program, const uint256 &tapleaf_hash) |
static bool | VerifyWitnessProgram (const CScriptWitness &witness, int witversion, const std::vector< unsigned char > &program, unsigned int flags, const BaseSignatureChecker &checker, ScriptError *serror, bool is_p2sh) |
bool | VerifyScript (const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, unsigned int flags, const BaseSignatureChecker &checker, ScriptError *serror) |
static size_t | WitnessSigOps (int witversion, const std::vector< unsigned char > &witprogram, const CScriptWitness &witness) |
size_t | CountWitnessSigOps (const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, unsigned int flags) |
Variables | |
const HashWriter | HASHER_TAPSIGHASH {TaggedHash("TapSighash")} |
Hasher with tag "TapSighash" pre-fed to it. More... | |
const HashWriter | HASHER_TAPLEAF {TaggedHash("TapLeaf")} |
Hasher with tag "TapLeaf" pre-fed to it. More... | |
const HashWriter | HASHER_TAPBRANCH {TaggedHash("TapBranch")} |
Hasher with tag "TapBranch" pre-fed to it. More... | |
#define altstacktop | ( | i | ) | (altstack.at(size_t(int64_t(altstack.size()) + int64_t{i}))) |
Definition at line 55 of file interpreter.cpp.
#define stacktop | ( | i | ) | (stack.at(size_t(int64_t(stack.size()) + int64_t{i}))) |
Script is a stack machine (like Forth) that evaluates a predicate returning a bool indicating valid or not.
There are no loops.
Definition at line 54 of file interpreter.cpp.
typedef std::vector<unsigned char> valtype |
Definition at line 15 of file interpreter.cpp.
bool CastToBool | ( | const valtype & | vch | ) |
|
static |
Definition at line 217 of file interpreter.cpp.
bool CheckSignatureEncoding | ( | const std::vector< unsigned char > & | vchSig, |
unsigned int | flags, | ||
ScriptError * | serror | ||
) |
Definition at line 200 of file interpreter.cpp.
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 1833 of file interpreter.cpp.
uint256 ComputeTapleafHash | ( | uint8_t | leaf_version, |
std::span< const unsigned char > | script | ||
) |
Compute the BIP341 tapleaf hash from leaf version & script.
Definition at line 1828 of file interpreter.cpp.
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 1844 of file interpreter.cpp.
size_t CountWitnessSigOps | ( | const CScript & | scriptSig, |
const CScript & | scriptPubKey, | ||
const CScriptWitness * | witness, | ||
unsigned int | flags | ||
) |
Definition at line 2095 of file interpreter.cpp.
|
static |
Helper for OP_CHECKSIG, OP_CHECKSIGVERIFY, and (in Tapscript) OP_CHECKSIGADD.
A return value of false means the script fails entirely. When true is returned, the success variable indicates whether the signature check itself succeeded.
Definition at line 391 of file interpreter.cpp.
|
static |
Definition at line 320 of file interpreter.cpp.
|
static |
Definition at line 346 of file interpreter.cpp.
bool EvalScript | ( | std::vector< std::vector< unsigned char > > & | stack, |
const CScript & | script, | ||
unsigned int | flags, | ||
const BaseSignatureChecker & | checker, | ||
SigVersion | sigversion, | ||
ScriptError * | serror | ||
) |
bool EvalScript | ( | std::vector< std::vector< unsigned char > > & | stack, |
const CScript & | script, | ||
unsigned int | flags, | ||
const BaseSignatureChecker & | checker, | ||
SigVersion | sigversion, | ||
ScriptExecutionData & | execdata, | ||
ScriptError * | serror | ||
) |
Definition at line 406 of file interpreter.cpp.
|
static |
Definition at line 1788 of file interpreter.cpp.
Definition at line 228 of file interpreter.cpp.
|
static |
Definition at line 1465 of file interpreter.cpp.
|
static |
|
static |
|
static |
|
static |
Definition at line 172 of file interpreter.cpp.
|
static |
A canonical signature exists of: <30> <total len> <02> <len R> <R> <02> <len S> <hashtype> Where R and S are not negative (their first byte has its highest bit not set), and not excessively padded (do not start with a 0 byte, unless an otherwise negative number follows, in which case a single 0 byte is necessary and even required).
See https://bitcointalk.org/index.php?topic=8392.msg127623#msg127623
This function is consensus-critical since BIP66.
Definition at line 107 of file interpreter.cpp.
|
inlinestatic |
uint256 SignatureHash | ( | const CScript & | scriptCode, |
const T & | txTo, | ||
unsigned int | nIn, | ||
int32_t | nHashType, | ||
const CAmount & | amount, | ||
SigVersion | sigversion, | ||
const PrecomputedTransactionData * | cache | ||
) |
Definition at line 1568 of file interpreter.cpp.
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 1478 of file interpreter.cpp.
bool VerifyScript | ( | const CScript & | scriptSig, |
const CScript & | scriptPubKey, | ||
const CScriptWitness * | witness, | ||
unsigned int | flags, | ||
const BaseSignatureChecker & | checker, | ||
ScriptError * | serror | ||
) |
Definition at line 1958 of file interpreter.cpp.
|
static |
The internal pubkey (x-only, so no Y coordinate parity).
The output pubkey (taken from the scriptPubKey).
Definition at line 1859 of file interpreter.cpp.
|
static |
< Actually executed script (last stack item in P2WSH; implied P2PKH script in P2WPKH; leaf script in P2TR)
Definition at line 1873 of file interpreter.cpp.
|
static |
Definition at line 2079 of file interpreter.cpp.
const HashWriter HASHER_TAPBRANCH {TaggedHash("TapBranch")} |
Hasher with tag "TapBranch" pre-fed to it.
Definition at line 1463 of file interpreter.cpp.
const HashWriter HASHER_TAPLEAF {TaggedHash("TapLeaf")} |
Hasher with tag "TapLeaf" pre-fed to it.
Definition at line 1462 of file interpreter.cpp.
const HashWriter HASHER_TAPSIGHASH {TaggedHash("TapSighash")} |
Hasher with tag "TapSighash" pre-fed to it.
Definition at line 1461 of file interpreter.cpp.