btcruby 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,67 @@
1
+ module BTC
2
+ # ScriptInterpreterPlugin allows adding extensions to the script machinery without requiring source code meddling.
3
+ # ScriptInterpreter provides several extension points:
4
+ # - extra flags (e.g. requirement for push-only opcodes in signature script)
5
+ # - pre-flight hook to completely take control over both scripts' execution
6
+ # - callback after signature script execution
7
+ # - interior hook to take control over output script execution after signature script is being executed
8
+ # - callback after output script execution
9
+ # - hook for handling the opcodes
10
+ module ScriptInterpreterPlugin
11
+ include ScriptFlags
12
+
13
+ # Returns additional flags to be available to #flag? checks during script execution.
14
+ # This way one plugin can affect evaluation of another.
15
+ def extra_flags
16
+ 0
17
+ end
18
+
19
+ # The first plugin that returns true takes control over both scripts via `handle_scripts`.
20
+ # No other callbacks are called for this plugin or any other.
21
+ # Default value is `false`.
22
+ def should_handle_scripts(interpreter: nil, signature_script: nil, output_script: nil)
23
+ false
24
+ end
25
+
26
+ # Returns true/false depending on result of scripts' evaluation
27
+ def handle_scripts(interpreter: nil, signature_script: nil, output_script: nil)
28
+ false
29
+ end
30
+
31
+ # Every plugin gets this callback. If plugin return `false`, execution is stopped and interpreter returns `false`.
32
+ # Default value is `true`.
33
+ def did_execute_signature_script(interpreter: nil, signature_script: nil)
34
+ true
35
+ end
36
+
37
+ # The first plugin that returns true takes control over output script via #handle_output_script.
38
+ # No other callbacks are called for this plugin or any other.
39
+ # Default value is `false`.
40
+ def should_handle_output_script(interpreter: nil, output_script: nil)
41
+ false
42
+ end
43
+
44
+ # Returns true/false depending on result of script's evaluation
45
+ def handle_output_script(interpreter: nil, output_script: nil)
46
+ false
47
+ end
48
+
49
+ # Every plugin gets this callback. If plugin return `false`, execution is stopped and interpreter returns `false`.
50
+ # Default value is `true`.
51
+ def did_execute_output_script(interpreter: nil, output_script: nil)
52
+ true
53
+ end
54
+
55
+ # The first plugin that returns true takes control over that opcode.
56
+ # Default value is `false`.
57
+ def should_handle_opcode(interpreter: nil, opcode: nil)
58
+ false
59
+ end
60
+
61
+ # Returns `false` if failed to execute the opcode.
62
+ def handle_opcode(interpreter: nil, opcode: nil)
63
+ false
64
+ end
65
+
66
+ end
67
+ end
@@ -18,6 +18,8 @@ module BTC
18
18
  if integer
19
19
  assert(integer >= INT64_MIN && integer <= INT64_MAX, "Integer must be within int64 range")
20
20
  @integer = integer
21
+ elsif boolean == false || boolean == true
22
+ @integer = boolean ? 1 : 0
21
23
  elsif data || hex
22
24
  data ||= BTC.from_hex(hex)
23
25
  if data.bytesize > max_size
@@ -42,8 +44,6 @@ module BTC
42
44
  end
43
45
  end
44
46
  @integer = self.class.decode_integer(data)
45
- elsif boolean == false || boolean == true
46
- @integer = boolean ? 1 : 0
47
47
  else
48
48
  raise ArgumentError
49
49
  end
@@ -17,11 +17,14 @@ module BTC
17
17
 
18
18
  # Extract raw ECDSA signature by stripping off the last hashtype byte
19
19
  ecdsa_sig = script_signature[0..-2]
20
-
20
+
21
21
  key = BTC::Key.new(public_key: public_key)
22
22
  hash = @transaction.signature_hash(input_index: @input_index, output_script: script, hash_type: hashtype)
23
23
  result = key.verify_ecdsa_signature(ecdsa_sig, hash)
24
24
  return result
25
+ rescue BTC::FormatError => e # public key is invalid
26
+ Diagnostics.current.add_message(e.message)
27
+ return false
25
28
  end
26
29
 
27
30
  def check_lock_time(lock_time)
@@ -0,0 +1,77 @@
1
+ require 'ffi'
2
+
3
+ module BTC
4
+ # Bindings to Pieter Wuille's libsecp256k1.
5
+ # This is not included by default, to enable use:
6
+ # require 'btcruby/secp256k1'
7
+ module Secp256k1
8
+ include ::FFI::Library
9
+ extend self
10
+
11
+ ffi_lib 'secp256k1'
12
+
13
+ SECP256K1_CONTEXT_VERIFY = (1 << 0)
14
+ SECP256K1_CONTEXT_SIGN = (1 << 1)
15
+
16
+ # Note: this struct is opaque, but public. Its size will eventually be guaranteed.
17
+ # See https://github.com/bitcoin/secp256k1/issues/288
18
+ # typedef struct {
19
+ # unsigned char data[65];
20
+ # } secp256k1_ecdsa_signature_t;
21
+ class Signature < ::FFI::Struct
22
+ layout :data, [:uint8, 65]
23
+ end
24
+
25
+ attach_function :secp256k1_context_create, [:int], :pointer
26
+ attach_function :secp256k1_context_destroy, [:pointer], :void
27
+ attach_function :secp256k1_ecdsa_sign, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :int
28
+ attach_function :secp256k1_ecdsa_verify, [:pointer, :pointer, :pointer, :pointer], :int
29
+ attach_function :secp256k1_ecdsa_signature_serialize_der, [:pointer, :pointer, :pointer, :pointer], :int
30
+ attach_function :secp256k1_ecdsa_signature_parse_der, [:pointer, :pointer, :pointer, :int], :int
31
+
32
+ def ecdsa_signature(hash, privkey)
33
+ raise ArgumentError, "Hash is missing" if !hash
34
+ raise ArgumentError, "Private key is missing" if !privkey
35
+
36
+ with_context(SECP256K1_CONTEXT_SIGN) do |ctx|
37
+ hash_buf = FFI::MemoryPointer.new(:uchar, hash.bytesize)
38
+ hash_buf.put_bytes(0, hash)
39
+
40
+ sig = Signature.new
41
+
42
+ privkey_buf = FFI::MemoryPointer.new(:uchar, privkey.bytesize)
43
+ privkey_buf.put_bytes(0, privkey)
44
+
45
+ if secp256k1_ecdsa_sign(ctx, hash_buf, sig.pointer, privkey_buf, nil, nil) == 1
46
+ # Serialize an ECDSA signature in DER format.
47
+ bufsize = 72
48
+ output_pointer = FFI::MemoryPointer.new(:uint8, bufsize)
49
+ outputlen_pointer = FFI::MemoryPointer.new(:uint).put_uint(0, bufsize)
50
+ if secp256k1_ecdsa_signature_serialize_der(ctx, output_pointer, outputlen_pointer, sig.pointer) == 1
51
+ actual_length = outputlen_pointer.read_uint
52
+ return output_pointer.read_string(actual_length)
53
+ end
54
+ end
55
+ return nil
56
+ end
57
+ end
58
+
59
+ def ecdsa_verify(signature, hash, public_key)
60
+ raise ArgumentError, "Signature is missing" if !signature
61
+ raise ArgumentError, "Hash is missing" if !hash
62
+ raise ArgumentError, "Public key is missing" if !public_key
63
+
64
+ # TODO:...
65
+ end
66
+
67
+ def with_context(options = 0)
68
+ begin
69
+ ctx = secp256k1_context_create(options)
70
+ yield(ctx)
71
+ ensure
72
+ secp256k1_context_destroy(ctx)
73
+ end
74
+ end
75
+
76
+ end
77
+ end
@@ -381,7 +381,6 @@ module BTC
381
381
  # Single mode assumes we sign an output at the same index as an input.
382
382
  # Outputs before the one we need are blanked out. All outputs after are simply removed.
383
383
  elsif (hash_type & BTC::SIGHASH_OUTPUT_MASK) == BTC::SIGHASH_SINGLE
384
-
385
384
  # Only lock-in the txout payee at same index as txin.
386
385
  output_index = input_index;
387
386
 
@@ -403,7 +402,7 @@ module BTC
403
402
  # Blank out others' input sequence numbers to let others update transaction at will.
404
403
  tx.inputs.each_with_index do |txin, i|
405
404
  if i != input_index
406
- tx.inputs[i].sequence = 0
405
+ txin.sequence = 0
407
406
  end
408
407
  end
409
408
  end # if hashtype is none or single
@@ -411,7 +410,7 @@ module BTC
411
410
  # Blank out other inputs completely. This is not recommended for open transactions.
412
411
  if (hash_type & BTC::SIGHASH_ANYONECANPAY) != 0
413
412
  input = tx.inputs[input_index]
414
- tx.remove_all_outputs
413
+ tx.remove_all_inputs
415
414
  tx.add_input(input)
416
415
  end
417
416
 
@@ -419,7 +418,9 @@ module BTC
419
418
  # Hash type is appended as a little endian uint32 unlike 1-byte suffix of the signature.
420
419
  data = tx.data + BTC::WireFormat.encode_uint32le(hash_type)
421
420
  hash = BTC.hash256(data)
422
-
421
+ # puts ""
422
+ # puts "SIGHASH[#{self.transaction_id}, input #{input_index}, hashtype 0x#{hash_type.to_s(16)}]: hash = #{BTC.id_from_hash(hash)}; tx = " + tx.inspect
423
+ # puts ""
423
424
  return hash
424
425
  end
425
426
 
@@ -194,12 +194,25 @@ module BTC
194
194
  end
195
195
 
196
196
  def previous_id
197
- BTC.id_from_hash(self.previous_hash)
197
+ BTC.id_from_hash(previous_hash)
198
198
  end
199
199
 
200
200
  def previous_id=(txid)
201
201
  self.previous_hash = BTC.hash_from_id(txid)
202
202
  end
203
+
204
+ def outpoint
205
+ Outpoint.new(transaction_hash: previous_hash, index: previous_index)
206
+ end
207
+
208
+ def outpoint=(outpoint)
209
+ self.previous_hash = outpoint.transaction_hash
210
+ self.previous_index = outpoint.index
211
+ end
212
+
213
+ def final?
214
+ self.sequence == MAX_SEQUENCE
215
+ end
203
216
 
204
217
  def value
205
218
  return @value if @value
@@ -262,7 +275,7 @@ module BTC
262
275
  TransactionInput.new(previous_hash: @previous_hash.dup,
263
276
  previous_index: @previous_index,
264
277
  signature_script: @signature_script ? @signature_script.dup : nil,
265
- coinbase_data: @coinbase_data,
278
+ coinbase_data: @coinbase_data ? @coinbase_data.dup : nil,
266
279
  sequence: @sequence,
267
280
  transaction: @transaction,
268
281
  transaction_output: @transaction_output, # not dup-ing txout because it's a transient object without #==
@@ -74,7 +74,7 @@ module BTC
74
74
  def initialize(data: nil,
75
75
  stream: nil,
76
76
  dictionary: nil,
77
- value: 0,
77
+ value: -1,
78
78
  script: BTC::Script.new,
79
79
 
80
80
  # optional attributes
@@ -200,7 +200,7 @@ module BTC
200
200
  def outpoint
201
201
  return @outpoint if @outpoint
202
202
  if transaction_hash && index
203
- @outpoint = TransactionOutpoint.new(transaction_hash: transaction_hash, index: index)
203
+ @outpoint = Outpoint.new(transaction_hash: transaction_hash, index: index)
204
204
  end
205
205
  @outpoint
206
206
  end
@@ -0,0 +1,90 @@
1
+ module BTC
2
+ # "reject" message codes
3
+ REJECT_MALFORMED = 0x01
4
+ REJECT_INVALID = 0x10
5
+ REJECT_OBSOLETE = 0x11
6
+ REJECT_DUPLICATE = 0x12
7
+ REJECT_NONSTANDARD = 0x40
8
+ REJECT_DUST = 0x41
9
+ REJECT_INSUFFICIENTFEE = 0x42
10
+ REJECT_CHECKPOINT = 0x43
11
+
12
+ class Validation
13
+
14
+ def initialize(
15
+ max_block_size: MAX_BLOCK_SIZE,
16
+ min_coinbase_size: 2,
17
+ max_coinbase_size: 100,
18
+ max_money: MAX_MONEY
19
+ )
20
+ @max_block_size = max_block_size
21
+ @min_coinbase_size = min_coinbase_size
22
+ @max_coinbase_size = max_coinbase_size
23
+ @max_money = max_money
24
+ end
25
+
26
+ def check_transaction(tx, state)
27
+ # Basic checks that don't depend on any context
28
+ if tx.inputs.empty?
29
+ return state.DoS(10, false, REJECT_INVALID, "bad-txns-vin-empty")
30
+ end
31
+ if tx.outputs.empty?
32
+ return state.DoS(10, false, REJECT_INVALID, "bad-txns-vout-empty")
33
+ end
34
+
35
+ # Size limits
36
+ if tx.data.bytesize > @max_block_size
37
+ return state.DoS(100, false, REJECT_INVALID, "bad-txns-oversize")
38
+ end
39
+
40
+ # Check for negative or overflow output values
41
+ tx.outputs.inject(0) do |total, txout|
42
+ if txout.value < 0
43
+ return state.DoS(100, false, REJECT_INVALID, "bad-txns-vout-negative")
44
+ end
45
+ if txout.value > @max_money
46
+ return state.DoS(100, false, REJECT_INVALID, "bad-txns-vout-toolarge")
47
+ end
48
+ total += txout.value
49
+ if !check_money_range(total)
50
+ return state.DoS(100, false, REJECT_INVALID, "bad-txns-txouttotal-toolarge")
51
+ end
52
+ total
53
+ end
54
+
55
+ # Check for duplicate inputs
56
+ used_outpoints = {} # outpoint => true
57
+ tx.inputs.each do |txin|
58
+ if used_outpoints[txin.outpoint]
59
+ return state.DoS(100, false, REJECT_INVALID, "bad-txns-inputs-duplicate")
60
+ end
61
+ used_outpoints[txin.outpoint] = true
62
+ end
63
+
64
+ if tx.coinbase?
65
+ cb_size = tx.inputs[0].coinbase_data.bytesize
66
+ if cb_size < @min_coinbase_size || cb_size > @max_coinbase_size
67
+ return state.DoS(100, false, REJECT_INVALID, "bad-cb-length")
68
+ end
69
+ else
70
+ tx.inputs.each do |txin|
71
+ if txin.outpoint.null?
72
+ return state.DoS(10, false, REJECT_INVALID, "bad-txns-prevout-null")
73
+ end
74
+ end
75
+ end
76
+ return true
77
+ end
78
+
79
+ def check_money_range(value)
80
+ value >= 0 && value <= @max_money
81
+ end
82
+ end
83
+
84
+ class ValidationState
85
+ def DoS(level, return_value = false, reject_code = 0, reject_reason = "", corruption = false, debug_message = "")
86
+ # TODO: set the state
87
+ return_value
88
+ end
89
+ end
90
+ end
@@ -1,3 +1,3 @@
1
1
  module BTC
2
- VERSION = "1.1.1".freeze
2
+ VERSION = "1.1.2".freeze
3
3
  end
@@ -0,0 +1,814 @@
1
+ InvalidScripts = [
2
+ ["Format is: [scriptSig, scriptPubKey, flags, ... comments]"],
3
+ ["It is evaluated as if there was a crediting coinbase transaction with two 0"],
4
+ ["pushes as scriptSig, and one output of 0 satoshi and given scriptPubKey,"],
5
+ ["followed by a spending transaction which spends this output as only input (and"],
6
+ ["correct prevout hash), using the given scriptSig. All nLockTimes are 0, all"],
7
+ ["nSequences are max."],
8
+
9
+ ["", "DEPTH", "P2SH,STRICTENC", "Test the test: we should have an empty stack after scriptSig evaluation"],
10
+ [" ", "DEPTH", "P2SH,STRICTENC", "and multiple spaces should not change that."],
11
+ [" ", "DEPTH", "P2SH,STRICTENC"],
12
+ [" ", "DEPTH", "P2SH,STRICTENC"],
13
+
14
+ ["", "", "P2SH,STRICTENC"],
15
+ ["", "NOP", "P2SH,STRICTENC"],
16
+ ["", "NOP DEPTH", "P2SH,STRICTENC"],
17
+ ["NOP", "", "P2SH,STRICTENC"],
18
+ ["NOP", "DEPTH", "P2SH,STRICTENC"],
19
+ ["NOP","NOP", "P2SH,STRICTENC"],
20
+ ["NOP","NOP DEPTH", "P2SH,STRICTENC"],
21
+
22
+ ["DEPTH", "", "P2SH,STRICTENC"],
23
+
24
+ ["0x4c01","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA1 with not enough bytes"],
25
+ ["0x4d0200ff","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA2 with not enough bytes"],
26
+ ["0x4e03000000ffff","0x01 NOP", "P2SH,STRICTENC", "PUSHDATA4 with not enough bytes"],
27
+
28
+ ["1", "IF 0x50 ENDIF 1", "P2SH,STRICTENC", "0x50 is reserved"],
29
+ ["0x52", "0x5f ADD 0x60 EQUAL", "P2SH,STRICTENC", "0x51 through 0x60 push 1 through 16 onto stack"],
30
+ ["0","NOP", "P2SH,STRICTENC"],
31
+ ["1", "IF VER ELSE 1 ENDIF", "P2SH,STRICTENC", "VER non-functional"],
32
+ ["0", "IF VERIF ELSE 1 ENDIF", "P2SH,STRICTENC", "VERIF illegal everywhere"],
33
+ ["0", "IF ELSE 1 ELSE VERIF ENDIF", "P2SH,STRICTENC", "VERIF illegal everywhere"],
34
+ ["0", "IF VERNOTIF ELSE 1 ENDIF", "P2SH,STRICTENC", "VERNOTIF illegal everywhere"],
35
+ ["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "P2SH,STRICTENC", "VERNOTIF illegal everywhere"],
36
+
37
+ ["1 IF", "1 ENDIF", "P2SH,STRICTENC", "IF/ENDIF can't span scriptSig/scriptPubKey"],
38
+ ["1 IF 0 ENDIF", "1 ENDIF", "P2SH,STRICTENC"],
39
+ ["1 ELSE 0 ENDIF", "1", "P2SH,STRICTENC"],
40
+ ["0 NOTIF", "123", "P2SH,STRICTENC"],
41
+
42
+ ["0", "DUP IF ENDIF", "P2SH,STRICTENC"],
43
+ ["0", "IF 1 ENDIF", "P2SH,STRICTENC"],
44
+ ["0", "DUP IF ELSE ENDIF", "P2SH,STRICTENC"],
45
+ ["0", "IF 1 ELSE ENDIF", "P2SH,STRICTENC"],
46
+ ["0", "NOTIF ELSE 1 ENDIF", "P2SH,STRICTENC"],
47
+
48
+ ["0 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"],
49
+ ["0 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"],
50
+ ["1 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"],
51
+ ["0 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"],
52
+
53
+ ["0 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"],
54
+ ["0 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "P2SH,STRICTENC"],
55
+ ["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"],
56
+ ["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "P2SH,STRICTENC"],
57
+
58
+ ["1", "IF RETURN ELSE ELSE 1 ENDIF", "P2SH,STRICTENC", "Multiple ELSEs"],
59
+ ["1", "IF 1 ELSE ELSE RETURN ENDIF", "P2SH,STRICTENC"],
60
+
61
+ ["1", "ENDIF", "P2SH,STRICTENC", "Malformed IF/ELSE/ENDIF sequence"],
62
+ ["1", "ELSE ENDIF", "P2SH,STRICTENC"],
63
+ ["1", "ENDIF ELSE", "P2SH,STRICTENC"],
64
+ ["1", "ENDIF ELSE IF", "P2SH,STRICTENC"],
65
+ ["1", "IF ELSE ENDIF ELSE", "P2SH,STRICTENC"],
66
+ ["1", "IF ELSE ENDIF ELSE ENDIF", "P2SH,STRICTENC"],
67
+ ["1", "IF ENDIF ENDIF", "P2SH,STRICTENC"],
68
+ ["1", "IF ELSE ELSE ENDIF ENDIF", "P2SH,STRICTENC"],
69
+
70
+ ["1", "RETURN", "P2SH,STRICTENC"],
71
+ ["1", "DUP IF RETURN ENDIF", "P2SH,STRICTENC"],
72
+
73
+ ["1", "RETURN 'data'", "P2SH,STRICTENC", "canonical prunable txout format"],
74
+ ["0 IF", "RETURN ENDIF 1", "P2SH,STRICTENC", "still prunable because IF/ENDIF can't span scriptSig/scriptPubKey"],
75
+
76
+ ["0", "VERIFY 1", "P2SH,STRICTENC"],
77
+ ["1", "VERIFY", "P2SH,STRICTENC"],
78
+ ["1", "VERIFY 0", "P2SH,STRICTENC"],
79
+
80
+ ["1 TOALTSTACK", "FROMALTSTACK 1", "P2SH,STRICTENC", "alt stack not shared between sig/pubkey"],
81
+
82
+ ["IFDUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"],
83
+ ["DROP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"],
84
+ ["DUP", "DEPTH 0 EQUAL", "P2SH,STRICTENC"],
85
+ ["1", "DUP 1 ADD 2 EQUALVERIFY 0 EQUAL", "P2SH,STRICTENC"],
86
+ ["NOP", "NIP", "P2SH,STRICTENC"],
87
+ ["NOP", "1 NIP", "P2SH,STRICTENC"],
88
+ ["NOP", "1 0 NIP", "P2SH,STRICTENC"],
89
+ ["NOP", "OVER 1", "P2SH,STRICTENC"],
90
+ ["1", "OVER", "P2SH,STRICTENC"],
91
+ ["0 1", "OVER DEPTH 3 EQUALVERIFY", "P2SH,STRICTENC"],
92
+ ["19 20 21", "PICK 19 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"],
93
+ ["NOP", "0 PICK", "P2SH,STRICTENC"],
94
+ ["1", "-1 PICK", "P2SH,STRICTENC"],
95
+ ["19 20 21", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"],
96
+ ["19 20 21", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"],
97
+ ["19 20 21", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "P2SH,STRICTENC"],
98
+ ["NOP", "0 ROLL", "P2SH,STRICTENC"],
99
+ ["1", "-1 ROLL", "P2SH,STRICTENC"],
100
+ ["19 20 21", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"],
101
+ ["19 20 21", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"],
102
+ ["19 20 21", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "P2SH,STRICTENC"],
103
+ ["NOP", "ROT 1", "P2SH,STRICTENC"],
104
+ ["NOP", "1 ROT 1", "P2SH,STRICTENC"],
105
+ ["NOP", "1 2 ROT 1", "P2SH,STRICTENC"],
106
+ ["NOP", "0 1 2 ROT", "P2SH,STRICTENC"],
107
+ ["NOP", "SWAP 1", "P2SH,STRICTENC"],
108
+ ["1", "SWAP 1", "P2SH,STRICTENC"],
109
+ ["0 1", "SWAP 1 EQUALVERIFY", "P2SH,STRICTENC"],
110
+ ["NOP", "TUCK 1", "P2SH,STRICTENC"],
111
+ ["1", "TUCK 1", "P2SH,STRICTENC"],
112
+ ["1 0", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "P2SH,STRICTENC"],
113
+ ["NOP", "2DUP 1", "P2SH,STRICTENC"],
114
+ ["1", "2DUP 1", "P2SH,STRICTENC"],
115
+ ["NOP", "3DUP 1", "P2SH,STRICTENC"],
116
+ ["1", "3DUP 1", "P2SH,STRICTENC"],
117
+ ["1 2", "3DUP 1", "P2SH,STRICTENC"],
118
+ ["NOP", "2OVER 1", "P2SH,STRICTENC"],
119
+ ["1", "2 3 2OVER 1", "P2SH,STRICTENC"],
120
+ ["NOP", "2SWAP 1", "P2SH,STRICTENC"],
121
+ ["1", "2 3 2SWAP 1", "P2SH,STRICTENC"],
122
+
123
+ ["'a' 'b'", "CAT", "P2SH,STRICTENC", "CAT disabled"],
124
+ ["'a' 'b' 0", "IF CAT ELSE 1 ENDIF", "P2SH,STRICTENC", "CAT disabled"],
125
+ ["'abc' 1 1", "SUBSTR", "P2SH,STRICTENC", "SUBSTR disabled"],
126
+ ["'abc' 1 1 0", "IF SUBSTR ELSE 1 ENDIF", "P2SH,STRICTENC", "SUBSTR disabled"],
127
+ ["'abc' 2 0", "IF LEFT ELSE 1 ENDIF", "P2SH,STRICTENC", "LEFT disabled"],
128
+ ["'abc' 2 0", "IF RIGHT ELSE 1 ENDIF", "P2SH,STRICTENC", "RIGHT disabled"],
129
+
130
+ ["NOP", "SIZE 1", "P2SH,STRICTENC"],
131
+
132
+ ["'abc'", "IF INVERT ELSE 1 ENDIF", "P2SH,STRICTENC", "INVERT disabled"],
133
+ ["1 2 0 IF AND ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "AND disabled"],
134
+ ["1 2 0 IF OR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "OR disabled"],
135
+ ["1 2 0 IF XOR ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "XOR disabled"],
136
+ ["2 0 IF 2MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "2MUL disabled"],
137
+ ["2 0 IF 2DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "2DIV disabled"],
138
+ ["2 2 0 IF MUL ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "MUL disabled"],
139
+ ["2 2 0 IF DIV ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "DIV disabled"],
140
+ ["2 2 0 IF MOD ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "MOD disabled"],
141
+ ["2 2 0 IF LSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "LSHIFT disabled"],
142
+ ["2 2 0 IF RSHIFT ELSE 1 ENDIF", "NOP", "P2SH,STRICTENC", "RSHIFT disabled"],
143
+
144
+ ["", "EQUAL NOT", "P2SH,STRICTENC", "EQUAL must error when there are no stack items"],
145
+ ["0", "EQUAL NOT", "P2SH,STRICTENC", "EQUAL must error when there are not 2 stack items"],
146
+ ["0 1","EQUAL", "P2SH,STRICTENC"],
147
+ ["1 1 ADD", "0 EQUAL", "P2SH,STRICTENC"],
148
+ ["11 1 ADD 12 SUB", "11 EQUAL", "P2SH,STRICTENC"],
149
+
150
+ ["2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "arithmetic operands must be in range [-2^31...2^31] "],
151
+ ["-2147483648 0 ADD", "NOP", "P2SH,STRICTENC", "arithmetic operands must be in range [-2^31...2^31] "],
152
+ ["2147483647 DUP ADD", "4294967294 NUMEQUAL", "P2SH,STRICTENC", "NUMEQUAL must be in numeric range"],
153
+ ["'abcdef' NOT", "0 EQUAL", "P2SH,STRICTENC", "NOT is an arithmetic operand"],
154
+
155
+ ["2 DUP MUL", "4 EQUAL", "P2SH,STRICTENC", "disabled"],
156
+ ["2 DUP DIV", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
157
+ ["2 2MUL", "4 EQUAL", "P2SH,STRICTENC", "disabled"],
158
+ ["2 2DIV", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
159
+ ["7 3 MOD", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
160
+ ["2 2 LSHIFT", "8 EQUAL", "P2SH,STRICTENC", "disabled"],
161
+ ["2 1 RSHIFT", "1 EQUAL", "P2SH,STRICTENC", "disabled"],
162
+
163
+ ["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 2 EQUAL", "P2SH,STRICTENC"],
164
+ ["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_11' EQUAL", "P2SH,STRICTENC"],
165
+
166
+ ["Ensure 100% coverage of discouraged NOPS"],
167
+ ["1", "NOP1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
168
+ ["1", "NOP2", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
169
+ ["1", "NOP3", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
170
+ ["1", "NOP4", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
171
+ ["1", "NOP5", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
172
+ ["1", "NOP6", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
173
+ ["1", "NOP7", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
174
+ ["1", "NOP8", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
175
+ ["1", "NOP9", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
176
+ ["1", "NOP10", "P2SH,DISCOURAGE_UPGRADABLE_NOPS"],
177
+
178
+ ["NOP10", "1", "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in scriptSig"],
179
+
180
+ ["1 0x01 0xb9", "HASH160 0x14 0x15727299b05b45fdaf9ac9ecf7565cfe27c3e567 EQUAL",
181
+ "P2SH,DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"],
182
+
183
+ ["0x50","1", "P2SH,STRICTENC", "opcode 0x50 is reserved"],
184
+ ["1", "IF 0xba ELSE 1 ENDIF", "P2SH,STRICTENC", "opcodes above NOP10 invalid if executed"],
185
+ ["1", "IF 0xbb ELSE 1 ENDIF", "P2SH,STRICTENC"],
186
+ ["1", "IF 0xbc ELSE 1 ENDIF", "P2SH,STRICTENC"],
187
+ ["1", "IF 0xbd ELSE 1 ENDIF", "P2SH,STRICTENC"],
188
+ ["1", "IF 0xbe ELSE 1 ENDIF", "P2SH,STRICTENC"],
189
+ ["1", "IF 0xbf ELSE 1 ENDIF", "P2SH,STRICTENC"],
190
+ ["1", "IF 0xc0 ELSE 1 ENDIF", "P2SH,STRICTENC"],
191
+ ["1", "IF 0xc1 ELSE 1 ENDIF", "P2SH,STRICTENC"],
192
+ ["1", "IF 0xc2 ELSE 1 ENDIF", "P2SH,STRICTENC"],
193
+ ["1", "IF 0xc3 ELSE 1 ENDIF", "P2SH,STRICTENC"],
194
+ ["1", "IF 0xc4 ELSE 1 ENDIF", "P2SH,STRICTENC"],
195
+ ["1", "IF 0xc5 ELSE 1 ENDIF", "P2SH,STRICTENC"],
196
+ ["1", "IF 0xc6 ELSE 1 ENDIF", "P2SH,STRICTENC"],
197
+ ["1", "IF 0xc7 ELSE 1 ENDIF", "P2SH,STRICTENC"],
198
+ ["1", "IF 0xc8 ELSE 1 ENDIF", "P2SH,STRICTENC"],
199
+ ["1", "IF 0xc9 ELSE 1 ENDIF", "P2SH,STRICTENC"],
200
+ ["1", "IF 0xca ELSE 1 ENDIF", "P2SH,STRICTENC"],
201
+ ["1", "IF 0xcb ELSE 1 ENDIF", "P2SH,STRICTENC"],
202
+ ["1", "IF 0xcc ELSE 1 ENDIF", "P2SH,STRICTENC"],
203
+ ["1", "IF 0xcd ELSE 1 ENDIF", "P2SH,STRICTENC"],
204
+ ["1", "IF 0xce ELSE 1 ENDIF", "P2SH,STRICTENC"],
205
+ ["1", "IF 0xcf ELSE 1 ENDIF", "P2SH,STRICTENC"],
206
+ ["1", "IF 0xd0 ELSE 1 ENDIF", "P2SH,STRICTENC"],
207
+ ["1", "IF 0xd1 ELSE 1 ENDIF", "P2SH,STRICTENC"],
208
+ ["1", "IF 0xd2 ELSE 1 ENDIF", "P2SH,STRICTENC"],
209
+ ["1", "IF 0xd3 ELSE 1 ENDIF", "P2SH,STRICTENC"],
210
+ ["1", "IF 0xd4 ELSE 1 ENDIF", "P2SH,STRICTENC"],
211
+ ["1", "IF 0xd5 ELSE 1 ENDIF", "P2SH,STRICTENC"],
212
+ ["1", "IF 0xd6 ELSE 1 ENDIF", "P2SH,STRICTENC"],
213
+ ["1", "IF 0xd7 ELSE 1 ENDIF", "P2SH,STRICTENC"],
214
+ ["1", "IF 0xd8 ELSE 1 ENDIF", "P2SH,STRICTENC"],
215
+ ["1", "IF 0xd9 ELSE 1 ENDIF", "P2SH,STRICTENC"],
216
+ ["1", "IF 0xda ELSE 1 ENDIF", "P2SH,STRICTENC"],
217
+ ["1", "IF 0xdb ELSE 1 ENDIF", "P2SH,STRICTENC"],
218
+ ["1", "IF 0xdc ELSE 1 ENDIF", "P2SH,STRICTENC"],
219
+ ["1", "IF 0xdd ELSE 1 ENDIF", "P2SH,STRICTENC"],
220
+ ["1", "IF 0xde ELSE 1 ENDIF", "P2SH,STRICTENC"],
221
+ ["1", "IF 0xdf ELSE 1 ENDIF", "P2SH,STRICTENC"],
222
+ ["1", "IF 0xe0 ELSE 1 ENDIF", "P2SH,STRICTENC"],
223
+ ["1", "IF 0xe1 ELSE 1 ENDIF", "P2SH,STRICTENC"],
224
+ ["1", "IF 0xe2 ELSE 1 ENDIF", "P2SH,STRICTENC"],
225
+ ["1", "IF 0xe3 ELSE 1 ENDIF", "P2SH,STRICTENC"],
226
+ ["1", "IF 0xe4 ELSE 1 ENDIF", "P2SH,STRICTENC"],
227
+ ["1", "IF 0xe5 ELSE 1 ENDIF", "P2SH,STRICTENC"],
228
+ ["1", "IF 0xe6 ELSE 1 ENDIF", "P2SH,STRICTENC"],
229
+ ["1", "IF 0xe7 ELSE 1 ENDIF", "P2SH,STRICTENC"],
230
+ ["1", "IF 0xe8 ELSE 1 ENDIF", "P2SH,STRICTENC"],
231
+ ["1", "IF 0xe9 ELSE 1 ENDIF", "P2SH,STRICTENC"],
232
+ ["1", "IF 0xea ELSE 1 ENDIF", "P2SH,STRICTENC"],
233
+ ["1", "IF 0xeb ELSE 1 ENDIF", "P2SH,STRICTENC"],
234
+ ["1", "IF 0xec ELSE 1 ENDIF", "P2SH,STRICTENC"],
235
+ ["1", "IF 0xed ELSE 1 ENDIF", "P2SH,STRICTENC"],
236
+ ["1", "IF 0xee ELSE 1 ENDIF", "P2SH,STRICTENC"],
237
+ ["1", "IF 0xef ELSE 1 ENDIF", "P2SH,STRICTENC"],
238
+ ["1", "IF 0xf0 ELSE 1 ENDIF", "P2SH,STRICTENC"],
239
+ ["1", "IF 0xf1 ELSE 1 ENDIF", "P2SH,STRICTENC"],
240
+ ["1", "IF 0xf2 ELSE 1 ENDIF", "P2SH,STRICTENC"],
241
+ ["1", "IF 0xf3 ELSE 1 ENDIF", "P2SH,STRICTENC"],
242
+ ["1", "IF 0xf4 ELSE 1 ENDIF", "P2SH,STRICTENC"],
243
+ ["1", "IF 0xf5 ELSE 1 ENDIF", "P2SH,STRICTENC"],
244
+ ["1", "IF 0xf6 ELSE 1 ENDIF", "P2SH,STRICTENC"],
245
+ ["1", "IF 0xf7 ELSE 1 ENDIF", "P2SH,STRICTENC"],
246
+ ["1", "IF 0xf8 ELSE 1 ENDIF", "P2SH,STRICTENC"],
247
+ ["1", "IF 0xf9 ELSE 1 ENDIF", "P2SH,STRICTENC"],
248
+ ["1", "IF 0xfa ELSE 1 ENDIF", "P2SH,STRICTENC"],
249
+ ["1", "IF 0xfb ELSE 1 ENDIF", "P2SH,STRICTENC"],
250
+ ["1", "IF 0xfc ELSE 1 ENDIF", "P2SH,STRICTENC"],
251
+ ["1", "IF 0xfd ELSE 1 ENDIF", "P2SH,STRICTENC"],
252
+ ["1", "IF 0xfe ELSE 1 ENDIF", "P2SH,STRICTENC"],
253
+ ["1", "IF 0xff ELSE 1 ENDIF", "P2SH,STRICTENC"],
254
+
255
+ ["1 IF 1 ELSE", "0xff ENDIF", "P2SH,STRICTENC", "invalid because scriptSig and scriptPubKey are processed separately"],
256
+
257
+ ["NOP", "RIPEMD160", "P2SH,STRICTENC"],
258
+ ["NOP", "SHA1", "P2SH,STRICTENC"],
259
+ ["NOP", "SHA256", "P2SH,STRICTENC"],
260
+ ["NOP", "HASH160", "P2SH,STRICTENC"],
261
+ ["NOP", "HASH256", "P2SH,STRICTENC"],
262
+
263
+ ["NOP",
264
+ "'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'",
265
+ "P2SH,STRICTENC",
266
+ ">520 byte push"],
267
+ ["0",
268
+ "IF 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' ENDIF 1",
269
+ "P2SH,STRICTENC",
270
+ ">520 byte push in non-executed IF branch"],
271
+ ["1",
272
+ "0x61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
273
+ "P2SH,STRICTENC",
274
+ ">201 opcodes executed. 0x61 is NOP"],
275
+ ["0",
276
+ "IF 0x6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 ENDIF 1",
277
+ "P2SH,STRICTENC",
278
+ ">201 opcodes including non-executed IF branch. 0x61 is NOP"],
279
+ ["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
280
+ "1 2 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
281
+ "P2SH,STRICTENC",
282
+ ">1,000 stack size (0x6f is 3DUP)"],
283
+ ["1 2 3 4 5 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
284
+ "1 TOALTSTACK 2 TOALTSTACK 3 4 5 6 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
285
+ "P2SH,STRICTENC",
286
+ ">1,000 stack+altstack size"],
287
+ ["NOP",
288
+ "0 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' 0x6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f 2DUP 0x616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
289
+ "P2SH,STRICTENC",
290
+ "10,001-byte scriptPubKey"],
291
+
292
+ ["NOP1","NOP10", "P2SH,STRICTENC"],
293
+
294
+ ["1","VER", "P2SH,STRICTENC", "OP_VER is reserved"],
295
+ ["1","VERIF", "P2SH,STRICTENC", "OP_VERIF is reserved"],
296
+ ["1","VERNOTIF", "P2SH,STRICTENC", "OP_VERNOTIF is reserved"],
297
+ ["1","RESERVED", "P2SH,STRICTENC", "OP_RESERVED is reserved"],
298
+ ["1","RESERVED1", "P2SH,STRICTENC", "OP_RESERVED1 is reserved"],
299
+ ["1","RESERVED2", "P2SH,STRICTENC", "OP_RESERVED2 is reserved"],
300
+ ["1","0xba", "P2SH,STRICTENC", "0xba == OP_NOP10 + 1"],
301
+
302
+ ["2147483648", "1ADD 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers"],
303
+ ["2147483648", "NEGATE 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers"],
304
+ ["-2147483648", "1ADD 1", "P2SH,STRICTENC", "Because we use a sign bit, -2147483648 is also 5 bytes"],
305
+ ["2147483647", "1ADD 1SUB 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers, even if the result is 4-bytes"],
306
+ ["2147483648", "1SUB 1", "P2SH,STRICTENC", "We cannot do math on 5-byte integers, even if the result is 4-bytes"],
307
+
308
+ ["2147483648 1", "BOOLOR 1", "P2SH,STRICTENC", "We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)"],
309
+ ["2147483648 1", "BOOLAND 1", "P2SH,STRICTENC", "We cannot do BOOLAND on 5-byte integers"],
310
+
311
+ ["1", "1 ENDIF", "P2SH,STRICTENC", "ENDIF without IF"],
312
+ ["1", "IF 1", "P2SH,STRICTENC", "IF without ENDIF"],
313
+ ["1 IF 1", "ENDIF", "P2SH,STRICTENC", "IFs don't carry over"],
314
+
315
+ ["NOP", "IF 1 ENDIF", "P2SH,STRICTENC", "The following tests check the if(stack.size() < N) tests in each opcode"],
316
+ ["NOP", "NOTIF 1 ENDIF", "P2SH,STRICTENC", "They are here to catch copy-and-paste errors"],
317
+ ["NOP", "VERIFY 1", "P2SH,STRICTENC", "Most of them are duplicated elsewhere,"],
318
+
319
+ ["NOP", "TOALTSTACK 1", "P2SH,STRICTENC", "but, hey, more is always better, right?"],
320
+ ["1", "FROMALTSTACK", "P2SH,STRICTENC"],
321
+ ["1", "2DROP 1", "P2SH,STRICTENC"],
322
+ ["1", "2DUP", "P2SH,STRICTENC"],
323
+ ["1 1", "3DUP", "P2SH,STRICTENC"],
324
+ ["1 1 1", "2OVER", "P2SH,STRICTENC"],
325
+ ["1 1 1 1 1", "2ROT", "P2SH,STRICTENC"],
326
+ ["1 1 1", "2SWAP", "P2SH,STRICTENC"],
327
+ ["NOP", "IFDUP 1", "P2SH,STRICTENC"],
328
+ ["NOP", "DROP 1", "P2SH,STRICTENC"],
329
+ ["NOP", "DUP 1", "P2SH,STRICTENC"],
330
+ ["1", "NIP", "P2SH,STRICTENC"],
331
+ ["1", "OVER", "P2SH,STRICTENC"],
332
+ ["1 1 1 3", "PICK", "P2SH,STRICTENC"],
333
+ ["0", "PICK 1", "P2SH,STRICTENC"],
334
+ ["1 1 1 3", "ROLL", "P2SH,STRICTENC"],
335
+ ["0", "ROLL 1", "P2SH,STRICTENC"],
336
+ ["1 1", "ROT", "P2SH,STRICTENC"],
337
+ ["1", "SWAP", "P2SH,STRICTENC"],
338
+ ["1", "TUCK", "P2SH,STRICTENC"],
339
+
340
+ ["NOP", "SIZE 1", "P2SH,STRICTENC"],
341
+
342
+ ["1", "EQUAL 1", "P2SH,STRICTENC"],
343
+ ["1", "EQUALVERIFY 1", "P2SH,STRICTENC"],
344
+
345
+ ["NOP", "1ADD 1", "P2SH,STRICTENC"],
346
+ ["NOP", "1SUB 1", "P2SH,STRICTENC"],
347
+ ["NOP", "NEGATE 1", "P2SH,STRICTENC"],
348
+ ["NOP", "ABS 1", "P2SH,STRICTENC"],
349
+ ["NOP", "NOT 1", "P2SH,STRICTENC"],
350
+ ["NOP", "0NOTEQUAL 1", "P2SH,STRICTENC"],
351
+
352
+ ["1", "ADD", "P2SH,STRICTENC"],
353
+ ["1", "SUB", "P2SH,STRICTENC"],
354
+ ["1", "BOOLAND", "P2SH,STRICTENC"],
355
+ ["1", "BOOLOR", "P2SH,STRICTENC"],
356
+ ["1", "NUMEQUAL", "P2SH,STRICTENC"],
357
+ ["1", "NUMEQUALVERIFY 1", "P2SH,STRICTENC"],
358
+ ["1", "NUMNOTEQUAL", "P2SH,STRICTENC"],
359
+ ["1", "LESSTHAN", "P2SH,STRICTENC"],
360
+ ["1", "GREATERTHAN", "P2SH,STRICTENC"],
361
+ ["1", "LESSTHANOREQUAL", "P2SH,STRICTENC"],
362
+ ["1", "GREATERTHANOREQUAL", "P2SH,STRICTENC"],
363
+ ["1", "MIN", "P2SH,STRICTENC"],
364
+ ["1", "MAX", "P2SH,STRICTENC"],
365
+ ["1 1", "WITHIN", "P2SH,STRICTENC"],
366
+
367
+ ["NOP", "RIPEMD160 1", "P2SH,STRICTENC"],
368
+ ["NOP", "SHA1 1", "P2SH,STRICTENC"],
369
+ ["NOP", "SHA256 1", "P2SH,STRICTENC"],
370
+ ["NOP", "HASH160 1", "P2SH,STRICTENC"],
371
+ ["NOP", "HASH256 1", "P2SH,STRICTENC"],
372
+
373
+ ["Increase CHECKSIG and CHECKMULTISIG negative test coverage"],
374
+ ["", "CHECKSIG NOT", "STRICTENC", "CHECKSIG must error when there are no stack items"],
375
+ ["0", "CHECKSIG NOT", "STRICTENC", "CHECKSIG must error when there are not 2 stack items"],
376
+ ["", "CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are no stack items"],
377
+ ["", "-1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when the specified number of pubkeys is negative"],
378
+ ["", "1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are not enough pubkeys on the stack"],
379
+ ["", "-1 0 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when the specified number of signatures is negative"],
380
+ ["", "1 'pk1' 1 CHECKMULTISIG NOT", "STRICTENC", "CHECKMULTISIG must error when there are not enough signatures on the stack"],
381
+ ["", "'dummy' 'sig1' 1 'pk1' 1 CHECKMULTISIG IF 1 ENDIF", "", "CHECKMULTISIG must push false to stack when signature is invalid when NOT in strict enc mode"],
382
+
383
+ ["",
384
+ "0 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG 0 0 CHECKMULTISIG",
385
+ "P2SH,STRICTENC",
386
+ "202 CHECKMULTISIGS, fails due to 201 op limit"],
387
+
388
+ ["1",
389
+ "0 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY 0 0 CHECKMULTISIGVERIFY",
390
+ "P2SH,STRICTENC"],
391
+
392
+ ["",
393
+ "NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG",
394
+ "P2SH,STRICTENC",
395
+ "Fails due to 201 sig op limit"],
396
+
397
+ ["1",
398
+ "NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY 0 0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY",
399
+ "P2SH,STRICTENC"],
400
+
401
+
402
+ ["0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21", "21 CHECKMULTISIG 1", "P2SH,STRICTENC", "nPubKeys > 20"],
403
+ ["0 'sig' 1 0", "CHECKMULTISIG 1", "P2SH,STRICTENC", "nSigs > nPubKeys"],
404
+
405
+
406
+ ["NOP 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC", "Tests for Script.IsPushOnly()"],
407
+ ["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "P2SH,STRICTENC"],
408
+
409
+ ["0 0x01 0x50", "HASH160 0x14 0xece424a6bb6ddf4db592c0faed60685047a361b1 EQUAL", "P2SH,STRICTENC", "OP_RESERVED in P2SH should fail"],
410
+ ["0 0x01 VER", "HASH160 0x14 0x0f4d7845db968f2a81b530b6f3c1d6246d4c7e01 EQUAL", "P2SH,STRICTENC", "OP_VER in P2SH should fail"],
411
+
412
+ ["0x00", "'00' EQUAL", "P2SH,STRICTENC", "Basic OP_0 execution"],
413
+
414
+ ["MINIMALDATA enforcement for PUSHDATAs"],
415
+
416
+ ["0x4c 0x00", "DROP 1", "MINIMALDATA", "Empty vector minimally represented by OP_0"],
417
+ ["0x01 0x81", "DROP 1", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE"],
418
+ ["0x01 0x01", "DROP 1", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16"],
419
+ ["0x01 0x02", "DROP 1", "MINIMALDATA"],
420
+ ["0x01 0x03", "DROP 1", "MINIMALDATA"],
421
+ ["0x01 0x04", "DROP 1", "MINIMALDATA"],
422
+ ["0x01 0x05", "DROP 1", "MINIMALDATA"],
423
+ ["0x01 0x06", "DROP 1", "MINIMALDATA"],
424
+ ["0x01 0x07", "DROP 1", "MINIMALDATA"],
425
+ ["0x01 0x08", "DROP 1", "MINIMALDATA"],
426
+ ["0x01 0x09", "DROP 1", "MINIMALDATA"],
427
+ ["0x01 0x0a", "DROP 1", "MINIMALDATA"],
428
+ ["0x01 0x0b", "DROP 1", "MINIMALDATA"],
429
+ ["0x01 0x0c", "DROP 1", "MINIMALDATA"],
430
+ ["0x01 0x0d", "DROP 1", "MINIMALDATA"],
431
+ ["0x01 0x0e", "DROP 1", "MINIMALDATA"],
432
+ ["0x01 0x0f", "DROP 1", "MINIMALDATA"],
433
+ ["0x01 0x10", "DROP 1", "MINIMALDATA"],
434
+
435
+ ["0x4c 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
436
+ "PUSHDATA1 of 72 bytes minimally represented by direct push"],
437
+
438
+ ["0x4d 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
439
+ "PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"],
440
+
441
+ ["0x4e 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA",
442
+ "PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"],
443
+
444
+
445
+ ["MINIMALDATA enforcement for numeric arguments"],
446
+
447
+ ["0x01 0x00", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
448
+ ["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
449
+ ["0x01 0x80", "NOT DROP 1", "MINIMALDATA", "0x80 (negative zero) numequals 0"],
450
+ ["0x02 0x0080", "NOT DROP 1", "MINIMALDATA", "numequals 0"],
451
+ ["0x02 0x0500", "NOT DROP 1", "MINIMALDATA", "numequals 5"],
452
+ ["0x03 0x050000", "NOT DROP 1", "MINIMALDATA", "numequals 5"],
453
+ ["0x02 0x0580", "NOT DROP 1", "MINIMALDATA", "numequals -5"],
454
+ ["0x03 0x050080", "NOT DROP 1", "MINIMALDATA", "numequals -5"],
455
+ ["0x03 0xff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffff"],
456
+ ["0x03 0xff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xff7f"],
457
+ ["0x04 0xffff7f80", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffffff"],
458
+ ["0x04 0xffff7f00", "NOT DROP 1", "MINIMALDATA", "Minimal encoding is 0xffff7f"],
459
+
460
+ ["Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule"],
461
+
462
+ ["1 0x02 0x0000", "PICK DROP", "MINIMALDATA"],
463
+ ["1 0x02 0x0000", "ROLL DROP 1", "MINIMALDATA"],
464
+ ["0x02 0x0000", "1ADD DROP 1", "MINIMALDATA"],
465
+ ["0x02 0x0000", "1SUB DROP 1", "MINIMALDATA"],
466
+ ["0x02 0x0000", "NEGATE DROP 1", "MINIMALDATA"],
467
+ ["0x02 0x0000", "ABS DROP 1", "MINIMALDATA"],
468
+ ["0x02 0x0000", "NOT DROP 1", "MINIMALDATA"],
469
+ ["0x02 0x0000", "0NOTEQUAL DROP 1", "MINIMALDATA"],
470
+
471
+ ["0 0x02 0x0000", "ADD DROP 1", "MINIMALDATA"],
472
+ ["0x02 0x0000 0", "ADD DROP 1", "MINIMALDATA"],
473
+ ["0 0x02 0x0000", "SUB DROP 1", "MINIMALDATA"],
474
+ ["0x02 0x0000 0", "SUB DROP 1", "MINIMALDATA"],
475
+ ["0 0x02 0x0000", "BOOLAND DROP 1", "MINIMALDATA"],
476
+ ["0x02 0x0000 0", "BOOLAND DROP 1", "MINIMALDATA"],
477
+ ["0 0x02 0x0000", "BOOLOR DROP 1", "MINIMALDATA"],
478
+ ["0x02 0x0000 0", "BOOLOR DROP 1", "MINIMALDATA"],
479
+ ["0 0x02 0x0000", "NUMEQUAL DROP 1", "MINIMALDATA"],
480
+ ["0x02 0x0000 1", "NUMEQUAL DROP 1", "MINIMALDATA"],
481
+ ["0 0x02 0x0000", "NUMEQUALVERIFY 1", "MINIMALDATA"],
482
+ ["0x02 0x0000 0", "NUMEQUALVERIFY 1", "MINIMALDATA"],
483
+ ["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "MINIMALDATA"],
484
+ ["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "MINIMALDATA"],
485
+ ["0 0x02 0x0000", "LESSTHAN DROP 1", "MINIMALDATA"],
486
+ ["0x02 0x0000 0", "LESSTHAN DROP 1", "MINIMALDATA"],
487
+ ["0 0x02 0x0000", "GREATERTHAN DROP 1", "MINIMALDATA"],
488
+ ["0x02 0x0000 0", "GREATERTHAN DROP 1", "MINIMALDATA"],
489
+ ["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "MINIMALDATA"],
490
+ ["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "MINIMALDATA"],
491
+ ["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA"],
492
+ ["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA"],
493
+ ["0 0x02 0x0000", "MIN DROP 1", "MINIMALDATA"],
494
+ ["0x02 0x0000 0", "MIN DROP 1", "MINIMALDATA"],
495
+ ["0 0x02 0x0000", "MAX DROP 1", "MINIMALDATA"],
496
+ ["0x02 0x0000 0", "MAX DROP 1", "MINIMALDATA"],
497
+
498
+ ["0x02 0x0000 0 0", "WITHIN DROP 1", "MINIMALDATA"],
499
+ ["0 0x02 0x0000 0", "WITHIN DROP 1", "MINIMALDATA"],
500
+ ["0 0 0x02 0x0000", "WITHIN DROP 1", "MINIMALDATA"],
501
+
502
+ ["0 0 0x02 0x0000", "CHECKMULTISIG DROP 1", "MINIMALDATA"],
503
+ ["0 0x02 0x0000 0", "CHECKMULTISIG DROP 1", "MINIMALDATA"],
504
+ ["0 0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "MINIMALDATA"],
505
+ ["0 0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "MINIMALDATA"],
506
+ ["0 0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "MINIMALDATA"],
507
+
508
+
509
+ ["Order of CHECKMULTISIG evaluation tests, inverted by swapping the order of"],
510
+ ["pubkeys/signatures so they fail due to the STRICTENC rules on validly encoded"],
511
+ ["signatures and pubkeys."],
512
+ [
513
+ "0 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
514
+ "2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0 2 CHECKMULTISIG NOT",
515
+ "STRICTENC",
516
+ "2-of-2 CHECKMULTISIG NOT with the first pubkey invalid, and both signatures validly encoded."
517
+ ],
518
+ [
519
+ "0 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 1",
520
+ "2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT",
521
+ "STRICTENC",
522
+ "2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but first signature invalid."
523
+ ],
524
+
525
+ ["Increase DERSIG test coverage"],
526
+ ["0x4a 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0 CHECKSIG NOT", "DERSIG", "Overly long signature is incorrectly encoded for DERSIG"],
527
+ ["0x25 0x30220220000000000000000000000000000000000000000000000000000000000000000000", "0 CHECKSIG NOT", "DERSIG", "Missing S is incorrectly encoded for DERSIG"],
528
+ ["0x27 0x3024021077777777777777777777777777777777020a7777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "S with invalid S length is incorrectly encoded for DERSIG"],
529
+ ["0x27 0x302403107777777777777777777777777777777702107777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "Non-integer R is incorrectly encoded for DERSIG"],
530
+ ["0x27 0x302402107777777777777777777777777777777703107777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "Non-integer S is incorrectly encoded for DERSIG"],
531
+ ["0x17 0x3014020002107777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "Zero-length R is incorrectly encoded for DERSIG"],
532
+ ["0x17 0x3014021077777777777777777777777777777777020001", "0 CHECKSIG NOT", "DERSIG", "Zero-length S is incorrectly encoded for DERSIG"],
533
+ ["0x27 0x302402107777777777777777777777777777777702108777777777777777777777777777777701", "0 CHECKSIG NOT", "DERSIG", "Negative S is incorrectly encoded for DERSIG"],
534
+
535
+ ["Automatically generated test cases"],
536
+ [
537
+ "0x47 0x304402200a5c6163f07b8c3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
538
+ "0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
539
+ "",
540
+ "P2PK, bad sig"
541
+ ],
542
+ [
543
+ "0x47 0x3044022034bb0494b50b8ef130e2185bb220265b9284ef5b4b8a8da4d8415df489c83b5102206259a26d9cc0a125ac26af6153b17c02956855ebe1467412f066e402f5f05d1201 0x21 0x03363d90d446b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640",
544
+ "DUP HASH160 0x14 0xc0834c0c158f53be706d234c38fd52de7eece656 EQUALVERIFY CHECKSIG",
545
+ "",
546
+ "P2PKH, bad pubkey"
547
+ ],
548
+ [
549
+ "0x47 0x304402204710a85181663b32d25c70ec2bbd14adff5ddfff6cb50d09e155ef5f541fc86c0220056b0cc949be9386ecc5f6c2ac0493269031dbb185781db90171b54ac127790201",
550
+ "0x41 0x048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf CHECKSIG",
551
+ "",
552
+ "P2PK anyonecanpay marked with normal hashtype"
553
+ ],
554
+ [
555
+ "0x47 0x3044022003fef42ed6c7be8917441218f525a60e2431be978e28b7aca4d7a532cc413ae8022067a1f82c74e8d69291b90d148778405c6257bbcfc2353cc38a3e1f22bf44254601 0x23 0x210279be667ef9dcbbac54a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac",
556
+ "HASH160 0x14 0x23b0ad3477f2178bc0b3eed26e4e6316f4e83aa1 EQUAL",
557
+ "P2SH",
558
+ "P2SH(P2PK), bad redeemscript"
559
+ ],
560
+ [
561
+ "0x47 0x304402204e2eb034be7b089534ac9e798cf6a2c79f38bcb34d1b179efd6f2de0841735db022071461beb056b5a7be1819da6a3e3ce3662831ecc298419ca101eb6887b5dd6a401 0x19 0x76a9147cf9c846cd4882efec4bf07e44ebdad495c94f4b88ac",
562
+ "HASH160 0x14 0x2df519943d5acc0ef5222091f9dfe3543f489a82 EQUAL",
563
+ "P2SH",
564
+ "P2SH(P2PKH), bad sig"
565
+ ],
566
+ [
567
+ "0 0x47 0x3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501 0x47 0x304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01 0",
568
+ "3 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 3 CHECKMULTISIG",
569
+ "",
570
+ "3-of-3, 2 sigs"
571
+ ],
572
+ [
573
+ "0 0x47 0x304402205b7d2c2f177ae76cfbbf14d589c113b0b35db753d305d5562dd0b61cbf366cfb02202e56f93c4f08a27f986cd424ffc48a462c3202c4902104d4d0ff98ed28f4bf8001 0 0x4c69 0x52210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179821038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f515082103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff464053ae",
574
+ "HASH160 0x14 0xc9e4a896d149702d0d1695434feddd52e24ad78d EQUAL",
575
+ "P2SH",
576
+ "P2SH(2-of-3), 1 sig"
577
+ ],
578
+ [
579
+ "0x47 0x304402200060558477337b9022e70534f1fea71a318caf836812465a2509931c5e7c4987022078ec32bd50ac9e03a349ba953dfd9fe1c8d2dd8bdb1d38ddca844d3d5c78c11801",
580
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
581
+ "DERSIG",
582
+ "P2PK with too much R padding"
583
+ ],
584
+ [
585
+ "0x48 0x304502202de8c03fc525285c9c535631019a5f2af7c6454fa9eb392a3756a4917c420edd02210046130bf2baf7cfc065067c8b9e33a066d9c15edcea9feb0ca2d233e3597925b401",
586
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
587
+ "DERSIG",
588
+ "P2PK with too much S padding"
589
+ ],
590
+ [
591
+ "0x47 0x30440220d7a0417c3f6d1a15094d1cf2a3378ca0503eb8a57630953a9e2987e21ddd0a6502207a6266d686c99090920249991d3d42065b6d43eb70187b219c0db82e4f94d1a201",
592
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
593
+ "DERSIG",
594
+ "P2PK with too little R padding"
595
+ ],
596
+ [
597
+ "0x47 0x30440220005ece1335e7f757a1a1f476a7fb5bd90964e8a022489f890614a04acfb734c002206c12b8294a6513c7710e8c82d3c23d75cdbfe83200eb7efb495701958501a5d601",
598
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG NOT",
599
+ "DERSIG",
600
+ "P2PK NOT with bad sig with too much R padding"
601
+ ],
602
+ [
603
+ "0x47 0x30440220005ece1335e7f657a1a1f476a7fb5bd90964e8a022489f890614a04acfb734c002206c12b8294a6513c7710e8c82d3c23d75cdbfe83200eb7efb495701958501a5d601",
604
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG NOT",
605
+ "",
606
+ "P2PK NOT with too much R padding but no DERSIG"
607
+ ],
608
+ [
609
+ "0x47 0x30440220005ece1335e7f657a1a1f476a7fb5bd90964e8a022489f890614a04acfb734c002206c12b8294a6513c7710e8c82d3c23d75cdbfe83200eb7efb495701958501a5d601",
610
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG NOT",
611
+ "DERSIG",
612
+ "P2PK NOT with too much R padding"
613
+ ],
614
+ [
615
+ "0x47 0x30440220d7a0417c3f6d1a15094d1cf2a3378ca0503eb8a57630953a9e2987e21ddd0a6502207a6266d686c99090920249991d3d42065b6d43eb70187b219c0db82e4f94d1a201",
616
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
617
+ "DERSIG",
618
+ "BIP66 example 1, with DERSIG"
619
+ ],
620
+ [
621
+ "0x47 0x304402208e43c0b91f7c1e5bc58e41c8185f8a6086e111b0090187968a86f2822462d3c902200a58f4076b1133b18ff1dc83ee51676e44c60cc608d9534e0df5ace0424fc0be01",
622
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG NOT",
623
+ "",
624
+ "BIP66 example 2, without DERSIG"
625
+ ],
626
+ [
627
+ "0x47 0x304402208e43c0b91f7c1e5bc58e41c8185f8a6086e111b0090187968a86f2822462d3c902200a58f4076b1133b18ff1dc83ee51676e44c60cc608d9534e0df5ace0424fc0be01",
628
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG NOT",
629
+ "DERSIG",
630
+ "BIP66 example 2, with DERSIG"
631
+ ],
632
+ [
633
+ "0",
634
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
635
+ "",
636
+ "BIP66 example 3, without DERSIG"
637
+ ],
638
+ [
639
+ "0",
640
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
641
+ "DERSIG",
642
+ "BIP66 example 3, with DERSIG"
643
+ ],
644
+ [
645
+ "1",
646
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
647
+ "",
648
+ "BIP66 example 5, without DERSIG"
649
+ ],
650
+ [
651
+ "1",
652
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG",
653
+ "DERSIG",
654
+ "BIP66 example 5, with DERSIG"
655
+ ],
656
+ [
657
+ "1",
658
+ "0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 CHECKSIG NOT",
659
+ "DERSIG",
660
+ "BIP66 example 6, with DERSIG"
661
+ ],
662
+ [
663
+ "0 0x47 0x30440220cae00b1444babfbf6071b0ba8707f6bd373da3df494d6e74119b0430c5db810502205d5231b8c5939c8ff0c82242656d6e06edb073d42af336c99fe8837c36ea39d501 0x47 0x3044022027c2714269ca5aeecc4d70edc88ba5ee0e3da4986e9216028f489ab4f1b8efce022022bd545b4951215267e4c5ceabd4c5350331b2e4a0b6494c56f361fa5a57a1a201",
664
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG",
665
+ "DERSIG",
666
+ "BIP66 example 7, with DERSIG"
667
+ ],
668
+ [
669
+ "0 0x47 0x30440220b119d67d389315308d1745f734a51ff3ec72e06081e84e236fdf9dc2f5d2a64802204b04e3bc38674c4422ea317231d642b56dc09d214a1ecbbf16ecca01ed996e2201 0x47 0x3044022079ea80afd538d9ada421b5101febeb6bc874e01dde5bca108c1d0479aec339a4022004576db8f66130d1df686ccf00935703689d69cf539438da1edab208b0d63c4801",
670
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG NOT",
671
+ "",
672
+ "BIP66 example 8, without DERSIG"
673
+ ],
674
+ [
675
+ "0 0x47 0x30440220b119d67d389315308d1745f734a51ff3ec72e06081e84e236fdf9dc2f5d2a64802204b04e3bc38674c4422ea317231d642b56dc09d214a1ecbbf16ecca01ed996e2201 0x47 0x3044022079ea80afd538d9ada421b5101febeb6bc874e01dde5bca108c1d0479aec339a4022004576db8f66130d1df686ccf00935703689d69cf539438da1edab208b0d63c4801",
676
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG NOT",
677
+ "DERSIG",
678
+ "BIP66 example 8, with DERSIG"
679
+ ],
680
+ [
681
+ "0 0 0x47 0x3044022081aa9d436f2154e8b6d600516db03d78de71df685b585a9807ead4210bd883490220534bb6bdf318a419ac0749660b60e78d17d515558ef369bf872eff405b676b2e01",
682
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG",
683
+ "",
684
+ "BIP66 example 9, without DERSIG"
685
+ ],
686
+ [
687
+ "0 0 0x47 0x3044022081aa9d436f2154e8b6d600516db03d78de71df685b585a9807ead4210bd883490220534bb6bdf318a419ac0749660b60e78d17d515558ef369bf872eff405b676b2e01",
688
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG",
689
+ "DERSIG",
690
+ "BIP66 example 9, with DERSIG"
691
+ ],
692
+ [
693
+ "0 0 0x47 0x30440220da6f441dc3b4b2c84cfa8db0cd5b34ed92c9e01686de5a800d40498b70c0dcac02207c2cf91b0c32b860c4cd4994be36cfb84caf8bb7c3a8e4d96a31b2022c5299c501",
694
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG NOT",
695
+ "DERSIG",
696
+ "BIP66 example 10, with DERSIG"
697
+ ],
698
+ [
699
+ "0 0x47 0x30440220cae00b1444babfbf6071b0ba8707f6bd373da3df494d6e74119b0430c5db810502205d5231b8c5939c8ff0c82242656d6e06edb073d42af336c99fe8837c36ea39d501 0",
700
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG",
701
+ "",
702
+ "BIP66 example 11, without DERSIG"
703
+ ],
704
+ [
705
+ "0 0x47 0x30440220cae00b1444babfbf6071b0ba8707f6bd373da3df494d6e74119b0430c5db810502205d5231b8c5939c8ff0c82242656d6e06edb073d42af336c99fe8837c36ea39d501 0",
706
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 2 CHECKMULTISIG",
707
+ "DERSIG",
708
+ "BIP66 example 11, with DERSIG"
709
+ ],
710
+ [
711
+ "0x48 0x304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb12510101",
712
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG",
713
+ "DERSIG",
714
+ "P2PK with multi-byte hashtype, with DERSIG"
715
+ ],
716
+ [
717
+ "0x48 0x304502203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022100ab1e3da73d67e32045a20e0b999e049978ea8d6ee5480d485fcf2ce0d03b2ef001",
718
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG",
719
+ "LOW_S",
720
+ "P2PK with high S"
721
+ ],
722
+ [
723
+ "0x47 0x3044022057292e2d4dfe775becdd0a9e6547997c728cdf35390f6a017da56d654d374e4902206b643be2fc53763b4e284845bfea2c597d2dc7759941dce937636c9d341b71ed01",
724
+ "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
725
+ "STRICTENC",
726
+ "P2PK with hybrid pubkey"
727
+ ],
728
+ [
729
+ "0x47 0x30440220035d554e3153c14950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
730
+ "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG NOT",
731
+ "",
732
+ "P2PK NOT with hybrid pubkey but no STRICTENC"
733
+ ],
734
+ [
735
+ "0x47 0x30440220035d554e3153c14950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
736
+ "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG NOT",
737
+ "STRICTENC",
738
+ "P2PK NOT with hybrid pubkey"
739
+ ],
740
+ [
741
+ "0x47 0x30440220035d554e3153c04950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
742
+ "0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG NOT",
743
+ "STRICTENC",
744
+ "P2PK NOT with invalid hybrid pubkey"
745
+ ],
746
+ [
747
+ "0 0x47 0x3044022079c7824d6c868e0e1a273484e28c2654a27d043c8a27f49f52cb72efed0759090220452bbbf7089574fa082095a4fc1b3a16bafcf97a3a34d745fafc922cce66b27201",
748
+ "1 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x41 0x0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 2 CHECKMULTISIG",
749
+ "STRICTENC",
750
+ "1-of-2 with the first 1 hybrid pubkey"
751
+ ],
752
+ [
753
+ "0x47 0x304402206177d513ec2cda444c021a1f4f656fc4c72ba108ae063e157eb86dc3575784940220666fc66702815d0e5413bb9b1df22aed44f5f1efb8b99d41dd5dc9a5be6d205205",
754
+ "0x41 0x048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf CHECKSIG",
755
+ "STRICTENC",
756
+ "P2PK with undefined hashtype"
757
+ ],
758
+ [
759
+ "0x47 0x304402207409b5b320296e5e2136a7b281a7f803028ca4ca44e2b83eebd46932677725de02202d4eea1c8d3c98e6f42614f54764e6e5e6542e213eb4d079737e9a8b6e9812ec05",
760
+ "0x41 0x048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf CHECKSIG NOT",
761
+ "STRICTENC",
762
+ "P2PK NOT with invalid sig and undefined hashtype"
763
+ ],
764
+ [
765
+ "1 0x47 0x3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501 0x47 0x304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01 0x47 0x304402200955d031fff71d8653221e85e36c3c85533d2312fc3045314b19650b7ae2f81002202a6bb8505e36201909d0921f01abff390ae6b7ff97bbf959f98aedeb0a56730901",
766
+ "3 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 3 CHECKMULTISIG",
767
+ "NULLDUMMY",
768
+ "3-of-3 with nonzero dummy"
769
+ ],
770
+ [
771
+ "1 0x47 0x304402201bb2edab700a5d020236df174fefed78087697143731f659bea59642c759c16d022061f42cdbae5bcd3e8790f20bf76687443436e94a634321c16a72aa54cbc7c2ea01 0x47 0x304402204bb4a64f2a6e5c7fb2f07fef85ee56fde5e6da234c6a984262307a20e99842d702206f8303aaba5e625d223897e2ffd3f88ef1bcffef55f38dc3768e5f2e94c923f901 0x47 0x3044022040c2809b71fffb155ec8b82fe7a27f666bd97f941207be4e14ade85a1249dd4d02204d56c85ec525dd18e29a0533d5ddf61b6b1bb32980c2f63edf951aebf7a27bfe01",
772
+ "3 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 3 CHECKMULTISIG NOT",
773
+ "NULLDUMMY",
774
+ "3-of-3 NOT with invalid sig with nonzero dummy"
775
+ ],
776
+ [
777
+ "0 0x47 0x304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901 DUP",
778
+ "2 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 0x21 0x038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508 2 CHECKMULTISIG",
779
+ "SIGPUSHONLY",
780
+ "2-of-2 with two identical keys and sigs pushed using OP_DUP"
781
+ ],
782
+ [
783
+ "0x47 0x304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb125101 0x23 0x2103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640ac",
784
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG",
785
+ "",
786
+ "P2SH(P2PK) with non-push scriptSig but no SIGPUSHONLY"
787
+ ],
788
+ [
789
+ "0x47 0x304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb125101 0x23 0x2103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640ac",
790
+ "0x21 0x03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640 CHECKSIG",
791
+ "SIGPUSHONLY",
792
+ "P2SH(P2PK) with non-push scriptSig"
793
+ ],
794
+ [
795
+ "0 0x47 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f01 0x46 0x304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f",
796
+ "2 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 0x21 0x02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5 3 CHECKMULTISIG",
797
+ "P2SH,STRICTENC",
798
+ "2-of-3 with one valid and one invalid signature due to parse error, nSigs > validSigs"
799
+ ],
800
+ [
801
+ "11 0x47 0x304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
802
+ "0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
803
+ "CLEANSTACK,P2SH",
804
+ "P2PK with unnecessary input"
805
+ ],
806
+ [
807
+ "11 0x47 0x304402202f7505132be14872581f35d74b759212d9da40482653f1ffa3116c3294a4a51702206adbf347a2240ca41c66522b1a22a41693610b76a8e7770645dc721d1635854f01 0x43 0x410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
808
+ "HASH160 0x14 0x31edc23bdafda4639e669f89ad6b2318dd79d032 EQUAL",
809
+ "CLEANSTACK,P2SH",
810
+ "P2SH with unnecessary input"
811
+ ],
812
+
813
+ ["The End"]
814
+ ]