Bitcoin Core  22.99.0
P2P Digital Currency
interpreter.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2020 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_SCRIPT_INTERPRETER_H
7 #define BITCOIN_SCRIPT_INTERPRETER_H
8 
9 #include <hash.h>
10 #include <script/script_error.h>
11 #include <span.h>
12 #include <primitives/transaction.h>
13 
14 #include <vector>
15 #include <stdint.h>
16 
17 class CPubKey;
18 class XOnlyPubKey;
19 class CScript;
20 class CTransaction;
21 class CTxOut;
22 class uint256;
23 
25 enum
26 {
31 
35 };
36 
42 enum : uint32_t {
44 
45  // Evaluate P2SH subscripts (BIP16).
46  SCRIPT_VERIFY_P2SH = (1U << 0),
47 
48  // Passing a non-strict-DER signature or one with undefined hashtype to a checksig operation causes script failure.
49  // Evaluating a pubkey that is not (0x04 + 64 bytes) or (0x02 or 0x03 + 32 bytes) by checksig causes script failure.
50  // (not used or intended as a consensus rule).
52 
53  // Passing a non-strict-DER signature to a checksig operation causes script failure (BIP62 rule 1)
54  SCRIPT_VERIFY_DERSIG = (1U << 2),
55 
56  // Passing a non-strict-DER signature or one with S > order/2 to a checksig operation causes script failure
57  // (BIP62 rule 5).
58  SCRIPT_VERIFY_LOW_S = (1U << 3),
59 
60  // verify dummy stack item consumed by CHECKMULTISIG is of zero-length (BIP62 rule 7).
62 
63  // Using a non-push operator in the scriptSig causes script failure (BIP62 rule 2).
65 
66  // Require minimal encodings for all push operations (OP_0... OP_16, OP_1NEGATE where possible, direct
67  // pushes up to 75 bytes, OP_PUSHDATA up to 255 bytes, OP_PUSHDATA2 for anything larger). Evaluating
68  // any other push causes the script to fail (BIP62 rule 3).
69  // In addition, whenever a stack element is interpreted as a number, it must be of minimal length (BIP62 rule 4).
71 
72  // Discourage use of NOPs reserved for upgrades (NOP1-10)
73  //
74  // Provided so that nodes can avoid accepting or mining transactions
75  // containing executed NOP's whose meaning may change after a soft-fork,
76  // thus rendering the script invalid; with this flag set executing
77  // discouraged NOPs fails the script. This verification flag will never be
78  // a mandatory flag applied to scripts in a block. NOPs that are not
79  // executed, e.g. within an unexecuted IF ENDIF block, are *not* rejected.
80  // NOPs that have associated forks to give them new meaning (CLTV, CSV)
81  // are not subject to this rule.
83 
84  // Require that only a single stack element remains after evaluation. This changes the success criterion from
85  // "At least one stack element must remain, and when interpreted as a boolean, it must be true" to
86  // "Exactly one stack element must remain, and when interpreted as a boolean, it must be true".
87  // (BIP62 rule 6)
88  // Note: CLEANSTACK should never be used without P2SH or WITNESS.
89  // Note: WITNESS_V0 and TAPSCRIPT script execution have behavior similar to CLEANSTACK as part of their
90  // consensus rules. It is automatic there and does not need this flag.
92 
93  // Verify CHECKLOCKTIMEVERIFY
94  //
95  // See BIP65 for details.
97 
98  // support CHECKSEQUENCEVERIFY opcode
99  //
100  // See BIP112 for details
102 
103  // Support segregated witness
104  //
105  SCRIPT_VERIFY_WITNESS = (1U << 11),
106 
107  // Making v1-v16 witness program non-standard
108  //
110 
111  // Segwit script only: Require the argument of OP_IF/NOTIF to be exactly 0x01 or empty vector
112  //
113  // Note: TAPSCRIPT script execution has behavior similar to MINIMALIF as part of its consensus
114  // rules. It is automatic there and does not depend on this flag.
116 
117  // Signature(s) must be empty vector if a CHECK(MULTI)SIG operation failed
118  //
120 
121  // Public keys in segregated witness scripts must be compressed
122  //
124 
125  // Making OP_CODESEPARATOR and FindAndDelete fail any non-segwit scripts
126  //
128 
129  // Taproot/Tapscript validation (BIPs 341 & 342)
130  //
131  SCRIPT_VERIFY_TAPROOT = (1U << 17),
132 
133  // Making unknown Taproot leaf versions non-standard
134  //
136 
137  // Making unknown OP_SUCCESS non-standard
139 
140  // Making unknown public key versions (in BIP 342 scripts) non-standard
142 
143  // Constants to point to the highest flag in use. Add new flags above this line.
144  //
146 };
147 
148 bool CheckSignatureEncoding(const std::vector<unsigned char> &vchSig, unsigned int flags, ScriptError* serror);
149 
151 {
152  // BIP341 precomputed data.
153  // These are single-SHA256, see https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-15.
161 
162  // BIP143 precomputed data (double-SHA256).
165  bool m_bip143_segwit_ready = false;
166 
167  std::vector<CTxOut> m_spent_outputs;
169  bool m_spent_outputs_ready = false;
170 
171  PrecomputedTransactionData() = default;
172 
173  template <class T>
174  void Init(const T& tx, std::vector<CTxOut>&& spent_outputs, bool force = false);
175 
176  template <class T>
177  explicit PrecomputedTransactionData(const T& tx);
178 };
179 
180 enum class SigVersion
181 {
182  BASE = 0,
183  WITNESS_V0 = 1,
184  TAPROOT = 2,
185  TAPSCRIPT = 3,
186 };
187 
189 {
191  bool m_tapleaf_hash_init = false;
194 
199 
201  bool m_annex_init = false;
206 
211 };
212 
214 static constexpr size_t WITNESS_V0_SCRIPTHASH_SIZE = 32;
215 static constexpr size_t WITNESS_V0_KEYHASH_SIZE = 20;
216 static constexpr size_t WITNESS_V1_TAPROOT_SIZE = 32;
217 
218 static constexpr uint8_t TAPROOT_LEAF_MASK = 0xfe;
219 static constexpr uint8_t TAPROOT_LEAF_TAPSCRIPT = 0xc0;
220 static constexpr size_t TAPROOT_CONTROL_BASE_SIZE = 33;
221 static constexpr size_t TAPROOT_CONTROL_NODE_SIZE = 32;
222 static constexpr size_t TAPROOT_CONTROL_MAX_NODE_COUNT = 128;
224 
225 extern const CHashWriter HASHER_TAPLEAF;
226 extern const CHashWriter HASHER_TAPBRANCH;
227 
228 template <class T>
229 uint256 SignatureHash(const CScript& scriptCode, const T& txTo, unsigned int nIn, int nHashType, const CAmount& amount, SigVersion sigversion, const PrecomputedTransactionData* cache = nullptr);
230 
232 {
233 public:
234  virtual bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const
235  {
236  return false;
237  }
238 
239  virtual bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr) const
240  {
241  return false;
242  }
243 
244  virtual bool CheckLockTime(const CScriptNum& nLockTime) const
245  {
246  return false;
247  }
248 
249  virtual bool CheckSequence(const CScriptNum& nSequence) const
250  {
251  return false;
252  }
253 
255 };
256 
261 {
262  ASSERT_FAIL,
263  FAIL,
264 };
265 
266 template<typename T>
267 bool SignatureHashSchnorr(uint256& hash_out, const ScriptExecutionData& execdata, const T& tx_to, uint32_t in_pos, uint8_t hash_type, SigVersion sigversion, const PrecomputedTransactionData& cache, MissingDataBehavior mdb);
268 
269 template <class T>
271 {
272 private:
273  const T* txTo;
275  unsigned int nIn;
278 
279 protected:
280  virtual bool VerifyECDSASignature(const std::vector<unsigned char>& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const;
281  virtual bool VerifySchnorrSignature(Span<const unsigned char> sig, const XOnlyPubKey& pubkey, const uint256& sighash) const;
282 
283 public:
284  GenericTransactionSignatureChecker(const T* txToIn, unsigned int nInIn, const CAmount& amountIn, MissingDataBehavior mdb) : txTo(txToIn), m_mdb(mdb), nIn(nInIn), amount(amountIn), txdata(nullptr) {}
285  GenericTransactionSignatureChecker(const T* txToIn, unsigned int nInIn, const CAmount& amountIn, const PrecomputedTransactionData& txdataIn, MissingDataBehavior mdb) : txTo(txToIn), m_mdb(mdb), nIn(nInIn), amount(amountIn), txdata(&txdataIn) {}
286  bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override;
287  bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr) const override;
288  bool CheckLockTime(const CScriptNum& nLockTime) const override;
289  bool CheckSequence(const CScriptNum& nSequence) const override;
290 };
291 
294 
296 {
297 protected:
299 
300 public:
302 
303  bool CheckECDSASignature(const std::vector<unsigned char>& scriptSig, const std::vector<unsigned char>& vchPubKey, const CScript& scriptCode, SigVersion sigversion) const override
304  {
305  return m_checker.CheckECDSASignature(scriptSig, vchPubKey, scriptCode, sigversion);
306  }
307 
308  bool CheckSchnorrSignature(Span<const unsigned char> sig, Span<const unsigned char> pubkey, SigVersion sigversion, const ScriptExecutionData& execdata, ScriptError* serror = nullptr) const override
309  {
310  return m_checker.CheckSchnorrSignature(sig, pubkey, sigversion, execdata, serror);
311  }
312 
313  bool CheckLockTime(const CScriptNum& nLockTime) const override
314  {
315  return m_checker.CheckLockTime(nLockTime);
316  }
317  bool CheckSequence(const CScriptNum& nSequence) const override
318  {
319  return m_checker.CheckSequence(nSequence);
320  }
321 };
322 
324 uint256 ComputeTapleafHash(uint8_t leaf_version, const CScript& script);
328 
329 bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, unsigned int flags, const BaseSignatureChecker& checker, SigVersion sigversion, ScriptExecutionData& execdata, ScriptError* error = nullptr);
330 bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript& script, unsigned int flags, const BaseSignatureChecker& checker, SigVersion sigversion, ScriptError* error = nullptr);
331 bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CScriptWitness* witness, unsigned int flags, const BaseSignatureChecker& checker, ScriptError* serror = nullptr);
332 
333 size_t CountWitnessSigOps(const CScript& scriptSig, const CScript& scriptPubKey, const CScriptWitness* witness, unsigned int flags);
334 
335 bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode);
336 
337 int FindAndDelete(CScript& script, const CScript& b);
338 
339 #endif // BITCOIN_SCRIPT_INTERPRETER_H
SigVersion
SigVersion
Definition: interpreter.h:180
SignatureHash
uint256 SignatureHash(const CScript &scriptCode, const T &txTo, unsigned int nIn, int nHashType, const CAmount &amount, SigVersion sigversion, const PrecomputedTransactionData *cache=nullptr)
Definition: interpreter.cpp:1590
PrecomputedTransactionData::m_prevouts_single_hash
uint256 m_prevouts_single_hash
Definition: interpreter.h:154
WITNESS_V0_KEYHASH_SIZE
static constexpr size_t WITNESS_V0_KEYHASH_SIZE
Definition: interpreter.h:215
SIGHASH_INPUT_MASK
@ SIGHASH_INPUT_MASK
Definition: interpreter.h:34
DeferringSignatureChecker::CheckSequence
bool CheckSequence(const CScriptNum &nSequence) const override
Definition: interpreter.h:317
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM
Definition: interpreter.h:109
WITNESS_V0_SCRIPTHASH_SIZE
static constexpr size_t WITNESS_V0_SCRIPTHASH_SIZE
Signature hash sizes.
Definition: interpreter.h:214
BaseSignatureChecker::~BaseSignatureChecker
virtual ~BaseSignatureChecker()
Definition: interpreter.h:254
DeferringSignatureChecker::CheckSchnorrSignature
bool CheckSchnorrSignature(Span< const unsigned char > sig, Span< const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData &execdata, ScriptError *serror=nullptr) const override
Definition: interpreter.h:308
SigVersion::BASE
@ BASE
Bare scripts and BIP16 P2SH-wrapped redeemscripts.
SCRIPT_VERIFY_CLEANSTACK
@ SCRIPT_VERIFY_CLEANSTACK
Definition: interpreter.h:91
SCRIPT_VERIFY_MINIMALIF
@ SCRIPT_VERIFY_MINIMALIF
Definition: interpreter.h:115
MissingDataBehavior
MissingDataBehavior
Enum to specify what *TransactionSignatureChecker's behavior should be when dealing with missing tran...
Definition: interpreter.h:260
TAPROOT_CONTROL_BASE_SIZE
static constexpr size_t TAPROOT_CONTROL_BASE_SIZE
Definition: interpreter.h:220
flags
int flags
Definition: bitcoin-tx.cpp:512
GenericTransactionSignatureChecker::CheckECDSASignature
bool CheckECDSASignature(const std::vector< unsigned char > &scriptSig, const std::vector< unsigned char > &vchPubKey, const CScript &scriptCode, SigVersion sigversion) const override
Definition: interpreter.cpp:1670
PrecomputedTransactionData::m_spent_amounts_single_hash
uint256 m_spent_amounts_single_hash
Definition: interpreter.h:157
PrecomputedTransactionData::m_spent_outputs
std::vector< CTxOut > m_spent_outputs
Definition: interpreter.h:167
GenericTransactionSignatureChecker::CheckSchnorrSignature
bool CheckSchnorrSignature(Span< const unsigned char > sig, Span< const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData &execdata, ScriptError *serror=nullptr) const override
Definition: interpreter.cpp:1695
transaction.h
HASHER_TAPBRANCH
const CHashWriter HASHER_TAPBRANCH
Hasher with tag "TapBranch" pre-fed to it.
Definition: interpreter.cpp:1488
BaseSignatureChecker::CheckECDSASignature
virtual bool CheckECDSASignature(const std::vector< unsigned char > &scriptSig, const std::vector< unsigned char > &vchPubKey, const CScript &scriptCode, SigVersion sigversion) const
Definition: interpreter.h:234
PrecomputedTransactionData::m_sequences_single_hash
uint256 m_sequences_single_hash
Definition: interpreter.h:155
SIGHASH_OUTPUT_MASK
@ SIGHASH_OUTPUT_MASK
Definition: interpreter.h:33
ScriptExecutionData::m_codeseparator_pos
uint32_t m_codeseparator_pos
Opcode position of the last executed OP_CODESEPARATOR (or 0xFFFFFFFF if none executed).
Definition: interpreter.h:198
SignatureHashSchnorr
bool SignatureHashSchnorr(uint256 &hash_out, const ScriptExecutionData &execdata, const T &tx_to, uint32_t in_pos, uint8_t hash_type, SigVersion sigversion, const PrecomputedTransactionData &cache, MissingDataBehavior mdb)
Definition: interpreter.cpp:1503
GenericTransactionSignatureChecker::amount
const CAmount amount
Definition: interpreter.h:276
GenericTransactionSignatureChecker
Definition: interpreter.h:270
SIGHASH_SINGLE
@ SIGHASH_SINGLE
Definition: interpreter.h:29
ScriptExecutionData
Definition: interpreter.h:188
DeferringSignatureChecker::m_checker
BaseSignatureChecker & m_checker
Definition: interpreter.h:298
PrecomputedTransactionData::m_bip143_segwit_ready
bool m_bip143_segwit_ready
Whether the 3 fields above are initialized.
Definition: interpreter.h:165
BaseSignatureChecker
Definition: interpreter.h:231
XOnlyPubKey
Definition: pubkey.h:220
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS
Definition: interpreter.h:82
ScriptExecutionData::m_annex_present
bool m_annex_present
Whether an annex is present.
Definition: interpreter.h:203
SCRIPT_VERIFY_TAPROOT
@ SCRIPT_VERIFY_TAPROOT
Definition: interpreter.h:131
PrecomputedTransactionData::PrecomputedTransactionData
PrecomputedTransactionData()=default
SIGHASH_NONE
@ SIGHASH_NONE
Definition: interpreter.h:28
ComputeTaprootMerkleRoot
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.
Definition: interpreter.cpp:1855
SCRIPT_VERIFY_SIGPUSHONLY
@ SCRIPT_VERIFY_SIGPUSHONLY
Definition: interpreter.h:64
MissingDataBehavior::FAIL
@ FAIL
Just act as if the signature was invalid.
ScriptExecutionData::m_validation_weight_left
int64_t m_validation_weight_left
How much validation weight is left (decremented for every successful non-empty signature check).
Definition: interpreter.h:210
GenericTransactionSignatureChecker::m_mdb
const MissingDataBehavior m_mdb
Definition: interpreter.h:274
SigVersion::TAPROOT
@ TAPROOT
Witness v1 with 32-byte program, not BIP16 P2SH-wrapped, key path spending; see BIP 341.
CTransaction
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:259
ScriptError
enum ScriptError_t ScriptError
TAPROOT_CONTROL_MAX_SIZE
static constexpr size_t TAPROOT_CONTROL_MAX_SIZE
Definition: interpreter.h:223
PrecomputedTransactionData::m_spent_scripts_single_hash
uint256 m_spent_scripts_single_hash
Definition: interpreter.h:158
CScriptWitness
Definition: script.h:556
CScriptNum
Definition: script.h:218
Span
A Span is an object that can refer to a contiguous sequence of objects.
Definition: span.h:92
GenericTransactionSignatureChecker::GenericTransactionSignatureChecker
GenericTransactionSignatureChecker(const T *txToIn, unsigned int nInIn, const CAmount &amountIn, const PrecomputedTransactionData &txdataIn, MissingDataBehavior mdb)
Definition: interpreter.h:285
DeferringSignatureChecker::DeferringSignatureChecker
DeferringSignatureChecker(BaseSignatureChecker &checker)
Definition: interpreter.h:301
EvalScript
bool EvalScript(std::vector< std::vector< unsigned char > > &stack, const CScript &script, unsigned int flags, const BaseSignatureChecker &checker, SigVersion sigversion, ScriptExecutionData &execdata, ScriptError *error=nullptr)
Definition: interpreter.cpp:431
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION
Definition: interpreter.h:135
SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE
@ SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_PUBKEYTYPE
Definition: interpreter.h:141
GenericTransactionSignatureChecker::nIn
unsigned int nIn
Definition: interpreter.h:275
GenericTransactionSignatureChecker::VerifyECDSASignature
virtual bool VerifyECDSASignature(const std::vector< unsigned char > &vchSig, const CPubKey &vchPubKey, const uint256 &sighash) const
Definition: interpreter.cpp:1658
SCRIPT_VERIFY_NULLDUMMY
@ SCRIPT_VERIFY_NULLDUMMY
Definition: interpreter.h:61
SIGHASH_ANYONECANPAY
@ SIGHASH_ANYONECANPAY
Definition: interpreter.h:30
CTxOut
An output of a transaction.
Definition: transaction.h:128
PrecomputedTransactionData::m_outputs_single_hash
uint256 m_outputs_single_hash
Definition: interpreter.h:156
ComputeTapleafHash
uint256 ComputeTapleafHash(uint8_t leaf_version, const CScript &script)
Compute the BIP341 tapleaf hash from leaf version & script.
Definition: interpreter.cpp:1850
CountWitnessSigOps
size_t CountWitnessSigOps(const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, unsigned int flags)
Definition: interpreter.cpp:2106
ScriptExecutionData::m_tapleaf_hash
uint256 m_tapleaf_hash
The tapleaf hash.
Definition: interpreter.h:193
ScriptExecutionData::m_annex_init
bool m_annex_init
Whether m_annex_present and (when needed) m_annex_hash are initialized.
Definition: interpreter.h:201
SCRIPT_VERIFY_WITNESS
@ SCRIPT_VERIFY_WITNESS
Definition: interpreter.h:105
PrecomputedTransactionData::Init
void Init(const T &tx, std::vector< CTxOut > &&spent_outputs, bool force=false)
Definition: interpreter.cpp:1423
span.h
ScriptExecutionData::m_codeseparator_pos_init
bool m_codeseparator_pos_init
Whether m_codeseparator_pos is initialized.
Definition: interpreter.h:196
TAPROOT_LEAF_MASK
static constexpr uint8_t TAPROOT_LEAF_MASK
Definition: interpreter.h:218
SCRIPT_VERIFY_CHECKSEQUENCEVERIFY
@ SCRIPT_VERIFY_CHECKSEQUENCEVERIFY
Definition: interpreter.h:101
CheckSignatureEncoding
bool CheckSignatureEncoding(const std::vector< unsigned char > &vchSig, unsigned int flags, ScriptError *serror)
Definition: interpreter.cpp:200
SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS
@ SCRIPT_VERIFY_DISCOURAGE_OP_SUCCESS
Definition: interpreter.h:138
GenericTransactionSignatureChecker::CheckLockTime
bool CheckLockTime(const CScriptNum &nLockTime) const override
Definition: interpreter.cpp:1723
CAmount
int64_t CAmount
Amount in satoshis (Can be negative)
Definition: amount.h:12
PrecomputedTransactionData::m_spent_outputs_ready
bool m_spent_outputs_ready
Whether m_spent_outputs is initialized.
Definition: interpreter.h:169
SigVersion::WITNESS_V0
@ WITNESS_V0
Witness v0 (P2WPKH and P2WSH); see BIP 141.
PrecomputedTransactionData
Definition: interpreter.h:150
SCRIPT_VERIFY_MINIMALDATA
@ SCRIPT_VERIFY_MINIMALDATA
Definition: interpreter.h:70
uint256
256-bit opaque blob.
Definition: uint256.h:124
PrecomputedTransactionData::hashPrevouts
uint256 hashPrevouts
Definition: interpreter.h:163
MissingDataBehavior::ASSERT_FAIL
@ ASSERT_FAIL
Abort execution through assertion failure (for consensus code)
GenericTransactionSignatureChecker::txdata
const PrecomputedTransactionData * txdata
Definition: interpreter.h:277
CScript
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:404
SCRIPT_VERIFY_WITNESS_PUBKEYTYPE
@ SCRIPT_VERIFY_WITNESS_PUBKEYTYPE
Definition: interpreter.h:123
PrecomputedTransactionData::hashOutputs
uint256 hashOutputs
Definition: interpreter.h:163
ScriptExecutionData::m_tapleaf_hash_init
bool m_tapleaf_hash_init
Whether m_tapleaf_hash is initialized.
Definition: interpreter.h:191
SCRIPT_VERIFY_LOW_S
@ SCRIPT_VERIFY_LOW_S
Definition: interpreter.h:58
GenericTransactionSignatureChecker::txTo
const T * txTo
Definition: interpreter.h:273
BaseSignatureChecker::CheckSchnorrSignature
virtual bool CheckSchnorrSignature(Span< const unsigned char > sig, Span< const unsigned char > pubkey, SigVersion sigversion, const ScriptExecutionData &execdata, ScriptError *serror=nullptr) const
Definition: interpreter.h:239
SIGHASH_ALL
@ SIGHASH_ALL
Definition: interpreter.h:27
SCRIPT_VERIFY_END_MARKER
@ SCRIPT_VERIFY_END_MARKER
Definition: interpreter.h:145
SCRIPT_VERIFY_NONE
@ SCRIPT_VERIFY_NONE
Definition: interpreter.h:43
CPubKey
An encapsulated public key.
Definition: pubkey.h:32
SigVersion::TAPSCRIPT
@ TAPSCRIPT
Witness v1 with 32-byte program, not BIP16 P2SH-wrapped, script path spending, leaf version 0xc0; see...
script_error.h
GenericTransactionSignatureChecker::CheckSequence
bool CheckSequence(const CScriptNum &nSequence) const override
Definition: interpreter.cpp:1760
SCRIPT_VERIFY_P2SH
@ SCRIPT_VERIFY_P2SH
Definition: interpreter.h:46
DeferringSignatureChecker::CheckECDSASignature
bool CheckECDSASignature(const std::vector< unsigned char > &scriptSig, const std::vector< unsigned char > &vchPubKey, const CScript &scriptCode, SigVersion sigversion) const override
Definition: interpreter.h:303
BaseSignatureChecker::CheckSequence
virtual bool CheckSequence(const CScriptNum &nSequence) const
Definition: interpreter.h:249
DeferringSignatureChecker
Definition: interpreter.h:295
CHashWriter
A writer stream (for serialization) that computes a 256-bit hash.
Definition: hash.h:100
DeferringSignatureChecker::CheckLockTime
bool CheckLockTime(const CScriptNum &nLockTime) const override
Definition: interpreter.h:313
HASHER_TAPLEAF
const CHashWriter HASHER_TAPLEAF
Hasher with tag "TapLeaf" pre-fed to it.
Definition: interpreter.cpp:1487
TAPROOT_LEAF_TAPSCRIPT
static constexpr uint8_t TAPROOT_LEAF_TAPSCRIPT
Definition: interpreter.h:219
ScriptExecutionData::m_annex_hash
uint256 m_annex_hash
Hash of the annex data.
Definition: interpreter.h:205
WITNESS_V1_TAPROOT_SIZE
static constexpr size_t WITNESS_V1_TAPROOT_SIZE
Definition: interpreter.h:216
SCRIPT_VERIFY_DERSIG
@ SCRIPT_VERIFY_DERSIG
Definition: interpreter.h:54
CheckMinimalPush
bool CheckMinimalPush(const std::vector< unsigned char > &data, opcodetype opcode)
Definition: interpreter.cpp:228
TAPROOT_CONTROL_NODE_SIZE
static constexpr size_t TAPROOT_CONTROL_NODE_SIZE
Definition: interpreter.h:221
SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY
@ SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY
Definition: interpreter.h:96
PrecomputedTransactionData::m_bip341_taproot_ready
bool m_bip341_taproot_ready
Whether the 5 fields above are initialized.
Definition: interpreter.h:160
FindAndDelete
int FindAndDelete(CScript &script, const CScript &b)
Definition: interpreter.cpp:253
error
bool error(const char *fmt, const Args &... args)
Definition: system.h:49
SCRIPT_VERIFY_CONST_SCRIPTCODE
@ SCRIPT_VERIFY_CONST_SCRIPTCODE
Definition: interpreter.h:127
PrecomputedTransactionData::hashSequence
uint256 hashSequence
Definition: interpreter.h:163
GenericTransactionSignatureChecker::GenericTransactionSignatureChecker
GenericTransactionSignatureChecker(const T *txToIn, unsigned int nInIn, const CAmount &amountIn, MissingDataBehavior mdb)
Definition: interpreter.h:284
ScriptExecutionData::m_validation_weight_left_init
bool m_validation_weight_left_init
Whether m_validation_weight_left is initialized.
Definition: interpreter.h:208
SCRIPT_VERIFY_NULLFAIL
@ SCRIPT_VERIFY_NULLFAIL
Definition: interpreter.h:119
opcodetype
opcodetype
Script opcodes.
Definition: script.h:65
VerifyScript
bool VerifyScript(const CScript &scriptSig, const CScript &scriptPubKey, const CScriptWitness *witness, unsigned int flags, const BaseSignatureChecker &checker, ScriptError *serror=nullptr)
Definition: interpreter.cpp:1969
BaseSignatureChecker::CheckLockTime
virtual bool CheckLockTime(const CScriptNum &nLockTime) const
Definition: interpreter.h:244
SCRIPT_VERIFY_STRICTENC
@ SCRIPT_VERIFY_STRICTENC
Definition: interpreter.h:51
TAPROOT_CONTROL_MAX_NODE_COUNT
static constexpr size_t TAPROOT_CONTROL_MAX_NODE_COUNT
Definition: interpreter.h:222
SIGHASH_DEFAULT
@ SIGHASH_DEFAULT
Taproot only; implied when sighash byte is missing, and equivalent to SIGHASH_ALL.
Definition: interpreter.h:32
GenericTransactionSignatureChecker::VerifySchnorrSignature
virtual bool VerifySchnorrSignature(Span< const unsigned char > sig, const XOnlyPubKey &pubkey, const uint256 &sighash) const
Definition: interpreter.cpp:1664