/Users/eugenesiegel/btc/bitcoin/src/script/script.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present 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_SCRIPT_H |
7 | | #define BITCOIN_SCRIPT_SCRIPT_H |
8 | | |
9 | | #include <attributes.h> |
10 | | #include <crypto/common.h> |
11 | | #include <prevector.h> // IWYU pragma: export |
12 | | #include <serialize.h> |
13 | | #include <uint256.h> |
14 | | #include <util/hash_type.h> |
15 | | |
16 | | #include <cassert> |
17 | | #include <cstdint> |
18 | | #include <cstring> |
19 | | #include <limits> |
20 | | #include <span> |
21 | | #include <stdexcept> |
22 | | #include <string> |
23 | | #include <type_traits> |
24 | | #include <utility> |
25 | | #include <vector> |
26 | | |
27 | | // Maximum number of bytes pushable to the stack |
28 | | static const unsigned int MAX_SCRIPT_ELEMENT_SIZE = 520; |
29 | | |
30 | | // Maximum number of non-push operations per script |
31 | | static const int MAX_OPS_PER_SCRIPT = 201; |
32 | | |
33 | | // Maximum number of public keys per multisig |
34 | | static const int MAX_PUBKEYS_PER_MULTISIG = 20; |
35 | | |
36 | | /** The limit of keys in OP_CHECKSIGADD-based scripts. It is due to the stack limit in BIP342. */ |
37 | | static constexpr unsigned int MAX_PUBKEYS_PER_MULTI_A = 999; |
38 | | |
39 | | // Maximum script length in bytes |
40 | | static const int MAX_SCRIPT_SIZE = 10000; |
41 | | |
42 | | // Maximum number of values on script interpreter stack |
43 | | static const int MAX_STACK_SIZE = 1000; |
44 | | |
45 | | // Threshold for nLockTime: below this value it is interpreted as block number, |
46 | | // otherwise as UNIX timestamp. |
47 | | static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20 1985 UTC |
48 | | |
49 | | // Maximum nLockTime. Since a lock time indicates the last invalid timestamp, a |
50 | | // transaction with this lock time will never be valid unless lock time |
51 | | // checking is disabled (by setting all input sequence numbers to |
52 | | // SEQUENCE_FINAL). |
53 | | static const uint32_t LOCKTIME_MAX = 0xFFFFFFFFU; |
54 | | |
55 | | // Tag for input annex. If there are at least two witness elements for a transaction input, |
56 | | // and the first byte of the last element is 0x50, this last element is called annex, and |
57 | | // has meanings independent of the script |
58 | | static constexpr unsigned int ANNEX_TAG = 0x50; |
59 | | |
60 | | // Validation weight per passing signature (Tapscript only, see BIP 342). |
61 | | static constexpr int64_t VALIDATION_WEIGHT_PER_SIGOP_PASSED{50}; |
62 | | |
63 | | // How much weight budget is added to the witness size (Tapscript only, see BIP 342). |
64 | | static constexpr int64_t VALIDATION_WEIGHT_OFFSET{50}; |
65 | | |
66 | | template <typename T> |
67 | | std::vector<unsigned char> ToByteVector(const T& in) |
68 | 33.0k | { |
69 | 33.0k | return std::vector<unsigned char>(in.begin(), in.end()); |
70 | 33.0k | } Unexecuted instantiation: _Z12ToByteVectorI11XOnlyPubKeyENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ _Z12ToByteVectorI7uint256ENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Line | Count | Source | 68 | 33.0k | { | 69 | 33.0k | return std::vector<unsigned char>(in.begin(), in.end()); | 70 | 33.0k | } |
Unexecuted instantiation: _Z12ToByteVectorI7CPubKeyENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorI6PKHashENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorI10ScriptHashENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorI19WitnessV0ScriptHashENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorI16WitnessV0KeyHashENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorI16WitnessV1TaprootENSt3__16vectorIhNS1_9allocatorIhEEEERKT_ Unexecuted instantiation: _Z12ToByteVectorINSt3__16vectorIhNS0_9allocatorIhEEEEES4_RKT_ |
71 | | |
72 | | /** Script opcodes */ |
73 | | enum opcodetype |
74 | | { |
75 | | // push value |
76 | | OP_0 = 0x00, |
77 | | OP_FALSE = OP_0, |
78 | | OP_PUSHDATA1 = 0x4c, |
79 | | OP_PUSHDATA2 = 0x4d, |
80 | | OP_PUSHDATA4 = 0x4e, |
81 | | OP_1NEGATE = 0x4f, |
82 | | OP_RESERVED = 0x50, |
83 | | OP_1 = 0x51, |
84 | | OP_TRUE=OP_1, |
85 | | OP_2 = 0x52, |
86 | | OP_3 = 0x53, |
87 | | OP_4 = 0x54, |
88 | | OP_5 = 0x55, |
89 | | OP_6 = 0x56, |
90 | | OP_7 = 0x57, |
91 | | OP_8 = 0x58, |
92 | | OP_9 = 0x59, |
93 | | OP_10 = 0x5a, |
94 | | OP_11 = 0x5b, |
95 | | OP_12 = 0x5c, |
96 | | OP_13 = 0x5d, |
97 | | OP_14 = 0x5e, |
98 | | OP_15 = 0x5f, |
99 | | OP_16 = 0x60, |
100 | | |
101 | | // control |
102 | | OP_NOP = 0x61, |
103 | | OP_VER = 0x62, |
104 | | OP_IF = 0x63, |
105 | | OP_NOTIF = 0x64, |
106 | | OP_VERIF = 0x65, |
107 | | OP_VERNOTIF = 0x66, |
108 | | OP_ELSE = 0x67, |
109 | | OP_ENDIF = 0x68, |
110 | | OP_VERIFY = 0x69, |
111 | | OP_RETURN = 0x6a, |
112 | | |
113 | | // stack ops |
114 | | OP_TOALTSTACK = 0x6b, |
115 | | OP_FROMALTSTACK = 0x6c, |
116 | | OP_2DROP = 0x6d, |
117 | | OP_2DUP = 0x6e, |
118 | | OP_3DUP = 0x6f, |
119 | | OP_2OVER = 0x70, |
120 | | OP_2ROT = 0x71, |
121 | | OP_2SWAP = 0x72, |
122 | | OP_IFDUP = 0x73, |
123 | | OP_DEPTH = 0x74, |
124 | | OP_DROP = 0x75, |
125 | | OP_DUP = 0x76, |
126 | | OP_NIP = 0x77, |
127 | | OP_OVER = 0x78, |
128 | | OP_PICK = 0x79, |
129 | | OP_ROLL = 0x7a, |
130 | | OP_ROT = 0x7b, |
131 | | OP_SWAP = 0x7c, |
132 | | OP_TUCK = 0x7d, |
133 | | |
134 | | // splice ops |
135 | | OP_CAT = 0x7e, |
136 | | OP_SUBSTR = 0x7f, |
137 | | OP_LEFT = 0x80, |
138 | | OP_RIGHT = 0x81, |
139 | | OP_SIZE = 0x82, |
140 | | |
141 | | // bit logic |
142 | | OP_INVERT = 0x83, |
143 | | OP_AND = 0x84, |
144 | | OP_OR = 0x85, |
145 | | OP_XOR = 0x86, |
146 | | OP_EQUAL = 0x87, |
147 | | OP_EQUALVERIFY = 0x88, |
148 | | OP_RESERVED1 = 0x89, |
149 | | OP_RESERVED2 = 0x8a, |
150 | | |
151 | | // numeric |
152 | | OP_1ADD = 0x8b, |
153 | | OP_1SUB = 0x8c, |
154 | | OP_2MUL = 0x8d, |
155 | | OP_2DIV = 0x8e, |
156 | | OP_NEGATE = 0x8f, |
157 | | OP_ABS = 0x90, |
158 | | OP_NOT = 0x91, |
159 | | OP_0NOTEQUAL = 0x92, |
160 | | |
161 | | OP_ADD = 0x93, |
162 | | OP_SUB = 0x94, |
163 | | OP_MUL = 0x95, |
164 | | OP_DIV = 0x96, |
165 | | OP_MOD = 0x97, |
166 | | OP_LSHIFT = 0x98, |
167 | | OP_RSHIFT = 0x99, |
168 | | |
169 | | OP_BOOLAND = 0x9a, |
170 | | OP_BOOLOR = 0x9b, |
171 | | OP_NUMEQUAL = 0x9c, |
172 | | OP_NUMEQUALVERIFY = 0x9d, |
173 | | OP_NUMNOTEQUAL = 0x9e, |
174 | | OP_LESSTHAN = 0x9f, |
175 | | OP_GREATERTHAN = 0xa0, |
176 | | OP_LESSTHANOREQUAL = 0xa1, |
177 | | OP_GREATERTHANOREQUAL = 0xa2, |
178 | | OP_MIN = 0xa3, |
179 | | OP_MAX = 0xa4, |
180 | | |
181 | | OP_WITHIN = 0xa5, |
182 | | |
183 | | // crypto |
184 | | OP_RIPEMD160 = 0xa6, |
185 | | OP_SHA1 = 0xa7, |
186 | | OP_SHA256 = 0xa8, |
187 | | OP_HASH160 = 0xa9, |
188 | | OP_HASH256 = 0xaa, |
189 | | OP_CODESEPARATOR = 0xab, |
190 | | OP_CHECKSIG = 0xac, |
191 | | OP_CHECKSIGVERIFY = 0xad, |
192 | | OP_CHECKMULTISIG = 0xae, |
193 | | OP_CHECKMULTISIGVERIFY = 0xaf, |
194 | | |
195 | | // expansion |
196 | | OP_NOP1 = 0xb0, |
197 | | OP_CHECKLOCKTIMEVERIFY = 0xb1, |
198 | | OP_NOP2 = OP_CHECKLOCKTIMEVERIFY, |
199 | | OP_CHECKSEQUENCEVERIFY = 0xb2, |
200 | | OP_NOP3 = OP_CHECKSEQUENCEVERIFY, |
201 | | OP_NOP4 = 0xb3, |
202 | | OP_NOP5 = 0xb4, |
203 | | OP_NOP6 = 0xb5, |
204 | | OP_NOP7 = 0xb6, |
205 | | OP_NOP8 = 0xb7, |
206 | | OP_NOP9 = 0xb8, |
207 | | OP_NOP10 = 0xb9, |
208 | | |
209 | | // Opcode added by BIP 342 (Tapscript) |
210 | | OP_CHECKSIGADD = 0xba, |
211 | | |
212 | | OP_INVALIDOPCODE = 0xff, |
213 | | }; |
214 | | |
215 | | // Maximum value that an opcode can be |
216 | | static const unsigned int MAX_OPCODE = OP_NOP10; |
217 | | |
218 | | std::string GetOpName(opcodetype opcode); |
219 | | |
220 | | class scriptnum_error : public std::runtime_error |
221 | | { |
222 | | public: |
223 | 0 | explicit scriptnum_error(const std::string& str) : std::runtime_error(str) {} |
224 | | }; |
225 | | |
226 | | class CScriptNum |
227 | | { |
228 | | /** |
229 | | * Numeric opcodes (OP_1ADD, etc) are restricted to operating on 4-byte integers. |
230 | | * The semantics are subtle, though: operands must be in the range [-2^31 +1...2^31 -1], |
231 | | * but results may overflow (and are valid as long as they are not used in a subsequent |
232 | | * numeric operation). CScriptNum enforces those semantics by storing results as |
233 | | * an int64 and allowing out-of-range values to be returned as a vector of bytes but |
234 | | * throwing an exception if arithmetic is done or the result is interpreted as an integer. |
235 | | */ |
236 | | public: |
237 | | |
238 | | explicit CScriptNum(const int64_t& n) |
239 | 732k | { |
240 | 732k | m_value = n; |
241 | 732k | } |
242 | | |
243 | | static const size_t nDefaultMaxNumSize = 4; |
244 | | |
245 | | explicit CScriptNum(const std::vector<unsigned char>& vch, bool fRequireMinimal, |
246 | | const size_t nMaxNumSize = nDefaultMaxNumSize) |
247 | 0 | { |
248 | 0 | if (vch.size() > nMaxNumSize) { |
249 | 0 | throw scriptnum_error("script number overflow"); |
250 | 0 | } |
251 | 0 | if (fRequireMinimal && vch.size() > 0) { |
252 | | // Check that the number is encoded with the minimum possible |
253 | | // number of bytes. |
254 | | // |
255 | | // If the most-significant-byte - excluding the sign bit - is zero |
256 | | // then we're not minimal. Note how this test also rejects the |
257 | | // negative-zero encoding, 0x80. |
258 | 0 | if ((vch.back() & 0x7f) == 0) { |
259 | | // One exception: if there's more than one byte and the most |
260 | | // significant bit of the second-most-significant-byte is set |
261 | | // it would conflict with the sign bit. An example of this case |
262 | | // is +-255, which encode to 0xff00 and 0xff80 respectively. |
263 | | // (big-endian). |
264 | 0 | if (vch.size() <= 1 || (vch[vch.size() - 2] & 0x80) == 0) { |
265 | 0 | throw scriptnum_error("non-minimally encoded script number"); |
266 | 0 | } |
267 | 0 | } |
268 | 0 | } |
269 | 0 | m_value = set_vch(vch); |
270 | 0 | } |
271 | | |
272 | 0 | inline bool operator==(const int64_t& rhs) const { return m_value == rhs; } |
273 | 0 | inline bool operator!=(const int64_t& rhs) const { return m_value != rhs; } |
274 | 0 | inline bool operator<=(const int64_t& rhs) const { return m_value <= rhs; } |
275 | 0 | inline bool operator< (const int64_t& rhs) const { return m_value < rhs; } |
276 | 0 | inline bool operator>=(const int64_t& rhs) const { return m_value >= rhs; } |
277 | 0 | inline bool operator> (const int64_t& rhs) const { return m_value > rhs; } |
278 | | |
279 | 0 | inline bool operator==(const CScriptNum& rhs) const { return operator==(rhs.m_value); } |
280 | 0 | inline bool operator!=(const CScriptNum& rhs) const { return operator!=(rhs.m_value); } |
281 | 0 | inline bool operator<=(const CScriptNum& rhs) const { return operator<=(rhs.m_value); } |
282 | 0 | inline bool operator< (const CScriptNum& rhs) const { return operator< (rhs.m_value); } |
283 | 0 | inline bool operator>=(const CScriptNum& rhs) const { return operator>=(rhs.m_value); } |
284 | 0 | inline bool operator> (const CScriptNum& rhs) const { return operator> (rhs.m_value); } |
285 | | |
286 | 0 | inline CScriptNum operator+( const int64_t& rhs) const { return CScriptNum(m_value + rhs);} |
287 | 0 | inline CScriptNum operator-( const int64_t& rhs) const { return CScriptNum(m_value - rhs);} |
288 | 0 | inline CScriptNum operator+( const CScriptNum& rhs) const { return operator+(rhs.m_value); } |
289 | 0 | inline CScriptNum operator-( const CScriptNum& rhs) const { return operator-(rhs.m_value); } |
290 | | |
291 | 0 | inline CScriptNum& operator+=( const CScriptNum& rhs) { return operator+=(rhs.m_value); } |
292 | 0 | inline CScriptNum& operator-=( const CScriptNum& rhs) { return operator-=(rhs.m_value); } |
293 | | |
294 | 0 | inline CScriptNum operator&( const int64_t& rhs) const { return CScriptNum(m_value & rhs);} |
295 | 0 | inline CScriptNum operator&( const CScriptNum& rhs) const { return operator&(rhs.m_value); } |
296 | | |
297 | 0 | inline CScriptNum& operator&=( const CScriptNum& rhs) { return operator&=(rhs.m_value); } |
298 | | |
299 | | inline CScriptNum operator-() const |
300 | 0 | { |
301 | 0 | assert(m_value != std::numeric_limits<int64_t>::min()); |
302 | 0 | return CScriptNum(-m_value); |
303 | 0 | } |
304 | | |
305 | | inline CScriptNum& operator=( const int64_t& rhs) |
306 | 0 | { |
307 | 0 | m_value = rhs; |
308 | 0 | return *this; |
309 | 0 | } |
310 | | |
311 | | inline CScriptNum& operator+=( const int64_t& rhs) |
312 | 0 | { |
313 | 0 | assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits<int64_t>::max() - rhs) || |
314 | 0 | (rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs)); |
315 | 0 | m_value += rhs; |
316 | 0 | return *this; |
317 | 0 | } |
318 | | |
319 | | inline CScriptNum& operator-=( const int64_t& rhs) |
320 | 0 | { |
321 | 0 | assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits<int64_t>::min() + rhs) || |
322 | 0 | (rhs < 0 && m_value <= std::numeric_limits<int64_t>::max() + rhs)); |
323 | 0 | m_value -= rhs; |
324 | 0 | return *this; |
325 | 0 | } |
326 | | |
327 | | inline CScriptNum& operator&=( const int64_t& rhs) |
328 | 0 | { |
329 | 0 | m_value &= rhs; |
330 | 0 | return *this; |
331 | 0 | } |
332 | | |
333 | | int getint() const |
334 | 0 | { |
335 | 0 | if (m_value > std::numeric_limits<int>::max()) |
336 | 0 | return std::numeric_limits<int>::max(); |
337 | 0 | else if (m_value < std::numeric_limits<int>::min()) |
338 | 0 | return std::numeric_limits<int>::min(); |
339 | 0 | return m_value; |
340 | 0 | } |
341 | | |
342 | 0 | int64_t GetInt64() const { return m_value; } |
343 | | |
344 | | std::vector<unsigned char> getvch() const |
345 | 732k | { |
346 | 732k | return serialize(m_value); |
347 | 732k | } |
348 | | |
349 | | static std::vector<unsigned char> serialize(const int64_t& value) |
350 | 29.9M | { |
351 | 29.9M | if(value == 0) |
352 | 285 | return std::vector<unsigned char>(); |
353 | | |
354 | 29.9M | std::vector<unsigned char> result; |
355 | 29.9M | const bool neg = value < 0; |
356 | 29.9M | uint64_t absvalue = neg ? ~static_cast<uint64_t>(value) + 1168k : static_cast<uint64_t>(value)29.7M ; |
357 | | |
358 | 71.4M | while(absvalue) |
359 | 41.5M | { |
360 | 41.5M | result.push_back(absvalue & 0xff); |
361 | 41.5M | absvalue >>= 8; |
362 | 41.5M | } |
363 | | |
364 | | // - If the most significant byte is >= 0x80 and the value is positive, push a |
365 | | // new zero-byte to make the significant byte < 0x80 again. |
366 | | |
367 | | // - If the most significant byte is >= 0x80 and the value is negative, push a |
368 | | // new 0x80 byte that will be popped off when converting to an integral. |
369 | | |
370 | | // - If the most significant byte is < 0x80 and the value is negative, add |
371 | | // 0x80 to it, since it will be subtracted and interpreted as a negative when |
372 | | // converting to an integral. |
373 | | |
374 | 29.9M | if (result.back() & 0x80) |
375 | 11.0M | result.push_back(neg ? 0x80955 : 011.0M ); |
376 | 18.9M | else if (neg) |
377 | 167k | result.back() |= 0x80; |
378 | | |
379 | 29.9M | return result; |
380 | 29.9M | } |
381 | | |
382 | | private: |
383 | | static int64_t set_vch(const std::vector<unsigned char>& vch) |
384 | 0 | { |
385 | 0 | if (vch.empty()) |
386 | 0 | return 0; |
387 | | |
388 | 0 | int64_t result = 0; |
389 | 0 | for (size_t i = 0; i != vch.size(); ++i) |
390 | 0 | result |= static_cast<int64_t>(vch[i]) << 8*i; |
391 | | |
392 | | // If the input vector's most significant byte is 0x80, remove it from |
393 | | // the result's msb and return a negative. |
394 | 0 | if (vch.back() & 0x80) |
395 | 0 | return -((int64_t)(result & ~(0x80ULL << (8 * (vch.size() - 1))))); |
396 | | |
397 | 0 | return result; |
398 | 0 | } |
399 | | |
400 | | int64_t m_value; |
401 | | }; |
402 | | |
403 | | /** |
404 | | * We use a prevector for the script to reduce the considerable memory overhead |
405 | | * of vectors in cases where they normally contain a small number of small elements. |
406 | | * Tests in October 2015 showed use of this reduced dbcache memory usage by 23% |
407 | | * and made an initial sync 13% faster. |
408 | | */ |
409 | | typedef prevector<28, unsigned char> CScriptBase; |
410 | | |
411 | | bool GetScriptOp(CScriptBase::const_iterator& pc, CScriptBase::const_iterator end, opcodetype& opcodeRet, std::vector<unsigned char>* pvchRet); |
412 | | |
413 | | /** Serialized script, used inside transaction inputs and outputs */ |
414 | | class CScript : public CScriptBase |
415 | | { |
416 | | private: |
417 | | inline void AppendDataSize(const uint32_t size) |
418 | 43.2M | { |
419 | 43.2M | if (size < OP_PUSHDATA1) { |
420 | 42.3M | insert(end(), static_cast<value_type>(size)); |
421 | 42.3M | } else if (871k size <= 0xff871k ) { |
422 | 871k | insert(end(), OP_PUSHDATA1); |
423 | 871k | insert(end(), static_cast<value_type>(size)); |
424 | 871k | } else if (0 size <= 0xffff0 ) { |
425 | 0 | insert(end(), OP_PUSHDATA2); |
426 | 0 | value_type data[2]; |
427 | 0 | WriteLE16(data, size); |
428 | 0 | insert(end(), std::cbegin(data), std::cend(data)); |
429 | 0 | } else { |
430 | 0 | insert(end(), OP_PUSHDATA4); |
431 | 0 | value_type data[4]; |
432 | 0 | WriteLE32(data, size); |
433 | 0 | insert(end(), std::cbegin(data), std::cend(data)); |
434 | 0 | } |
435 | 43.2M | } |
436 | | |
437 | | void AppendData(std::span<const value_type> data) |
438 | 43.2M | { |
439 | 43.2M | insert(end(), data.begin(), data.end()); |
440 | 43.2M | } |
441 | | |
442 | | protected: |
443 | | CScript& push_int64(int64_t n) |
444 | 33.7M | { |
445 | 33.7M | if (n == -1 || (n >= 1 && n <= 1633.6M )) |
446 | 4.48M | { |
447 | 4.48M | push_back(n + (OP_1 - 1)); |
448 | 4.48M | } |
449 | 29.2M | else if (n == 0) |
450 | 55.0k | { |
451 | 55.0k | push_back(OP_0); |
452 | 55.0k | } |
453 | 29.2M | else |
454 | 29.2M | { |
455 | 29.2M | *this << CScriptNum::serialize(n); |
456 | 29.2M | } |
457 | 33.7M | return *this; |
458 | 33.7M | } |
459 | | |
460 | | public: |
461 | 256M | CScript() = default; |
462 | | template <std::input_iterator InputIterator> |
463 | 0 | CScript(InputIterator first, InputIterator last) : CScriptBase{first, last} { } Unexecuted instantiation: _ZN7CScriptC2ITkNSt3__114input_iteratorENS1_11__wrap_iterIPKhEEEET_S6_ Unexecuted instantiation: _ZN7CScriptC2ITkNSt3__114input_iteratorENS1_11__wrap_iterIPhEEEET_S5_ Unexecuted instantiation: _ZN7CScriptC2ITkNSt3__114input_iteratorEN9prevectorILj28EhjiE14const_iteratorEEET_S5_ |
464 | | |
465 | 544M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 390M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 2.22M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 3.12M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 101k | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 30.0M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 0 | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
| SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 117M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
_ZN7CScript16SerializationOpsI12ParamsStreamIR12SizeComputer20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 390M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 390M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
_ZN7CScript16SerializationOpsI12ParamsStreamIR10DataStream20TransactionSerParamsES_17ActionUnserializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 2.22M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 2.22M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
_ZN7CScript16SerializationOpsI12ParamsStreamIR12VectorWriter20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 3.12M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 3.12M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
Unexecuted instantiation: _ZN7CScript16SerializationOpsI12ParamsStreamIR10DataStream20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI10DataStreamS_17ActionUnserializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI10DataStreamKS_15ActionSerializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI12SizeComputerKS_15ActionSerializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI12ParamsStreamIRS1_IR12VectorWriter20TransactionSerParamsES4_EKS_15ActionSerializeEEvRT0_RT_T1_ _ZN7CScript16SerializationOpsI12ParamsStreamIR10SpanReader20TransactionSerParamsES_17ActionUnserializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 101k | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 101k | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
Unexecuted instantiation: _ZN7CScript16SerializationOpsI10SpanReaderS_17ActionUnserializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI12ParamsStreamIR8AutoFile20TransactionSerParamsES_17ActionUnserializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI10HashWriterKS_15ActionSerializeEEvRT0_RT_T1_ _ZN7CScript16SerializationOpsI12ParamsStreamIR14BufferedWriterI8AutoFileE20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 30.0M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 30.0M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
Unexecuted instantiation: _ZN7CScript16SerializationOpsI12ParamsStreamIR8AutoFile20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Unexecuted instantiation: _ZN7CScript16SerializationOpsI12ParamsStreamIR12BufferedFile20TransactionSerParamsES_17ActionUnserializeEEvRT0_RT_T1_ _ZN7CScript16SerializationOpsI12ParamsStreamIR10HashWriter20TransactionSerParamsEKS_15ActionSerializeEEvRT0_RT_T1_ Line | Count | Source | 465 | 117M | SERIALIZE_METHODS(CScript, obj) { READWRITE(AsBase<CScriptBase>(obj)); } Line | Count | Source | 156 | 117M | #define READWRITE(...) (ser_action.SerReadWriteMany(s, __VA_ARGS__)) |
|
|
466 | | |
467 | 0 | explicit CScript(int64_t b) { operator<<(b); } |
468 | 0 | explicit CScript(opcodetype b) { operator<<(b); } |
469 | 0 | explicit CScript(const CScriptNum& b) { operator<<(b); } |
470 | | // delete non-existent constructor to defend against future introduction |
471 | | // e.g. via prevector |
472 | | explicit CScript(const std::vector<unsigned char>& b) = delete; |
473 | | |
474 | | /** Delete non-existent operator to defend against future introduction */ |
475 | | CScript& operator<<(const CScript& b) = delete; |
476 | | |
477 | 33.7M | CScript& operator<<(int64_t b) LIFETIMEBOUND { return push_int64(b); } |
478 | | |
479 | | CScript& operator<<(opcodetype opcode) LIFETIMEBOUND |
480 | 22.2M | { |
481 | 22.2M | if (opcode < 0 || opcode > 0xff) |
482 | 0 | throw std::runtime_error("CScript::operator<<(): invalid opcode"); |
483 | 22.2M | insert(end(), (unsigned char)opcode); |
484 | 22.2M | return *this; |
485 | 22.2M | } |
486 | | |
487 | | CScript& operator<<(const CScriptNum& b) LIFETIMEBOUND |
488 | 732k | { |
489 | 732k | *this << b.getvch(); |
490 | 732k | return *this; |
491 | 732k | } |
492 | | |
493 | | CScript& operator<<(std::span<const std::byte> b) LIFETIMEBOUND |
494 | 43.2M | { |
495 | 43.2M | AppendDataSize(b.size()); |
496 | 43.2M | AppendData({reinterpret_cast<const value_type*>(b.data()), b.size()}); |
497 | 43.2M | return *this; |
498 | 43.2M | } |
499 | | |
500 | | // For compatibility reasons. In new code, prefer using std::byte instead of uint8_t. |
501 | | CScript& operator<<(std::span<const value_type> b) LIFETIMEBOUND |
502 | 42.9M | { |
503 | 42.9M | return *this << std::as_bytes(b); |
504 | 42.9M | } |
505 | | |
506 | | bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector<unsigned char>& vchRet) const |
507 | 0 | { |
508 | 0 | return GetScriptOp(pc, end(), opcodeRet, &vchRet); |
509 | 0 | } |
510 | | |
511 | | bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const |
512 | 250M | { |
513 | 250M | return GetScriptOp(pc, end(), opcodeRet, nullptr); |
514 | 250M | } |
515 | | |
516 | | /** Encode/decode small integers: */ |
517 | | static int DecodeOP_N(opcodetype opcode) |
518 | 0 | { |
519 | 0 | if (opcode == OP_0) |
520 | 0 | return 0; |
521 | 0 | assert(opcode >= OP_1 && opcode <= OP_16); |
522 | 0 | return (int)opcode - (int)(OP_1 - 1); |
523 | 0 | } |
524 | | static opcodetype EncodeOP_N(int n) |
525 | 0 | { |
526 | 0 | assert(n >= 0 && n <= 16); |
527 | 0 | if (n == 0) |
528 | 0 | return OP_0; |
529 | 0 | return (opcodetype)(OP_1+n-1); |
530 | 0 | } |
531 | | |
532 | | /** |
533 | | * Pre-version-0.6, Bitcoin always counted CHECKMULTISIGs |
534 | | * as 20 sigops. With pay-to-script-hash, that changed: |
535 | | * CHECKMULTISIGs serialized in scriptSigs are |
536 | | * counted more accurately, assuming they are of the form |
537 | | * ... OP_N CHECKMULTISIG ... |
538 | | */ |
539 | | unsigned int GetSigOpCount(bool fAccurate) const; |
540 | | |
541 | | /** |
542 | | * Accurately count sigOps, including sigOps in |
543 | | * pay-to-script-hash transactions: |
544 | | */ |
545 | | unsigned int GetSigOpCount(const CScript& scriptSig) const; |
546 | | |
547 | | /* |
548 | | * OP_1 <0x4e73> |
549 | | */ |
550 | | bool IsPayToAnchor() const; |
551 | | /** Checks if output of IsWitnessProgram comes from a P2A output script |
552 | | */ |
553 | | static bool IsPayToAnchor(int version, const std::vector<unsigned char>& program); |
554 | | |
555 | | bool IsPayToScriptHash() const; |
556 | | bool IsPayToWitnessScriptHash() const; |
557 | | bool IsWitnessProgram(int& version, std::vector<unsigned char>& program) const; |
558 | | |
559 | | /** Called by IsStandardTx and P2SH/BIP62 VerifyScript (which makes it consensus-critical). */ |
560 | | bool IsPushOnly(const_iterator pc) const; |
561 | | bool IsPushOnly() const; |
562 | | |
563 | | /** Check if the script contains valid OP_CODES */ |
564 | | bool HasValidOps() const; |
565 | | |
566 | | /** |
567 | | * Returns whether the script is guaranteed to fail at execution, |
568 | | * regardless of the initial stack. This allows outputs to be pruned |
569 | | * instantly when entering the UTXO set. |
570 | | */ |
571 | | bool IsUnspendable() const |
572 | 39.9M | { |
573 | 39.9M | return (size() > 0 && *begin() == OP_RETURN) || (size() > MAX_SCRIPT_SIZE)19.9M ; |
574 | 39.9M | } |
575 | | |
576 | | void clear() |
577 | 201M | { |
578 | | // The default prevector::clear() does not release memory |
579 | 201M | CScriptBase::clear(); |
580 | 201M | shrink_to_fit(); |
581 | 201M | } |
582 | | }; |
583 | | |
584 | | struct CScriptWitness |
585 | | { |
586 | | // Note that this encodes the data elements being pushed, rather than |
587 | | // encoding them as a CScript that pushes them. |
588 | | std::vector<std::vector<unsigned char> > stack; |
589 | | |
590 | | // Some compilers complain without a default constructor |
591 | 13.5M | CScriptWitness() = default; |
592 | | |
593 | 31.0M | bool IsNull() const { return stack.empty(); } |
594 | | |
595 | 0 | void SetNull() { stack.clear(); stack.shrink_to_fit(); } |
596 | | |
597 | | std::string ToString() const; |
598 | | }; |
599 | | |
600 | | /** A reference to a CScript: the Hash160 of its serialization */ |
601 | | class CScriptID : public BaseHash<uint160> |
602 | | { |
603 | | public: |
604 | 103k | CScriptID() : BaseHash() {} |
605 | | explicit CScriptID(const CScript& in); |
606 | 0 | explicit CScriptID(const uint160& in) : BaseHash(in) {} |
607 | | }; |
608 | | |
609 | | /** Test for OP_SUCCESSx opcodes as defined by BIP342. */ |
610 | | bool IsOpSuccess(const opcodetype& opcode); |
611 | | |
612 | | bool CheckMinimalPush(const std::vector<unsigned char>& data, opcodetype opcode); |
613 | | |
614 | | /** Build a script by concatenating other scripts, or any argument accepted by CScript::operator<<. */ |
615 | | template<typename... Ts> |
616 | | CScript BuildScript(Ts&&... inputs) |
617 | 0 | { |
618 | 0 | CScript ret; |
619 | 0 | int cnt{0}; |
620 | |
|
621 | 0 | ([&ret, &cnt] (Ts&& input) { |
622 | 0 | if constexpr (std::is_same_v<std::remove_cv_t<std::remove_reference_t<Ts>>, CScript>) { |
623 | | // If it is a CScript, extend ret with it. Move or copy the first element instead. |
624 | 0 | if (cnt == 0) { |
625 | 0 | ret = std::forward<Ts>(input); |
626 | 0 | } else { |
627 | 0 | ret.insert(ret.end(), input.begin(), input.end()); |
628 | 0 | } |
629 | 0 | } else { |
630 | | // Otherwise invoke CScript::operator<<. |
631 | 0 | ret << input; |
632 | 0 | } |
633 | 0 | cnt++; |
634 | 0 | } (std::forward<Ts>(inputs)), ...); Unexecuted instantiation: _ZZ11BuildScriptIJNSt3__16vectorIhNS0_9allocatorIhEEEEEE7CScriptDpOT_ENKUlOS4_E_clES9_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_NSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E1_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_NSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E0_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_NSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS5_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_NSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJRKj10opcodetypeEE7CScriptDpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJRKj10opcodetypeEE7CScriptDpOT_ENKUlOS2_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E2_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOiE_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E1_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E0_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlS7_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ENKUlOS0_E_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_EES1_DpOT_ENKUlOS0_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_EES1_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_EES1_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptEES1_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptEES1_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeEES0_DpOT_ENKUlOS0_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeEES0_DpOT_ENKUlOS1_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E1_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_R7CScriptS0_EES1_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E2_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E1_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeEE7CScriptDpOT_ENKUlOS0_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRS0_EES0_DpOT_ENKUlOS0_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRS0_EES0_DpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRS0_10opcodetypeEES0_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRS0_10opcodetypeEES0_DpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRS0_10opcodetypeEES0_DpOT_ENKUlOS2_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ENKUlOS1_E1_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ENKUlOS1_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ENKUlOS1_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_EES0_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_EES0_DpOT_ENKUlOS1_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_EES0_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_EES0_DpOT_ENKUlOS1_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ENKUlOS0_E1_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ENKUlS2_E0_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ENKUlOS0_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlOS0_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlOS1_E1_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlS2_E0_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlOS1_E0_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ENKUlOS1_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJRKjEE7CScriptDpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ENKUlOS0_E_clES9_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ENKUlOS5_E_clES9_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptm10opcodetypeEES0_DpOT_ENKUlOS0_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptm10opcodetypeEES0_DpOT_ENKUlOmE_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptm10opcodetypeEES0_DpOT_ENKUlOS1_E_clES5_ Unexecuted instantiation: _ZZ11BuildScriptIJNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ENKUlOS4_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ENKUlOS5_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlOS0_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlOS5_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlOS6_E_clESA_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKj10opcodetypeEES0_DpOT_ENKUlOS0_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKj10opcodetypeEES0_DpOT_ENKUlS2_E_clES2_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKj10opcodetypeEES0_DpOT_ENKUlOS3_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJRKxEE7CScriptDpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJRKNSt3__16vectorIhNS0_9allocatorIhEEEEEE7CScriptDpOT_ENKUlS6_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ENKUlOS0_E_clESB_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ENKUlS7_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJRKNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ENKUlS6_E_clES6_ Unexecuted instantiation: _ZZ11BuildScriptIJRKNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ENKUlOS7_E_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlOS0_E_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlS7_E_clES7_ Unexecuted instantiation: _ZZ11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ENKUlOS8_E_clESC_ Unexecuted instantiation: _ZZ11BuildScriptIJRKmEE7CScriptDpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJRKiEE7CScriptDpOT_ENKUlS1_E_clES1_ Unexecuted instantiation: _ZZ11BuildScriptIJRjEE7CScriptDpOT_ENKUlS0_E_clES0_ Unexecuted instantiation: _ZZ11BuildScriptIJRmEE7CScriptDpOT_ENKUlS0_E_clES0_ |
635 | |
|
636 | 0 | return ret; |
637 | 0 | } Unexecuted instantiation: _Z11BuildScriptIJNSt3__16vectorIhNS0_9allocatorIhEEEEEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeS0_NSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKj10opcodetypeEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeiS0_S0_RKNSt3__16vectorIhNS1_9allocatorIhEEEES0_EE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeR7CScriptS0_EES1_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeR7CScriptEES1_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScript10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeS0_R7CScriptS0_EES1_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeS0_S0_R7CScriptS0_EES1_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptRS0_EES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptRS0_10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScript10opcodetypeS1_RS0_S1_EES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScript10opcodetypeRS0_S1_EES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ10opcodetypeR7CScriptS0_S2_S0_EES1_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScript10opcodetypeRS0_S1_S2_S1_EES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKjEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptm10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptRKj10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKxEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKNSt3__16vectorIhNS0_9allocatorIhEEEEEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEEEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKNSt3__16vectorIhNS0_9allocatorIhEEEE10opcodetypeEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJ7CScriptRKNSt3__16vectorIhNS1_9allocatorIhEEEE10opcodetypeEES0_DpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKmEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJRKiEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJRjEE7CScriptDpOT_ Unexecuted instantiation: _Z11BuildScriptIJRmEE7CScriptDpOT_ |
638 | | |
639 | | #endif // BITCOIN_SCRIPT_SCRIPT_H |