btcruby 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/RELEASE_NOTES.md +8 -0
- data/lib/btcruby.rb +6 -1
- data/lib/btcruby/openssl.rb +23 -9
- data/lib/btcruby/{transaction_outpoint.rb → outpoint.rb} +14 -1
- data/lib/btcruby/script/cltv_plugin.rb +63 -0
- data/lib/btcruby/script/p2sh_plugin.rb +71 -0
- data/lib/btcruby/script/script.rb +7 -1
- data/lib/btcruby/script/script_error.rb +1 -1
- data/lib/btcruby/script/script_interpreter.rb +230 -120
- data/lib/btcruby/script/script_interpreter_plugin.rb +67 -0
- data/lib/btcruby/script/script_number.rb +2 -2
- data/lib/btcruby/script/transaction_signature_checker.rb +4 -1
- data/lib/btcruby/secp256k1.rb +77 -0
- data/lib/btcruby/transaction.rb +5 -4
- data/lib/btcruby/transaction_input.rb +15 -2
- data/lib/btcruby/transaction_output.rb +2 -2
- data/lib/btcruby/validation.rb +90 -0
- data/lib/btcruby/version.rb +1 -1
- data/spec/data/script_invalid.rb +814 -0
- data/spec/data/script_valid.rb +911 -0
- data/spec/data/tx_invalid.rb +197 -0
- data/spec/data/tx_valid.rb +233 -0
- data/spec/open_assets/issuance_id_spec.rb +1 -1
- data/spec/script_interpreter_spec.rb +85 -0
- data/spec/secp256k1_spec.rb +33 -0
- data/spec/spec_helper.rb +115 -0
- data/spec/transaction_spec.rb +153 -0
- metadata +16 -3
@@ -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
|
data/lib/btcruby/transaction.rb
CHANGED
@@ -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
|
-
|
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.
|
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(
|
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:
|
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 =
|
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
|
data/lib/btcruby/version.rb
CHANGED
@@ -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
|
+
]
|