Bitcoin Core 28.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 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, Span< const unsigned char > script) |
Compute the BIP341 tapleaf hash from leaf version & script. More... | |
uint256 | ComputeTapbranchHash (Span< const unsigned char > a, Span< const unsigned char > b) |
Compute the BIP341 tapbranch hash from two branches. More... | |
uint256 | ComputeTaprootMerkleRoot (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.
Compute the BIP341 tapbranch hash from two branches.
Spans must be 32 bytes each.
Definition at line 1833 of file interpreter.cpp.
Compute the BIP341 tapleaf hash from leaf version & script.
Definition at line 1828 of file interpreter.cpp.
uint256 ComputeTaprootMerkleRoot | ( | 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.