dcrd/txscript/data/script_tests.json
Dave Collins d12e172fee
txscript: Remove P2SH flag from test data.
This removes the P2SH script verify flag from the various reference test
data since it is now a noop due to the corresponding flag being removed
from the script engine.
2018-07-02 12:02:14 -05:00

2177 lines
149 KiB
JSON

[
["Format is: [scriptSig, scriptPubKey, flags, expectedScriptError, ... comments]"],
["It is evaluated as if there was a crediting coinbase transaction with two 0"],
["pushes as scriptSig, and one output of 0 atoms and given scriptPubKey,"],
["followed by a spending transaction which spends this output as only input (and"],
["correct prevout hash), using the given scriptSig. All nLockTimes are 0, all"],
["nSequences are max."],
["Tests for test harness itself"],
["", "DEPTH 0 EQUAL", "NONE", "OK", "There should be an empty stack after scriptSig evaluation"],
[" ", "DEPTH 0 EQUAL", "NONE", "OK", "and multiple spaces should not change that"],
[" ", "DEPTH 0 EQUAL", "NONE", "OK"],
[" ", "DEPTH 0 EQUAL", "NONE", "OK"],
["1 2", "2 EQUALVERIFY 1 EQUAL", "NONE", "OK", "Similarly whitespace around and between symbols"],
["1 2", "2 EQUALVERIFY 1 EQUAL", "NONE", "OK"],
[" 1 2", "2 EQUALVERIFY 1 EQUAL", "NONE", "OK"],
["1 2 ", "2 EQUALVERIFY 1 EQUAL", "NONE", "OK"],
[" 1 2 ", "2 EQUALVERIFY 1 EQUAL", "NONE", "OK"],
["", "DEPTH", "NONE", "ERR_EVAL_FALSE", "There should be an empty stack after scriptSig evaluation"],
[" ", "DEPTH", "NONE", "ERR_EVAL_FALSE", "and multiple spaces should not change that"],
[" ", "DEPTH", "NONE", "ERR_EVAL_FALSE"],
[" ", "DEPTH", "NONE", "ERR_EVAL_FALSE"],
["", "", "NONE", "ERR_EVAL_FALSE"],
["", "NOP", "NONE", "ERR_EMPTY_STACK"],
["", "NOP DEPTH", "NONE", "ERR_EVAL_FALSE"],
["NOP", "", "NONE", "ERR_EMPTY_STACK"],
["NOP", "DEPTH", "NONE", "ERR_EVAL_FALSE"],
["NOP","NOP", "NONE", "ERR_EMPTY_STACK"],
["NOP","NOP DEPTH", "NONE", "ERR_EVAL_FALSE"],
["DEPTH", "", "NONE", "ERR_EVAL_FALSE"],
["0x51", "", "NONE", "OK", "Entries with hex notation are treated as raw bytes (OP_TRUE)"],
["OP_FALSE", "FALSE EQUAL", "NONE", "OK", "Both OP_NAME and NAME are valid"],
["0x00", "", "NONE", "ERR_EVAL_FALSE", "Entries with hex notation are treated as raw bytes (OP_FALSE)"],
["'abc'", "0x03 0x616263 EQUAL", "NONE", "OK", "Single quoted strings are pushed as data"],
["'12'", "12 EQUAL", "NONE", "ERR_EVAL_FALSE", "Single quoted numeric strings are pushed as data"],
["'abc'{3}", "'abcabcabc' EQUAL", "NONE", "OK", "Single quoted strings with brace suffix are repeated"],
["0x02aabb{2}", "DATA_2 0xaabb EQUALVERIFY DATA_2 0xaabb EQUAL", "NONE", "OK", "Raw bytes in hex notation with brace suffix are repeated"],
["<DATA_3 0xaabbcc>{2}", "DATA_3 0xaabbcc EQUALVERIFY DATA_3 0xaabbcc EQUAL", "NONE", "OK", "Multiple tokens in angular brackets with with brace suffix are repeated"],
["<'abc'{3}>{2}", "<'abcabcabc'>{2} EQUALVERIFY EQUAL", "NONE", "OK", "'abc'{3} results in a single push of 9 bytes while <'abcabcabc'>{2} is 2 pushes of 9 bytes each"],
["1", "", "NONE", "OK", "Execution result with non-zero value is success"],
["0x02 0x01 0x00", "", "NONE", "OK", "All bytes are significant, not only the last one"],
["0x09 0x0000000000000000 0x10", "", "NONE", "OK", "Result is based on raw bytes, not numeric interpretation (equals zero when cast to int64, which would be OP_FALSE)"],
["0x01 0x0b", "11 EQUAL", "NONE", "OK", "Push 1 byte"],
["0x02 0x417a", "'Az' EQUAL", "NONE", "OK", "Push 2 bytes"],
["0x4b 0x7a{75}", "'z'{75} EQUAL", "NONE", "OK", "Push 75 bytes"],
["0x4c 0x01 0x07","7 EQUAL", "NONE", "OK", "0x4c is OP_PUSHDATA1"],
["0x4d 0x0100 0x08","8 EQUAL", "NONE", "OK", "0x4d is OP_PUSHDATA2"],
["0x4e 0x01000000 0x09","9 EQUAL", "NONE", "OK", "0x4e is OP_PUSHDATA4"],
["0x4c01","0x01 NOP", "NONE", "ERR_MALFORMED_PUSH", "PUSHDATA1 with not enough bytes (stradle scripts to ensure data pushes are self-contained)"],
["0x4d0200ff","0x01 NOP", "NONE", "ERR_MALFORMED_PUSH", "PUSHDATA2 with not enough bytes (stradle scripts to ensure data pushes are self-contained)"],
["0x4e03000000ffff","0x01 NOP", "NONE", "ERR_MALFORMED_PUSH", "PUSHDATA4 with not enough bytes (stradle scripts to ensure data pushes are self-contained)"],
["Cat related test coverage"],
["'a' 'b'", "CAT 'ab' EQUAL", "NONE", "OK", "CAT concatenates two input args"],
["'a' 2147483648", "CAT 0x06 0x610000008000 EQUAL", "NONE", "OK", "CAT must treat arguments as bytes as opposed to numeric"],
["'' ''", "CAT '' EQUAL", "NONE", "OK", "CAT with two empty args must result in a single empty item on the stack"],
["'a' ''", "CAT 'a' EQUAL", "NONE", "OK", "CAT with empty right-hand side must return left-hand side"],
["'' 'b'", "CAT 'b' EQUAL", "NONE", "OK", "CAT with empty left-hand side must return right-hand side"],
["'a' 'b' 1", "IF CAT ELSE 1 ENDIF 'ab' EQUAL", "NONE", "OK", "CAT works in a conditional branch"],
["'a' 'b' 0", "IF CAT ELSE 2DROP 1 ENDIF 1 EQUAL", "NONE", "OK", "CAT must not modify the stack if in an unexecuted branch"],
["'a' 'b' BLAKE256", "CAT 0x21 0x61522ba694353828d1d4076ddc64abe920fd28eddf578d50793169dce196db7886 EQUAL", "NONE", "OK", "CAT must concatenate arbitrary bytes"],
["'a' 'b' 0x25 BLAKE256 CAT 0x21 0x61522ba694353828d1d4076ddc64abe920fd28eddf578d50793169dce196db7886 EQUAL",
"HASH160 0x14 0x1433a4999c484f9d7001cebd5990b902d54fb0c6 EQUAL", "NONE", "OK", "CAT must work in a P2SH script"],
["", "CAT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "CAT requires an input arg"],
["'ab'", "CAT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "CAT requires a second input arg"],
["'a' 'abcdefghijklmnop' DUP CAT DUP CAT DUP CAT DUP CAT DUP CAT DUP CAT DUP CAT", "CAT", "NONE", "ERR_PUSH_SIZE", "CAT must fail if the result would exceed max allowed stack item size"],
["Substring related test coverage"],
["'abcd' 1 0", "SUBSTR 'a' EQUAL", "NONE", "OK", "SUBSTR uses 0-based indices"],
["'abcd' 3 1", "SUBSTR 'bc' EQUAL", "NONE", "OK", "SUBSTR end index is exclusive"],
["'abcd' 1 1", "SUBSTR NOT", "NONE", "OK", "SUBSTR same index must produce empty byte push which is equivalent to FALSE"],
["'abcd' 4 4", "SUBSTR '' EQUAL", "NONE", "OK", "SUBSTR start and end index at exact length produces empty byte push"],
["'abcd' 2 1 1", "IF SUBSTR ELSE 0 ENDIF 'b' EQUAL", "NONE", "OK", "SUBSTR works in a conditional branch"],
["'abcd' 1 1 0", "IF SUBSTR ELSE 1 ENDIF", "NONE", "OK", "SUBSTR must not modify the stack if in an unexecuted branch"],
["'' 2147483647 2147483646", "SUBSTR '' EQUAL", "NONE", "OK", "SUBSTR of an empty string produces an empty byte push regardless of out of bounds indices <=4 bytes"],
["'abcd' 3 3 1SUB", "SUBSTR 'c' EQUAL", "NONE", "OK", "SUBSTR start index must work with the result of math operations"],
["'abcd' 4 1 SUB 2", "SUBSTR 'c' EQUAL", "NONE", "OK", "SUBSTR end index must work with the result of math operations"],
["", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR requires a string to operate on"],
["'abcd'", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR requires an end index"],
["'abcd' 2", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR requires a start index"],
["NOP 2 1", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR must only operate on byte pushes"],
["'abcd' 2 NOP", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR start index must be numeric"],
["'abcd' NOP 1", "SUBSTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "SUBSTR end index must be numeric"],
["'abcd' 2 1", "SUBSTR 'a' EQUAL", "NONE", "ERR_EVAL_FALSE", "SUBSTR uses 0-based indices"],
["'abcd' 2 1", "SUBSTR 'bc' EQUAL", "NONE", "ERR_EVAL_FALSE", "SUBSTR end index is exclusive"],
["'abcd' 1 1", "SUBSTR", "NONE", "ERR_EVAL_FALSE", "SUBSTR same index must produce empty byte push which is equivalent to FALSE"],
["'abcd' 1 -1", "SUBSTR NOT", "NONE", "ERR_NEGATIVE_SUBSTR_INDEX", "SUBSTR must fail with negative start index"],
["'abcd' -1 0", "SUBSTR NOT", "NONE", "ERR_NEGATIVE_SUBSTR_INDEX", "SUBSTR must fail with negative end index"],
["'abc' 4 4", "SUBSTR NOT", "NONE", "ERR_OVERFLOW_SUBSTR_INDEX", "SUBSTR must fail with start index too large"],
["'abc' 4 1", "SUBSTR NOT", "NONE", "ERR_OVERFLOW_SUBSTR_INDEX", "SUBSTR must fail with end index too large"],
["'abcd' 1 2", "SUBSTR 'b' EQUAL", "NONE", "ERR_OVERFLOW_SUBSTR_INDEX", "SUBSTR start index must be <= end index"],
["'' 4 2147483648", "SUBSTR NOT", "NONE", "ERR_OUT_OF_RANGE", "SUBSTR with empty string must fail with start index >4 bytes"],
["'' 2147483648 4", "SUBSTR NOT", "NONE", "ERR_OUT_OF_RANGE", "SUBSTR with empty string must fail with end index >4 bytes"],
["Left substring related test coverage"],
["'abcd' 0", "LEFT NOT", "NONE", "OK", "LEFT index of zero must produce empty byte push which is equivalent to FALSE"],
["'abcd' 1", "LEFT 'a' EQUAL", "NONE", "OK", "LEFT uses 0-based end index"],
["'abcd' 4", "LEFT 'abcd' EQUAL", "NONE", "OK", "LEFT produces entire string when end index equals string length"],
["'abcd' 2 1", "IF LEFT ELSE 0 ENDIF 'ab' EQUAL", "NONE", "OK", "LEFT works in a conditional branch"],
["'abcd' 0 0", "IF LEFT ELSE 1 ENDIF", "NONE", "OK", "LEFT must not modify the stack if in an unexecuted branch"],
["'' 2147483647", "LEFT '' EQUAL", "NONE", "OK", "LEFT of an empty string produces an empty byte push regardless of out of bounds index <=4 bytes"],
["", "LEFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LEFT requires a string to operate on"],
["'abcd'", "LEFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LEFT requires an index"],
["NOP 0", "LEFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LEFT must only operate on byte pushes"],
["'abcd' NOP", "LEFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LEFT index must be numeric"],
["'abcd' 0", "LEFT", "NONE", "ERR_EVAL_FALSE", "LEFT index of zero must produce empty byte push which is equivalent to FALSE"],
["'abcd' -1", "LEFT NOT", "NONE", "ERR_NEGATIVE_SUBSTR_INDEX", "LEFT must fail with negative index"],
["'abc' 4", "LEFT NOT", "NONE", "ERR_OVERFLOW_SUBSTR_INDEX", "LEFT must fail with index too large"],
["'' 2147483648", "LEFT NOT", "NONE", "ERR_OUT_OF_RANGE", "LEFT with empty string must fail with index >4 bytes"],
["Right substring related test coverage"],
["'abcd' 4", "RIGHT NOT", "NONE", "OK", "RIGHT index equal to length must produce empty byte push which is equivalent to FALSE"],
["'abcd' 3", "RIGHT 'd' EQUAL", "NONE", "OK", "RIGHT uses 0-based start index"],
["'abcd' 0", "RIGHT 'abcd' EQUAL", "NONE", "OK", "RIGHT produces entire string when start index is zero"],
["'abcd' 2 1", "IF RIGHT ELSE 0 ENDIF 'cd' EQUAL", "NONE", "OK", "RIGHT works in a conditional branch"],
["'abcd' 4 0", "IF RIGHT ELSE 1 ENDIF", "NONE", "OK", "RIGHT must not modify the stack if in an unexecuted branch"],
["'' 2147483647", "RIGHT '' EQUAL", "NONE", "OK", "RIGHT of an empty string produces an empty byte push regardless of out of bounds index <=4 bytes"],
["", "RIGHT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RIGHT requires a string to operate on"],
["'abcd'", "RIGHT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RIGHT requires an index"],
["NOP 0", "RIGHT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RIGHT must only operate on byte pushes"],
["'abcd' NOP", "RIGHT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RIGHT index must be numeric"],
["'abcd' 4", "RIGHT", "NONE", "ERR_EVAL_FALSE", "RIGHT index of same length must produce empty byte push which is equivalent to FALSE"],
["'abcd' -1", "RIGHT NOT", "NONE", "ERR_NEGATIVE_SUBSTR_INDEX", "RIGHT must fail with negative index"],
["'abc' 4", "RIGHT NOT", "NONE", "ERR_OVERFLOW_SUBSTR_INDEX", "RIGHT must fail with index too large"],
["'' 2147483648", "RIGHT NOT", "NONE", "ERR_OUT_OF_RANGE", "RIGHT with empty string must fail with index >4 bytes"],
["Right bit rotation related test coverage"],
["-2147483647 1", "ROTR -1073741824 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 1"],
["-2147483647 2", "ROTR 1610612736 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 2"],
["-2147483647 3", "ROTR 805306368 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 3"],
["-2147483647 4", "ROTR 402653184 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 4"],
["-2147483647 5", "ROTR 201326592 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 5"],
["-2147483647 6", "ROTR 100663296 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 6"],
["-2147483647 7", "ROTR 50331648 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 7"],
["-2147483647 8", "ROTR 25165824 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 8"],
["-2147483647 9", "ROTR 12582912 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 9"],
["-2147483647 10", "ROTR 6291456 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 10"],
["-2147483647 11", "ROTR 3145728 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 11"],
["-2147483647 12", "ROTR 1572864 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 12"],
["-2147483647 13", "ROTR 786432 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 13"],
["-2147483647 14", "ROTR 393216 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 14"],
["-2147483647 15", "ROTR 196608 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 15"],
["-2147483647 16", "ROTR 98304 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 16"],
["-2147483647 17", "ROTR 49152 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 17"],
["-2147483647 18", "ROTR 24576 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 18"],
["-2147483647 19", "ROTR 12288 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 19"],
["-2147483647 20", "ROTR 6144 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 20"],
["-2147483647 21", "ROTR 3072 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 21"],
["-2147483647 22", "ROTR 1536 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 22"],
["-2147483647 23", "ROTR 768 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 23"],
["-2147483647 24", "ROTR 384 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 24"],
["-2147483647 25", "ROTR 192 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 25"],
["-2147483647 26", "ROTR 96 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 26"],
["-2147483647 27", "ROTR 48 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 27"],
["-2147483647 28", "ROTR 24 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 28"],
["-2147483647 29", "ROTR 12 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 29"],
["-2147483647 30", "ROTR 6 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 30"],
["-2147483647 31", "ROTR 3 EQUAL", "NONE", "OK", "ROTR 0x80000001 >>> 31"],
["-1431655766 1", "ROTR 1431655765 EQUAL", "NONE", "OK", "ROTR 0xaaaaaaaa >>> 1"],
["1431655765 1", "ROTR -1431655766 EQUAL", "NONE", "OK", "ROTR 0x55555555 >>> 1"],
["1 1", "ROTR -2147483648 EQUAL", "NONE", "OK", "ROTR must be able to produce a 5-byte result (0x1 >>> 1)"],
["", "ROTR NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTR requires an input value"],
["1", "ROTR TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTR requires a rotation count"],
["NOP 1", "ROTR TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTR input value must be numeric"],
["1 NOP", "ROTR TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTR rotation count must be numeric"],
["1 -1", "ROTR 2 EQUAL", "NONE", "ERR_NEGATIVE_ROTATION", "ROTR must fail with negative rotation count"],
["1 32", "ROTR 1 EQUAL", "NONE", "ERR_OVERFLOW_ROTATION", "ROTR must fail with rotation count >31"],
["2147483648 1", "ROTR 1073741824 EQUAL", "NONE", "ERR_OUT_OF_RANGE", "ROTR must fail with input value >4 bytes"],
["1 2147483648", "ROTR TRUE", "NONE", "ERR_OUT_OF_RANGE", "ROTR must fail with rotation count >4 bytes"],
["Left bit rotation related test coverage"],
["-2147483647 1", "ROTL 3 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 1"],
["-2147483647 2", "ROTL 6 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 2"],
["-2147483647 3", "ROTL 12 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 3"],
["-2147483647 4", "ROTL 24 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 4"],
["-2147483647 5", "ROTL 48 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 5"],
["-2147483647 6", "ROTL 96 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 6"],
["-2147483647 7", "ROTL 192 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 7"],
["-2147483647 8", "ROTL 384 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 8"],
["-2147483647 9", "ROTL 768 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 9"],
["-2147483647 10", "ROTL 1536 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 10"],
["-2147483647 11", "ROTL 3072 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 11"],
["-2147483647 12", "ROTL 6144 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 12"],
["-2147483647 13", "ROTL 12288 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 13"],
["-2147483647 14", "ROTL 24576 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 14"],
["-2147483647 15", "ROTL 49152 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 15"],
["-2147483647 16", "ROTL 98304 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 16"],
["-2147483647 17", "ROTL 196608 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 17"],
["-2147483647 18", "ROTL 393216 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 18"],
["-2147483647 19", "ROTL 786432 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 19"],
["-2147483647 20", "ROTL 1572864 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 20"],
["-2147483647 21", "ROTL 3145728 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 21"],
["-2147483647 22", "ROTL 6291456 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 22"],
["-2147483647 23", "ROTL 12582912 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 23"],
["-2147483647 24", "ROTL 25165824 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 24"],
["-2147483647 25", "ROTL 50331648 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 25"],
["-2147483647 26", "ROTL 100663296 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 26"],
["-2147483647 27", "ROTL 201326592 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 27"],
["-2147483647 28", "ROTL 402653184 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 28"],
["-2147483647 29", "ROTL 805306368 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 29"],
["-2147483647 30", "ROTL 1610612736 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 30"],
["-2147483647 31", "ROTL -1073741824 EQUAL", "NONE", "OK", "ROTL 0x80000001 <<< 31"],
["-1431655766 1", "ROTL 1431655765 EQUAL", "NONE", "OK", "ROTL 0xaaaaaaaa <<< 1"],
["1431655765 1", "ROTL -1431655766 EQUAL", "NONE", "OK", "ROTL 0x55555555 <<< 1"],
["1 31", "ROTL -2147483648 EQUAL", "NONE", "OK", "ROTL must be able to produce a 5-byte result (0x1 <<< 31)"],
["", "ROTL NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTL requires an input value"],
["1", "ROTL TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTL requires a rotation count"],
["NOP 1", "ROTL NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTL input value must be numeric"],
["1 NOP", "ROTL TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "ROTL rotation count must be numeric"],
["2 -1", "ROTL 1 EQUAL", "NONE", "ERR_NEGATIVE_ROTATION", "ROTL must fail with negative rotation count"],
["1 32", "ROTL 1 EQUAL", "NONE", "ERR_OVERFLOW_ROTATION", "ROTL must fail with rotation count >31"],
["2147483648 1", "ROTL 1 EQUAL", "NONE", "ERR_OUT_OF_RANGE", "ROTL must fail with input value >4 bytes"],
["1 2147483648", "ROTL TRUE", "NONE", "ERR_OUT_OF_RANGE", "ROTL must fail with rotation count >4 bytes"],
["1 2 0 IF AND ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["1 2 0 IF OR ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["1 2 0 IF XOR ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 0 IF 2MUL ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 0 IF 2DIV ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 2 0 IF MUL ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 2 0 IF DIV ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 2 0 IF MOD ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 2 0 IF LSHIFT ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 2 0 IF RSHIFT ELSE 1 ENDIF", "NOP", "NONE", "OK"],
["2 DUP MUL", "4 EQUAL", "NONE", "OK"],
["Division related test coverage"],
["7 3", "DIV 2 EQUAL", "NONE", "OK", "DIV must perform integer division (7 / 3)"],
["8 3", "DIV 2 EQUAL", "NONE", "OK", "DIV must perform integer division (8 / 3)"],
["6 3", "DIV 2 EQUAL", "NONE", "OK", "DIV must support a positive dividend and divisor"],
["-6 3", "DIV -2 EQUAL", "NONE", "OK", "DIV must support a negative dividend with positive divisor"],
["6 -3", "DIV -2 EQUAL", "NONE", "OK", "DIV must support a positive dividend with negative divisor"],
["-6 -3", "DIV 2 EQUAL", "NONE", "OK", "DIV must support a negative dividend and divisor"],
["-2147483647 DUP", "DIV 1 EQUAL", "NONE", "OK", "DIV must support 4-byte negative int32"],
["2 DUP DIV", "1 EQUAL", "NONE", "OK", "DIV must support duplicated stack items"],
["", "DIV TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "DIV requires a divisor"],
["3", "DIV TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "DIV requires a dividend"],
["NOP 3", "DIV TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "DIV dividend must be numeric"],
["6 NOP", "DIV TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "DIV divisor must be numeric"],
["6 0", "DIV TRUE", "NONE", "ERR_DIVIDE_BY_ZERO", "DIV must fail with zero divisor"],
["2147483648 1073741824", "DIV TRUE", "NONE", "ERR_OUT_OF_RANGE", "DIV must fail with dividend >4 bytes"],
["1 2147483648", "DIV TRUE", "NONE", "ERR_OUT_OF_RANGE", "DIV must fail with divisor >4 bytes"],
["Modular division related test coverage"],
["7 3", "MOD 1 EQUAL", "NONE", "OK", "MOD must produce expected result (7%3)"],
["8 3", "MOD 2 EQUAL", "NONE", "OK", "MOD must produce expected result (8%3)"],
["6 3", "MOD 0 EQUAL", "NONE", "OK", "MOD must support a positive dividend and divisor"],
["-7 3", "MOD -1 EQUAL", "NONE", "OK", "MOD must support a negative dividend with positive divisor with negative result"],
["7 -3", "MOD 1 EQUAL", "NONE", "OK", "MOD must support a positive dividend with negative divisor with positve result"],
["-7 -3", "MOD -1 EQUAL", "NONE", "OK", "MOD must support a negative dividend and divisor with negative result"],
["-2147483647 1073741823", "MOD -1 EQUAL", "NONE", "OK", "MOD must support 4-byte negative int32"],
["", "MOD TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "MOD requires a divisor"],
["3", "MOD TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "MOD requires a dividend"],
["NOP 3", "MOD TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "MOD dividend must be numeric"],
["6 NOP", "MOD TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "MOD divisor must be numeric"],
["6 0", "MOD TRUE", "NONE", "ERR_DIVIDE_BY_ZERO", "MOD must fail with zero divisor"],
["2147483648 1073741824", "MOD TRUE", "NONE", "ERR_OUT_OF_RANGE", "MOD must fail with dividend >4 bytes"],
["1 2147483648", "MOD TRUE", "NONE", "ERR_OUT_OF_RANGE", "MOD must fail with divisor >4 bytes"],
["Left bit shift related test coverage"],
["1 1", "LSHIFT 2 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 1"],
["1 2", "LSHIFT 4 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 2"],
["1 3", "LSHIFT 8 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 3"],
["1 4", "LSHIFT 16 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 4"],
["1 5", "LSHIFT 32 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 5"],
["1 6", "LSHIFT 64 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 6"],
["1 7", "LSHIFT 128 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 7"],
["1 8", "LSHIFT 256 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 8"],
["1 9", "LSHIFT 512 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 9"],
["1 10", "LSHIFT 1024 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 10"],
["1 11", "LSHIFT 2048 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 11"],
["1 12", "LSHIFT 4096 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 12"],
["1 13", "LSHIFT 8192 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 13"],
["1 14", "LSHIFT 16384 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 14"],
["1 15", "LSHIFT 32768 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 15"],
["1 16", "LSHIFT 65536 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 16"],
["1 17", "LSHIFT 131072 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 17"],
["1 18", "LSHIFT 262144 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 18"],
["1 19", "LSHIFT 524288 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 19"],
["1 20", "LSHIFT 1048576 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 20"],
["1 21", "LSHIFT 2097152 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 21"],
["1 22", "LSHIFT 4194304 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 22"],
["1 23", "LSHIFT 8388608 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 23"],
["1 24", "LSHIFT 16777216 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 24"],
["1 25", "LSHIFT 33554432 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 25"],
["1 26", "LSHIFT 67108864 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 26"],
["1 27", "LSHIFT 134217728 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 27"],
["1 28", "LSHIFT 268435456 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 28"],
["1 29", "LSHIFT 536870912 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 29"],
["1 30", "LSHIFT 1073741824 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 30"],
["1 31", "LSHIFT -2147483648 EQUAL", "NONE", "OK", "LSHIFT must be able to produce a 5-byte result (0x1 << 31)"],
["1 32", "LSHIFT 0 EQUAL", "NONE", "OK", "LSHIFT 0x1 << 32"],
["-1431655766 1", "LSHIFT 1431655764 EQUAL", "NONE", "OK", "LSHIFT 0xaaaaaaaa << 1"],
["1431655765 1", "LSHIFT -1431655766 EQUAL", "NONE", "OK", "LSHIFT 0x55555555 << 1"],
["", "LSHIFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LSHIFT requires an input value"],
["1", "LSHIFT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "LSHIFT requires a shift count"],
["NOP 1", "LSHIFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "LSHIFT input value must be numeric"],
["1 NOP", "LSHIFT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "LSHIFT shift count must be numeric"],
["2 -1", "LSHIFT 1 EQUAL", "NONE", "ERR_NEGATIVE_SHIFT", "LSHIFT must fail with negative shift count"],
["1 33", "LSHIFT 0 EQUAL", "NONE", "ERR_OVERFLOW_SHIFT", "LSHIFT must fail with shift count >32"],
["2147483648 1", "LSHIFT TRUE", "NONE", "ERR_OUT_OF_RANGE", "LSHIFT must fail with input value >4 bytes"],
["1 2147483648", "LSHIFT TRUE", "NONE", "ERR_OUT_OF_RANGE", "LSHIFT must fail with shift count >4 bytes"],
["Right bit shift related test coverage"],
["1073741825 1", "RSHIFT 536870912 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 1"],
["1073741825 2", "RSHIFT 268435456 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 2"],
["1073741825 3", "RSHIFT 134217728 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 3"],
["1073741825 4", "RSHIFT 67108864 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 4"],
["1073741825 5", "RSHIFT 33554432 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 5"],
["1073741825 6", "RSHIFT 16777216 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 6"],
["1073741825 7", "RSHIFT 8388608 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 7"],
["1073741825 8", "RSHIFT 4194304 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 8"],
["1073741825 9", "RSHIFT 2097152 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 9"],
["1073741825 10", "RSHIFT 1048576 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 10"],
["1073741825 11", "RSHIFT 524288 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 11"],
["1073741825 12", "RSHIFT 262144 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 12"],
["1073741825 13", "RSHIFT 131072 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 13"],
["1073741825 14", "RSHIFT 65536 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 14"],
["1073741825 15", "RSHIFT 32768 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 15"],
["1073741825 16", "RSHIFT 16384 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 16"],
["1073741825 17", "RSHIFT 8192 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 17"],
["1073741825 18", "RSHIFT 4096 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 18"],
["1073741825 19", "RSHIFT 2048 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 19"],
["1073741825 20", "RSHIFT 1024 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 20"],
["1073741825 21", "RSHIFT 512 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 21"],
["1073741825 22", "RSHIFT 256 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 22"],
["1073741825 23", "RSHIFT 128 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 23"],
["1073741825 24", "RSHIFT 64 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 24"],
["1073741825 25", "RSHIFT 32 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 25"],
["1073741825 26", "RSHIFT 16 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 26"],
["1073741825 27", "RSHIFT 8 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 27"],
["1073741825 28", "RSHIFT 4 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 28"],
["1073741825 29", "RSHIFT 2 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 29"],
["1073741825 30", "RSHIFT 1 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 30"],
["1073741825 31", "RSHIFT 0 EQUAL", "NONE", "OK", "RSHIFT 0x40000001 >> 31"],
["-1 1", "RSHIFT -1 EQUAL", "NONE", "OK", "RSHIFT of negative number must shift 1s into the high bits (0xffffffff >> 1)"],
["-1 2", "RSHIFT -1 EQUAL", "NONE", "OK", "RSHIFT of negative number must shift 1s into the high bits (0xffffffff >> 2)"],
["-1 3", "RSHIFT -1 EQUAL", "NONE", "OK", "RSHIFT of negative number must shift 1s into the high bits (0xffffffff >> 3)"],
["-2147483647 1", "RSHIFT -1073741824 EQUAL", "NONE", "OK", "RSHIFT of negative number must shift 1s into the high bits (0x80000001 >> 1)"],
["-2147483647 3", "RSHIFT -268435456 EQUAL", "NONE", "OK", "RSHIFT of negative number must shift 1s into the high bits (0x80000001 >> 3)"],
["-1431655766 1", "RSHIFT -715827883 EQUAL", "NONE", "OK", "RSHIFT of negative number must shit 1s into the high bits (0xaaaaaaaa >> 1)"],
["1431655765 1", "RSHIFT 715827882 EQUAL", "NONE", "OK", "RSHIFT 0x55555555 >> 1"],
["", "RSHIFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RSHIFT requires an input value"],
["1", "RSHIFT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "RSHIFT requires a shift count"],
["NOP 1", "RSHIFT NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "RSHIFT input value must be numeric"],
["1 NOP", "RSHIFT TRUE", "NONE", "ERR_INVALID_STACK_OPERATION", "RSHIFT shift count must be numeric"],
["1 -1", "RSHIFT 2 EQUAL", "NONE", "ERR_NEGATIVE_SHIFT", "RSHIFT must fail with negative shift count"],
["1 33", "RSHIFT 0 EQUAL", "NONE", "ERR_OVERFLOW_SHIFT", "RSHIFT must fail with shift count >32"],
["2147483648 1", "RSHIFT TRUE", "NONE", "ERR_OUT_OF_RANGE", "RSHIFT must fail with input value >4 bytes"],
["1 2147483648", "RSHIFT TRUE", "NONE", "ERR_OUT_OF_RANGE", "RSHIFT must fail with shift count >4 bytes"],
["0x4c 0x00","0 EQUAL", "NONE", "OK"],
["0x4d 0x0000","0 EQUAL", "NONE", "OK"],
["0x4e 0x00000000","0 EQUAL", "NONE", "OK"],
["0x4f 1000 ADD","999 EQUAL", "NONE", "OK"],
["0", "IF 0x50 ENDIF 1", "NONE", "OK", "0x50 is reserved (ok if not executed)"],
["0x51", "0x5f ADD 0x60 EQUAL", "NONE", "OK", "0x51 through 0x60 push 1 through 16 onto stack"],
["1","NOP", "NONE", "OK"],
["0", "IF VER ELSE 1 ENDIF", "NONE", "OK", "VER non-functional (ok if not executed)"],
["0", "IF RESERVED ELSE 1 ENDIF", "NONE", "OK", "RESERVED ok in un-executed IF"],
["1", "DUP IF ENDIF", "NONE", "OK"],
["1", "IF 1 ENDIF", "NONE", "OK"],
["1", "DUP IF ELSE ENDIF", "NONE", "OK"],
["1", "IF 1 ELSE ENDIF", "NONE", "OK"],
["0", "IF ELSE 1 ENDIF", "NONE", "OK"],
["1 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "OK"],
["1 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "OK"],
["1 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "OK"],
["0 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "OK"],
["1 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "OK"],
["1 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "OK"],
["1 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "OK"],
["0 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "OK"],
["0", "IF 0 ELSE 1 ELSE 0 ENDIF", "NONE", "OK", "Multiple ELSE's are valid and executed inverts on each ELSE encountered"],
["1", "IF 1 ELSE 0 ELSE ENDIF", "NONE", "OK"],
["1", "IF ELSE 0 ELSE 1 ENDIF", "NONE", "OK"],
["1", "IF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "NONE", "OK"],
["'' 1", "IF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "NONE", "OK"],
["1", "NOTIF 0 ELSE 1 ELSE 0 ENDIF", "NONE", "OK", "Multiple ELSE's are valid and execution inverts on each ELSE encountered"],
["0", "NOTIF 1 ELSE 0 ELSE ENDIF", "NONE", "OK"],
["0", "NOTIF ELSE 0 ELSE 1 ENDIF", "NONE", "OK"],
["0", "NOTIF 1 ELSE 0 ELSE 1 ENDIF ADD 2 EQUAL", "NONE", "OK"],
["'' 0", "NOTIF SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ELSE ELSE SHA1 ENDIF 0x14 0x68ca4fec736264c13b859bac43d5173df6871682 EQUAL", "NONE", "OK"],
["0", "IF 1 IF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 1 IF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "NONE", "OK", "Nested ELSE ELSE"],
["1", "NOTIF 0 NOTIF RETURN ELSE RETURN ELSE RETURN ENDIF ELSE 0 NOTIF 1 ELSE RETURN ELSE 1 ENDIF ELSE RETURN ENDIF ADD 2 EQUAL", "NONE", "OK"],
["0", "IF RETURN ENDIF 1", "NONE", "OK", "RETURN only works if executed"],
["1 1", "VERIFY", "NONE", "OK"],
["1 0x05 0x01 0x00 0x00 0x00 0x00", "VERIFY", "NONE", "OK", "values >4 bytes can be cast to boolean"],
["1 0x01 0x80", "IF 0 ENDIF", "NONE", "OK", "negative 0 is false"],
["10 0 11 TOALTSTACK DROP FROMALTSTACK", "ADD 21 EQUAL", "NONE", "OK"],
["'gavin_was_here' TOALTSTACK 11 FROMALTSTACK", "'gavin_was_here' EQUALVERIFY 11 EQUAL", "NONE", "OK"],
["0 IFDUP", "DEPTH 1 EQUALVERIFY 0 EQUAL", "NONE", "OK"],
["1 IFDUP", "DEPTH 2 EQUALVERIFY 1 EQUALVERIFY 1 EQUAL", "NONE", "OK"],
["0x05 0x0100000000 IFDUP", "DEPTH 2 EQUALVERIFY 0x05 0x0100000000 EQUAL", "NONE", "OK", "IFDUP dups non ints"],
["0 DROP", "DEPTH 0 EQUAL", "NONE", "OK"],
["0", "DUP 1 ADD 1 EQUALVERIFY 0 EQUAL", "NONE", "OK"],
["0 1", "NIP", "NONE", "OK"],
["1 0", "OVER DEPTH 3 EQUALVERIFY", "NONE", "OK"],
["22 21 20", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "OK"],
["22 21 20", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "OK"],
["22 21 20", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "OK"],
["22 21 20", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "OK"],
["22 21 20", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "OK"],
["22 21 20", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "OK"],
["22 21 20", "ROT 22 EQUAL", "NONE", "OK"],
["22 21 20", "ROT DROP 20 EQUAL", "NONE", "OK"],
["22 21 20", "ROT DROP DROP 21 EQUAL", "NONE", "OK"],
["22 21 20", "ROT ROT 21 EQUAL", "NONE", "OK"],
["22 21 20", "ROT ROT ROT 20 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 24 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT DROP 25 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2DROP 20 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2DROP DROP 21 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2DROP 2DROP 22 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2DROP 2DROP DROP 23 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2ROT 22 EQUAL", "NONE", "OK"],
["25 24 23 22 21 20", "2ROT 2ROT 2ROT 20 EQUAL", "NONE", "OK"],
["1 0", "SWAP 1 EQUALVERIFY 0 EQUAL", "NONE", "OK"],
["0 1", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "NONE", "OK"],
["13 14", "2DUP ROT EQUALVERIFY EQUAL", "NONE", "OK"],
["-1 0 1 2", "3DUP DEPTH 7 EQUALVERIFY ADD ADD 3 EQUALVERIFY 2DROP 0 EQUALVERIFY", "NONE", "OK"],
["1 2 3 5", "2OVER ADD ADD 8 EQUALVERIFY ADD ADD 6 EQUAL", "NONE", "OK"],
["1 3 5 7", "2SWAP ADD 4 EQUALVERIFY ADD 12 EQUAL", "NONE", "OK"],
["0", "SIZE 0 EQUAL", "NONE", "OK"],
["1", "SIZE 1 EQUAL", "NONE", "OK"],
["127", "SIZE 1 EQUAL", "NONE", "OK"],
["128", "SIZE 2 EQUAL", "NONE", "OK"],
["32767", "SIZE 2 EQUAL", "NONE", "OK"],
["32768", "SIZE 3 EQUAL", "NONE", "OK"],
["8388607", "SIZE 3 EQUAL", "NONE", "OK"],
["8388608", "SIZE 4 EQUAL", "NONE", "OK"],
["2147483647", "SIZE 4 EQUAL", "NONE", "OK"],
["2147483648", "SIZE 5 EQUAL", "NONE", "OK"],
["549755813887", "SIZE 5 EQUAL", "NONE", "OK"],
["549755813888", "SIZE 6 EQUAL", "NONE", "OK"],
["9223372036854775807", "SIZE 8 EQUAL", "NONE", "OK"],
["-1", "SIZE 1 EQUAL", "NONE", "OK"],
["-127", "SIZE 1 EQUAL", "NONE", "OK"],
["-128", "SIZE 2 EQUAL", "NONE", "OK"],
["-32767", "SIZE 2 EQUAL", "NONE", "OK"],
["-32768", "SIZE 3 EQUAL", "NONE", "OK"],
["-8388607", "SIZE 3 EQUAL", "NONE", "OK"],
["-8388608", "SIZE 4 EQUAL", "NONE", "OK"],
["-2147483647", "SIZE 4 EQUAL", "NONE", "OK"],
["-2147483648", "SIZE 5 EQUAL", "NONE", "OK"],
["-549755813887", "SIZE 5 EQUAL", "NONE", "OK"],
["-549755813888", "SIZE 6 EQUAL", "NONE", "OK"],
["-9223372036854775807", "SIZE 8 EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "SIZE 26 EQUAL", "NONE", "OK"],
["42", "SIZE 1 EQUALVERIFY 42 EQUAL", "NONE", "OK", "SIZE does not consume argument"],
["2 -2 ADD", "0 EQUAL", "NONE", "OK"],
["2147483647 -2147483647 ADD", "0 EQUAL", "NONE", "OK"],
["-1 -1 ADD", "-2 EQUAL", "NONE", "OK"],
["0 0","EQUAL", "NONE", "OK"],
["1 1 ADD", "2 EQUAL", "NONE", "OK"],
["1 1ADD", "2 EQUAL", "NONE", "OK"],
["111 1SUB", "110 EQUAL", "NONE", "OK"],
["111 1 ADD 12 SUB", "100 EQUAL", "NONE", "OK"],
["0 ABS", "0 EQUAL", "NONE", "OK"],
["16 ABS", "16 EQUAL", "NONE", "OK"],
["-16 ABS", "-16 NEGATE EQUAL", "NONE", "OK"],
["0 NOT", "NOP", "NONE", "OK"],
["1 NOT", "0 EQUAL", "NONE", "OK"],
["11 NOT", "0 EQUAL", "NONE", "OK"],
["0 0NOTEQUAL", "0 EQUAL", "NONE", "OK"],
["1 0NOTEQUAL", "1 EQUAL", "NONE", "OK"],
["111 0NOTEQUAL", "1 EQUAL", "NONE", "OK"],
["-111 0NOTEQUAL", "1 EQUAL", "NONE", "OK"],
["1 1 BOOLAND", "NOP", "NONE", "OK"],
["1 0 BOOLAND", "NOT", "NONE", "OK"],
["0 1 BOOLAND", "NOT", "NONE", "OK"],
["0 0 BOOLAND", "NOT", "NONE", "OK"],
["16 17 BOOLAND", "NOP", "NONE", "OK"],
["1 1 BOOLOR", "NOP", "NONE", "OK"],
["1 0 BOOLOR", "NOP", "NONE", "OK"],
["0 1 BOOLOR", "NOP", "NONE", "OK"],
["0 0 BOOLOR", "NOT", "NONE", "OK"],
["16 17 BOOLOR", "NOP", "NONE", "OK"],
["11 10 1 ADD", "NUMEQUAL", "NONE", "OK"],
["11 10 1 ADD", "NUMEQUALVERIFY 1", "NONE", "OK"],
["11 10 1 ADD", "NUMNOTEQUAL NOT", "NONE", "OK"],
["111 10 1 ADD", "NUMNOTEQUAL", "NONE", "OK"],
["11 10", "LESSTHAN NOT", "NONE", "OK"],
["4 4", "LESSTHAN NOT", "NONE", "OK"],
["10 11", "LESSTHAN", "NONE", "OK"],
["-11 11", "LESSTHAN", "NONE", "OK"],
["-11 -10", "LESSTHAN", "NONE", "OK"],
["11 10", "GREATERTHAN", "NONE", "OK"],
["4 4", "GREATERTHAN NOT", "NONE", "OK"],
["10 11", "GREATERTHAN NOT", "NONE", "OK"],
["-11 11", "GREATERTHAN NOT", "NONE", "OK"],
["-11 -10", "GREATERTHAN NOT", "NONE", "OK"],
["11 10", "LESSTHANOREQUAL NOT", "NONE", "OK"],
["4 4", "LESSTHANOREQUAL", "NONE", "OK"],
["10 11", "LESSTHANOREQUAL", "NONE", "OK"],
["-11 11", "LESSTHANOREQUAL", "NONE", "OK"],
["-11 -10", "LESSTHANOREQUAL", "NONE", "OK"],
["11 10", "GREATERTHANOREQUAL", "NONE", "OK"],
["4 4", "GREATERTHANOREQUAL", "NONE", "OK"],
["10 11", "GREATERTHANOREQUAL NOT", "NONE", "OK"],
["-11 11", "GREATERTHANOREQUAL NOT", "NONE", "OK"],
["-11 -10", "GREATERTHANOREQUAL NOT", "NONE", "OK"],
["1 0 MIN", "0 NUMEQUAL", "NONE", "OK"],
["0 1 MIN", "0 NUMEQUAL", "NONE", "OK"],
["-1 0 MIN", "-1 NUMEQUAL", "NONE", "OK"],
["0 -2147483647 MIN", "-2147483647 NUMEQUAL", "NONE", "OK"],
["2147483647 0 MAX", "2147483647 NUMEQUAL", "NONE", "OK"],
["0 100 MAX", "100 NUMEQUAL", "NONE", "OK"],
["-100 0 MAX", "0 NUMEQUAL", "NONE", "OK"],
["0 -2147483647 MAX", "0 NUMEQUAL", "NONE", "OK"],
["0 0 1", "WITHIN", "NONE", "OK"],
["1 0 1", "WITHIN NOT", "NONE", "OK"],
["0 -2147483647 2147483647", "WITHIN", "NONE", "OK"],
["-1 -100 100", "WITHIN", "NONE", "OK"],
["11 -100 100", "WITHIN", "NONE", "OK"],
["-2147483647 -100 100", "WITHIN NOT", "NONE", "OK"],
["2147483647 -100 100", "WITHIN NOT", "NONE", "OK"],
["2147483647 2147483647 SUB", "0 EQUAL", "NONE", "OK"],
["2147483647 DUP ADD", "4294967294 EQUAL", "NONE", "OK", ">32 bit EQUAL is valid"],
["2147483647 NEGATE DUP ADD", "-4294967294 EQUAL", "NONE", "OK"],
["''", "RIPEMD160 0x14 0x9c1185a5c5e9fc54612808977ee8f548b2258d31 EQUAL", "NONE", "OK"],
["'a'", "RIPEMD160 0x14 0x0bdc9d2d256b3ee9daae347be6f4dc835a467ffe EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "RIPEMD160 0x14 0xf71c27109c692c1b56bbdceb5b9d2865b3708dbc EQUAL", "NONE", "OK"],
["''", "SHA1 0x14 0xda39a3ee5e6b4b0d3255bfef95601890afd80709 EQUAL", "NONE", "OK"],
["'a'", "SHA1 0x14 0x86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "SHA1 0x14 0x32d10c7b8cf96570ca04ce37f2a19d84240d3a89 EQUAL", "NONE", "OK"],
["''", "SHA256 0x20 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 EQUAL", "SHA256", "OK"],
["'a'", "SHA256 0x20 0xca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb EQUAL", "SHA256", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "SHA256 0x20 0x71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73 EQUAL", "SHA256", "OK"],
["''", "BLAKE256 0x20 0x716f6e863f744b9ac22c97ec7b76ea5f5908bc5b2f67c61510bfc4751384ea7a EQUAL", "NONE", "OK"],
["'a'", "BLAKE256 0x20 0x43234ff894a9c0590d0246cfc574eb781a80958b01d7a2fa1ac73c673ba5e311 EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "BLAKE256 0x20 0x6c648655a21f704a0bc72eb367b24144c9e8a1b07efc34165b561b6c33514427 EQUAL", "NONE", "OK"],
["''", "DUP HASH160 SWAP BLAKE256 RIPEMD160 EQUAL", "NONE", "OK"],
["''", "DUP HASH256 SWAP BLAKE256 BLAKE256 EQUAL", "NONE", "OK"],
["''", "NOP HASH160 0x14 0x413320bee32a3bdb92b145d337316739d54a9287 EQUAL", "NONE", "OK"],
["'a'", "HASH160 NOP 0x14 0x8704ae49993a1b72b8a8b28decc7f9e58be752ce EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "HASH160 0x4c 0x14 0x64d140650ed333a070a8ae05fac65032aebdfe5f EQUAL", "NONE", "OK"],
["''", "HASH256 0x20 0xd8ee5f957b78a961fb729098b4efb56440a14e05e3c55890f5edbc626380aaa6 EQUAL", "NONE", "OK"],
["'a'", "HASH256 0x20 0x8a298a038c1a85591aa7abda75a8a393b742ee3f6b759ff15a3b5a8edff78532 EQUAL", "NONE", "OK"],
["'abcdefghijklmnopqrstuvwxyz'", "HASH256 0x4c 0x20 0x513d6e9cb7f369fa60933bc48818da2cd0c0a079ebdd29a0cce382d4625dcb39 EQUAL", "NONE", "OK"],
["1","NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 1 EQUAL", "NONE", "OK"],
["'NOP_1_to_10' NOP1 CHECKLOCKTIMEVERIFY NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10","'NOP_1_to_10' EQUAL", "NONE", "OK"],
["1", "NOP", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discourage NOPx flag allows OP_NOP"],
["0", "IF NOP1 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP1 allowed if not executed"],
["0", "IF NOP2 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP2 allowed if not executed when CLTV is inactive"],
["0", "IF NOP3 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP3 allowed if not executed when CSV is inactive"],
["0", "IF NOP4 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP4 allowed if not executed"],
["0", "IF NOP5 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP5 allowed if not executed"],
["0", "IF NOP6 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP6 allowed if not executed"],
["0", "IF NOP7 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP7 allowed if not executed"],
["0", "IF NOP8 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP8 allowed if not executed"],
["0", "IF NOP9 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP9 allowed if not executed"],
["0", "IF NOP10 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged NOP10 allowed if not executed"],
["0", "IF 0xc0 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc0 allowed if not executed when SHA256 is inactive"],
["0", "IF 0xc1 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc1 allowed if not executed"],
["0", "IF 0xc2 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc2 allowed if not executed"],
["0", "IF 0xc3 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc3 allowed if not executed"],
["0", "IF 0xc4 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc4 allowed if not executed"],
["0", "IF 0xc5 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc5 allowed if not executed"],
["0", "IF 0xc6 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc6 allowed if not executed"],
["0", "IF 0xc7 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc7 allowed if not executed"],
["0", "IF 0xc8 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc8 allowed if not executed"],
["0", "IF 0xc9 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xc9 allowed if not executed"],
["0", "IF 0xca ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xca allowed if not executed"],
["0", "IF 0xcb ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xcb allowed if not executed"],
["0", "IF 0xcc ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xcc allowed if not executed"],
["0", "IF 0xcd ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xcd allowed if not executed"],
["0", "IF 0xce ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xce allowed if not executed"],
["0", "IF 0xcf ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xcf allowed if not executed"],
["0", "IF 0xd0 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd0 allowed if not executed"],
["0", "IF 0xd1 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd1 allowed if not executed"],
["0", "IF 0xd2 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd2 allowed if not executed"],
["0", "IF 0xd3 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd3 allowed if not executed"],
["0", "IF 0xd4 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd4 allowed if not executed"],
["0", "IF 0xd5 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd5 allowed if not executed"],
["0", "IF 0xd6 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd6 allowed if not executed"],
["0", "IF 0xd7 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd7 allowed if not executed"],
["0", "IF 0xd8 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd8 allowed if not executed"],
["0", "IF 0xd9 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xd9 allowed if not executed"],
["0", "IF 0xda ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xda allowed if not executed"],
["0", "IF 0xdb ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xdb allowed if not executed"],
["0", "IF 0xdc ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xdc allowed if not executed"],
["0", "IF 0xdd ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xdd allowed if not executed"],
["0", "IF 0xde ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xde allowed if not executed"],
["0", "IF 0xdf ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xdf allowed if not executed"],
["0", "IF 0xe0 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe0 allowed if not executed"],
["0", "IF 0xe1 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe1 allowed if not executed"],
["0", "IF 0xe2 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe2 allowed if not executed"],
["0", "IF 0xe3 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe3 allowed if not executed"],
["0", "IF 0xe4 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe4 allowed if not executed"],
["0", "IF 0xe5 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe5 allowed if not executed"],
["0", "IF 0xe6 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe6 allowed if not executed"],
["0", "IF 0xe7 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe7 allowed if not executed"],
["0", "IF 0xe8 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe8 allowed if not executed"],
["0", "IF 0xe9 ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xe9 allowed if not executed"],
["0", "IF 0xea ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xea allowed if not executed"],
["0", "IF 0xeb ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xeb allowed if not executed"],
["0", "IF 0xec ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xec allowed if not executed"],
["0", "IF 0xed ENDIF 1", "DISCOURAGE_UPGRADABLE_NOPS", "OK", "Discouraged nop opcode 0xed allowed if not executed"],
["0", "IF 0x50 ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0x50 allowed if not executed"],
["0", "IF 0xfa ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xfa allowed if not executed"],
["0", "IF 0xfb ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xfb allowed if not executed"],
["0", "IF 0xfc ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xfc allowed if not executed"],
["0", "IF 0xfd ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xfd allowed if not executed"],
["0", "IF 0xfe ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xfe allowed if not executed"],
["0", "IF 0xff ELSE 1 ENDIF", "NONE", "OK", "Reserved opcode 0xff allowed if not executed"],
["NOP", "'b'{2048}", "NONE", "OK", "2048 byte push"],
["1", "0x61{255}", "NONE", "OK", "255 opcodes executed. 0x61 is NOP"],
["1 2 3 4 5 0x6f{172}", "1 2 3 4 5 0x6f{166}", "NONE", "OK", "1,024 stack size (0x6f is 3DUP)"],
["1 TOALTSTACK 2 TOALTSTACK 3 4 5 0x6f{172}", "1 2 3 4 5 6 7 0x6f{166}", "NONE", "OK", "1,024 stack size (altstack cleared between scriptSig/scriptPubKey)"],
["'a'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{1764} 1 2 3 4 5 0x6f{255}",
"'a'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{2048} 'b'{1786} 1 2 3 4 0x6f{78}", "NONE", "OK",
"Max-size (16384 bytes), max-push (2048 bytes), max-opcodes (255), max stack size (1024 items). 0x6f is 3DUP, 0x61 is NOP"],
["0", "IF 0x50{255} ENDIF 1", "NONE", "OK", ">255 opcodes, but RESERVED (0x50) doesn't count towards opcode limit"],
["NOP","1", "NONE", "OK"],
["1", "0x01 0x01 EQUAL", "NONE", "OK", "The following is useful for checking implementations of BN_bn2mpi"],
["127", "0x01 0x7F EQUAL", "NONE", "OK"],
["128", "0x02 0x8000 EQUAL", "NONE", "OK", "Leave room for the sign bit"],
["32767", "0x02 0xFF7F EQUAL", "NONE", "OK"],
["32768", "0x03 0x008000 EQUAL", "NONE", "OK"],
["8388607", "0x03 0xFFFF7F EQUAL", "NONE", "OK"],
["8388608", "0x04 0x00008000 EQUAL", "NONE", "OK"],
["2147483647", "0x04 0xFFFFFF7F EQUAL", "NONE", "OK"],
["2147483648", "0x05 0x0000008000 EQUAL", "NONE", "OK"],
["549755813887", "0x05 0xFFFFFFFF7F EQUAL", "NONE", "OK"],
["549755813888", "0x06 0xFFFFFFFF7F EQUAL", "NONE", "OK"],
["9223372036854775807", "0x08 0xFFFFFFFFFFFFFF7F EQUAL", "NONE", "OK"],
["-1", "0x01 0x81 EQUAL", "NONE", "OK", "Numbers are little-endian with the MSB being a sign bit"],
["-127", "0x01 0xFF EQUAL", "NONE", "OK"],
["-128", "0x02 0x8080 EQUAL", "NONE", "OK"],
["-32767", "0x02 0xFFFF EQUAL", "NONE", "OK"],
["-32768", "0x03 0x008080 EQUAL", "NONE", "OK"],
["-8388607", "0x03 0xFFFFFF EQUAL", "NONE", "OK"],
["-8388608", "0x04 0x00008080 EQUAL", "NONE", "OK"],
["-2147483647", "0x04 0xFFFFFFFF EQUAL", "NONE", "OK"],
["-2147483648", "0x05 0x0000008080 EQUAL", "NONE", "OK"],
["-4294967295", "0x05 0xFFFFFFFF80 EQUAL", "NONE", "OK"],
["-549755813887", "0x05 0xFFFFFFFFFF EQUAL", "NONE", "OK"],
["-549755813888", "0x06 0x000000008080 EQUAL", "NONE", "OK"],
["-9223372036854775807", "0x08 0xFFFFFFFFFFFFFFFF EQUAL", "NONE", "OK"],
["2147483647", "1ADD 2147483648 EQUAL", "NONE", "OK", "We can do math on 4-byte integers, and compare 5-byte ones"],
["2147483647", "1ADD 1", "NONE", "OK"],
["-2147483647", "1ADD 1", "NONE", "OK"],
["1", "0x02 0x0100 EQUAL NOT", "NONE", "OK", "Not the same byte array..."],
["1", "0x02 0x0100 NUMEQUAL", "NONE", "OK", "... but they are numerically equal"],
["11", "0x4c 0x03 0x0b0000 NUMEQUAL", "NONE", "OK"],
["0", "0x01 0x80 EQUAL NOT", "NONE", "OK"],
["0", "0x01 0x80 NUMEQUAL", "NONE", "OK", "Zero numerically equals negative zero"],
["0", "0x02 0x0080 NUMEQUAL", "NONE", "OK"],
["0x03 0x000080", "0x04 0x00000080 NUMEQUAL", "NONE", "OK"],
["0x03 0x100080", "0x04 0x10000080 NUMEQUAL", "NONE", "OK"],
["0x03 0x100000", "0x04 0x10000000 NUMEQUAL", "NONE", "OK"],
["NOP", "NOP 1", "NONE", "OK", "The following tests check the if(stack.size() < N) tests in each opcode"],
["1", "IF 1 ENDIF", "NONE", "OK", "They are here to catch copy-and-paste errors"],
["0", "NOTIF 1 ENDIF", "NONE", "OK", "Most of them are duplicated elsewhere,"],
["1", "VERIFY 1", "NONE", "OK", "but, hey, more is always better, right?"],
["0", "TOALTSTACK 1", "NONE", "OK"],
["1", "TOALTSTACK FROMALTSTACK", "NONE", "OK"],
["0 0", "2DROP 1", "NONE", "OK"],
["0 1", "2DUP", "NONE", "OK"],
["0 0 1", "3DUP", "NONE", "OK"],
["0 1 0 0", "2OVER", "NONE", "OK"],
["0 1 0 0 0 0", "2ROT", "NONE", "OK"],
["0 1 0 0", "2SWAP", "NONE", "OK"],
["1", "IFDUP", "NONE", "OK"],
["NOP", "DEPTH 1", "NONE", "OK"],
["0", "DROP 1", "NONE", "OK"],
["1", "DUP", "NONE", "OK"],
["0 1", "NIP", "NONE", "OK"],
["1 0", "OVER", "NONE", "OK"],
["1 0 0 0 3", "PICK", "NONE", "OK"],
["1 0", "PICK", "NONE", "OK"],
["1 0 0 0 3", "ROLL", "NONE", "OK"],
["1 0", "ROLL", "NONE", "OK"],
["1 0 0", "ROT", "NONE", "OK"],
["1 0", "SWAP", "NONE", "OK"],
["0 1", "TUCK", "NONE", "OK"],
["1", "SIZE", "NONE", "OK"],
["0 0", "EQUAL", "NONE", "OK"],
["0 0", "EQUALVERIFY 1", "NONE", "OK"],
["0 0 1", "EQUAL EQUAL", "NONE", "OK", "OP_0 and bools must have identical byte representations"],
["0", "1ADD", "NONE", "OK"],
["2", "1SUB", "NONE", "OK"],
["-1", "NEGATE", "NONE", "OK"],
["-1", "ABS", "NONE", "OK"],
["0", "NOT", "NONE", "OK"],
["-1", "0NOTEQUAL", "NONE", "OK"],
["1 0", "ADD", "NONE", "OK"],
["1 0", "SUB", "NONE", "OK"],
["-1 -1", "BOOLAND", "NONE", "OK"],
["-1 0", "BOOLOR", "NONE", "OK"],
["0 0", "NUMEQUAL", "NONE", "OK"],
["0 0", "NUMEQUALVERIFY 1", "NONE", "OK"],
["-1 0", "NUMNOTEQUAL", "NONE", "OK"],
["-1 0", "LESSTHAN", "NONE", "OK"],
["1 0", "GREATERTHAN", "NONE", "OK"],
["0 0", "LESSTHANOREQUAL", "NONE", "OK"],
["0 0", "GREATERTHANOREQUAL", "NONE", "OK"],
["-1 0", "MIN", "NONE", "OK"],
["1 0", "MAX", "NONE", "OK"],
["-1 -1 0", "WITHIN", "NONE", "OK"],
["0", "RIPEMD160", "NONE", "OK"],
["0", "SHA1", "NONE", "OK"],
["0", "SHA256", "SHA256", "OK"],
["0", "BLAKE256", "NONE", "OK"],
["0", "HASH160", "NONE", "OK"],
["0", "HASH256", "NONE", "OK"],
["NOP", "1", "NONE", "OK"],
["NOP", "NOP1 1", "NONE", "OK"],
["NOP", "CHECKLOCKTIMEVERIFY 1", "NONE", "OK"],
["NOP", "NOP3 1", "NONE", "OK"],
["NOP", "NOP4 1", "NONE", "OK"],
["NOP", "NOP5 1", "NONE", "OK"],
["NOP", "NOP6 1", "NONE", "OK"],
["NOP", "NOP7 1", "NONE", "OK"],
["NOP", "NOP8 1", "NONE", "OK"],
["NOP", "NOP9 1", "NONE", "OK"],
["NOP", "NOP10 1", "NONE", "OK"],
["0x40 0x42{64}", "0x4d 0x4000 0x42{64} EQUAL", "NONE", "OK", "Basic PUSH signedness check"],
["0x4c 0x40 0x42{64}", "0x4d 0x4000 0x42{64} EQUAL", "NONE", "OK", "Basic PUSHDATA1 signedness check"],
["all PUSHDATA forms are equivalent"],
["0x4c 0x4b 0x11{75}", "0x4b 0x11{75} EQUAL", "NONE", "OK", "PUSHDATA1 of 75 bytes equals direct push of it"],
["0x4d 0xff00 0x11{255}", "0x4c 0xff 0x11{255} EQUAL", "NONE", "OK", "PUSHDATA2 of 255 bytes equals PUSHDATA1 of it"],
["0x00", "SIZE 0 EQUAL", "NONE", "OK", "Basic OP_0 execution"],
["0x00", "'00' EQUAL", "NONE", "ERR_EVAL_FALSE", "Basic OP_0 execution"],
["Numeric pushes"],
["0x01 0x81", "0x4f EQUAL", "NONE", "OK", "OP1_NEGATE pushes 0x81"],
["0x01 0x01", "0x51 EQUAL", "NONE", "OK", "OP_1 pushes 0x01"],
["0x01 0x02", "0x52 EQUAL", "NONE", "OK", "OP_2 pushes 0x02"],
["0x01 0x03", "0x53 EQUAL", "NONE", "OK", "OP_3 pushes 0x03"],
["0x01 0x04", "0x54 EQUAL", "NONE", "OK", "OP_4 pushes 0x04"],
["0x01 0x05", "0x55 EQUAL", "NONE", "OK", "OP_5 pushes 0x05"],
["0x01 0x06", "0x56 EQUAL", "NONE", "OK", "OP_6 pushes 0x06"],
["0x01 0x07", "0x57 EQUAL", "NONE", "OK", "OP_7 pushes 0x07"],
["0x01 0x08", "0x58 EQUAL", "NONE", "OK", "OP_8 pushes 0x08"],
["0x01 0x09", "0x59 EQUAL", "NONE", "OK", "OP_9 pushes 0x09"],
["0x01 0x0a", "0x5a EQUAL", "NONE", "OK", "OP_10 pushes 0x0a"],
["0x01 0x0b", "0x5b EQUAL", "NONE", "OK", "OP_11 pushes 0x0b"],
["0x01 0x0c", "0x5c EQUAL", "NONE", "OK", "OP_12 pushes 0x0c"],
["0x01 0x0d", "0x5d EQUAL", "NONE", "OK", "OP_13 pushes 0x0d"],
["0x01 0x0e", "0x5e EQUAL", "NONE", "OK", "OP_14 pushes 0x0e"],
["0x01 0x0f", "0x5f EQUAL", "NONE", "OK", "OP_15 pushes 0x0f"],
["0x01 0x10", "0x60 EQUAL", "NONE", "OK", "OP_16 pushes 0x10"],
["Equivalency of different numeric encodings"],
["0x02 0x8000", "128 NUMEQUAL", "NONE", "OK", "0x8000 equals 128"],
["0x01 0x00", "0 NUMEQUAL", "NONE", "OK", "0x00 numequals 0"],
["0x01 0x80", "0 NUMEQUAL", "NONE", "OK", "0x80 (negative zero) numequals 0"],
["0x02 0x0080", "0 NUMEQUAL", "NONE", "OK", "0x0080 numequals 0"],
["0x02 0x0500", "5 NUMEQUAL", "NONE", "OK", "0x0500 numequals 5"],
["0x03 0xff7f80", "0x02 0xffff NUMEQUAL", "NONE", "OK"],
["0x03 0xff7f00", "0x02 0xff7f NUMEQUAL", "NONE", "OK"],
["0x04 0xffff7f80", "0x03 0xffffff NUMEQUAL", "NONE", "OK"],
["0x04 0xffff7f00", "0x03 0xffff7f NUMEQUAL", "NONE", "OK"],
["Unevaluated non-minimal pushes are ignored"],
["0 IF 0x4c 0x00 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA1 ignored"],
["0 IF 0x4d 0x0000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA2 ignored"],
["0 IF 0x4c 0x00000000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA4 ignored"],
["0 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "OK", "1NEGATE equiv"],
["0 IF 0x01 0x01 ENDIF 1", "", "MINIMALDATA", "OK", "OP_1 equiv"],
["0 IF 0x01 0x02 ENDIF 1", "", "MINIMALDATA", "OK", "OP_2 equiv"],
["0 IF 0x01 0x03 ENDIF 1", "", "MINIMALDATA", "OK", "OP_3 equiv"],
["0 IF 0x01 0x04 ENDIF 1", "", "MINIMALDATA", "OK", "OP_4 equiv"],
["0 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "OK", "OP_5 equiv"],
["0 IF 0x01 0x06 ENDIF 1", "", "MINIMALDATA", "OK", "OP_6 equiv"],
["0 IF 0x01 0x07 ENDIF 1", "", "MINIMALDATA", "OK", "OP_7 equiv"],
["0 IF 0x01 0x08 ENDIF 1", "", "MINIMALDATA", "OK", "OP_8 equiv"],
["0 IF 0x01 0x09 ENDIF 1", "", "MINIMALDATA", "OK", "OP_9 equiv"],
["0 IF 0x01 0x0a ENDIF 1", "", "MINIMALDATA", "OK", "OP_10 equiv"],
["0 IF 0x01 0x0b ENDIF 1", "", "MINIMALDATA", "OK", "OP_11 equiv"],
["0 IF 0x01 0x0c ENDIF 1", "", "MINIMALDATA", "OK", "OP_12 equiv"],
["0 IF 0x01 0x0d ENDIF 1", "", "MINIMALDATA", "OK", "OP_13 equiv"],
["0 IF 0x01 0x0e ENDIF 1", "", "MINIMALDATA", "OK", "OP_14 equiv"],
["0 IF 0x01 0x0f ENDIF 1", "", "MINIMALDATA", "OK", "OP_15 equiv"],
["0 IF 0x01 0x10 ENDIF 1", "", "MINIMALDATA", "OK", "OP_16 equiv"],
["Numeric minimaldata rules are only applied when a stack item is numerically evaluated; the push itself is allowed"],
["0x01 0x00", "1", "MINIMALDATA", "OK"],
["0x01 0x80", "1", "MINIMALDATA", "OK"],
["0x02 0x0180", "1", "MINIMALDATA", "OK"],
["0x02 0x0100", "1", "MINIMALDATA", "OK"],
["0x02 0x0200", "1", "MINIMALDATA", "OK"],
["0x02 0x0300", "1", "MINIMALDATA", "OK"],
["0x02 0x0400", "1", "MINIMALDATA", "OK"],
["0x02 0x0500", "1", "MINIMALDATA", "OK"],
["0x02 0x0600", "1", "MINIMALDATA", "OK"],
["0x02 0x0700", "1", "MINIMALDATA", "OK"],
["0x02 0x0800", "1", "MINIMALDATA", "OK"],
["0x02 0x0900", "1", "MINIMALDATA", "OK"],
["0x02 0x0a00", "1", "MINIMALDATA", "OK"],
["0x02 0x0b00", "1", "MINIMALDATA", "OK"],
["0x02 0x0c00", "1", "MINIMALDATA", "OK"],
["0x02 0x0d00", "1", "MINIMALDATA", "OK"],
["0x02 0x0e00", "1", "MINIMALDATA", "OK"],
["0x02 0x0f00", "1", "MINIMALDATA", "OK"],
["0x02 0x1000", "1", "MINIMALDATA", "OK"],
["Valid version of the 'Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule' script_invalid test"],
["1 0x02 0x0000", "PICK DROP", "NONE", "OK"],
["1 0x02 0x0000", "ROLL DROP 1", "NONE", "OK"],
["0x02 0x0000", "1ADD DROP 1", "NONE", "OK"],
["0x02 0x0000", "1SUB DROP 1", "NONE", "OK"],
["0x02 0x0000", "NEGATE DROP 1", "NONE", "OK"],
["0x02 0x0000", "ABS DROP 1", "NONE", "OK"],
["0x02 0x0000", "NOT DROP 1", "NONE", "OK"],
["0x02 0x0000", "0NOTEQUAL DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "ADD DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "ADD DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "SUB DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "SUB DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "BOOLAND DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "BOOLAND DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "BOOLOR DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "BOOLOR DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "NUMEQUAL DROP 1", "NONE", "OK"],
["0x02 0x0000 1", "NUMEQUAL DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "NUMEQUALVERIFY 1", "NONE", "OK"],
["0x02 0x0000 0", "NUMEQUALVERIFY 1", "NONE", "OK"],
["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "LESSTHAN DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "LESSTHAN DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "GREATERTHAN DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "GREATERTHAN DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "MIN DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "MIN DROP 1", "NONE", "OK"],
["0 0x02 0x0000", "MAX DROP 1", "NONE", "OK"],
["0x02 0x0000 0", "MAX DROP 1", "NONE", "OK"],
["0x02 0x0000 0 0", "WITHIN DROP 1", "NONE", "OK"],
["0 0x02 0x0000 0", "WITHIN DROP 1", "NONE", "OK"],
["0 0 0x02 0x0000", "WITHIN DROP 1", "NONE", "OK"],
["0 0 0x02 0x0000", "CHECKMULTISIG DROP 1", "NONE", "OK"],
["0 0x02 0x0000 0", "CHECKMULTISIG DROP 1", "NONE", "OK"],
["0 0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "NONE", "OK"],
["0 0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "NONE", "OK"],
["0 0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "NONE", "OK"],
["Test coverage for CHECKSIG"],
["NOTE: The following keys are used throughout the signature tests:"],
[" private key 1: 0x0000000000000000000000000000000000000000000000000000000000000001"],
[" compressed pubkey 1: 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"],
[" uncompressed pubkey 1: 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"],
[" hybrid pubkey 1: 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"],
[" compressed pubkey hash 1: 0xe280cb6e66b96679aec288b1fbdbd4db08077a1b"],
[" uncompressed pubkey hash 1: 0x76a2e145da57d32c5a40f6406287c9248e0d5040"],
[" private key 2: 0x0000000000000000000000000000000000000000000000000000000000000003"],
[" compressed pubkey 2: 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9"],
[" uncompressed pubkey 2: 0x04f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],
[" hybrid pubkey 2: 0x05f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],
[" compressed pubkey hash 2: 0x01557763e0252dc0ff9e0996ad1d04b167bb993c"],
[" uncompressed pubkey hash 2: 0x84e54168b44c30bc76a97ac78b53ecbd75106e13"],
[" private key 3: 0x0000000000000000000000000000000000000000000000000000000000000006"],
[" compressed pubkey 3: 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556"],
[" uncompressed pubkey 3: 0x04fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297"],
[" hybrid pubkey 3: 0x06fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297"],
[" compressed pubkey hash 3: 0x2f0b8922f80989a85a53e136af931e473343bcad"],
[" uncompressed pubkey hash 3: 0x1891523d072e152ef254f4326eba0729a9131ef8"],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashAll"
],
[
"0x48 0x304502210098676274838e0f45ca405918668201eeafb7c829f043daf77c3055dda4bb73ac022019202b189d1324533a82906e546d24d468b854cbb13a03e5fca7ca9e45b835eb02",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashNone"
],
[
"0x47 0x304402207a5a5a18fd1c0f3e76fa5f0a06751e52e1246a2361843d40c13e95906feccc9a0220642530a8aeff9b8242ee1a6110a6d951707ae28bed6b4367790ebc8829ad1a9503",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashSingle"
],
[
"0x48 0x3045022100a22bcae4c96e7fd7251e92c3542a21304701d5c8f94b31035b060f2b96a5cd410220526ffd300f848fb0e5eda14fb410221999e837e3bfbff5c75e20270336c501cc81",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashAll|SigHashAnyOneCanPay"
],
[
"0x47 0x304402206aa27c6d7d5db864eb06eb163231a49598f71efab7c07a9091bf6620b2f49c8d022069a8b9ceb0d79034a9c582b465432826a10b97bee29ddfc56534d04ba50a315e82",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashNone|SigHashAnyOneCanPay"
],
[
"0x47 0x304402200f9d9048a7b313ebe540a895f1721fc327477e11a3ca3a6a7f9e2af11374bbb20220202914bec4369f8d9e70c82c720d9d87d52c5ced7f804ac1f70a3cf993341ba983",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys under SigHashSingle|SigHashAnyOneCanPay"
],
[
"0x47 0x304402206f02f07d84e9bef57e3c211887902f0e3d2067e210678e7637927a3397e38ecc0220795a47bcc1585e8b329a5172fb412c51368dd4d273e8e0766e918590a3141bfe01",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashAll"
],
[
"0x47 0x304402201c57a7b1befacfc8b6a02d83724334966a3d9a214c54661fecc9ecc4f90c421f02201bcd5bc018f66ef0f9b1445fbbf2336a9e8fb405e4b93ac8b61b9d7ebe613d8602",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashNone"
],
[
"0x48 0x3045022100e977d8f5826d5b0faa2ec19e55c82e8d2e77b510b37455dcb0fee6a97f7297c50220139b3bb22739e4cb2b21ae285eb0a6fb83888762cdccdbd7adf596d429a5ab7b03",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashSingle"
],
[
"0x47 0x304402200e1bf09e5bd4493bcac49225fe0858fe820ac23f3f81a9ebcf89c562c21ba60202200e3e8ce3dafdbc661fc16e34c2b8ed87f46c2600eed06fafafc6c5e6acce4abb81",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashAll|SigHashAnyOneCanPay"
],
[
"0x47 0x304402202ed7cbdec56c056cba689ca9f097f245de82b4732eed17060443349aa1098b6a022046dba0f9c0b807ab4f8cbcf9853548d86e4e3847103e662063e764248d27c25982",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashNone|SigHashAnyOneCanPay"
],
[
"0x48 0x304502210093515fc4e75735746b8e7468b5855cd2ed2be85e48ca9771f18ab3e757e37497022003aab10a26f94122c186e9705c902e249f12a31ac96de9f5c5a7ce6e5f76bd9483",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys under SigHashSingle|SigHashAnyOneCanPay"
],
[
"0x48 0x3045022100dfe97c482347767875efb2d95ae94cb21d3a2f5e798c48fe202595ed8128038202201c49c43648d581280d1921e2837972a8bd800d85065a8e1f41e61161524c450d01",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys with y bit set (P2PK)"
],
[
"0x48 0x3045022100e67ff2e958d066294263617782bedca9eddf1a88e15711caa8a0dd5db5317cfb0220490ca23dced8b91476492ef7e510847f2dd9e67c8f4a7f24ad2bc0e6e574b70201 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"DUP HASH160 0x14 0xe280cb6e66b96679aec288b1fbdbd4db08077a1b EQUALVERIFY CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys without y bit set (P2PKH)"
],
[
"0x47 0x304402204344dda380768b2b87bf3ca615682a2630e7c957f9bfd27725a705305ea5581702203ac1b46f6e37263af61a9c5459a40505fd250e3cd07af88a311a3b60ad28dc8001 0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556",
"DUP HASH160 0x14 0x2f0b8922f80989a85a53e136af931e473343bcad EQUALVERIFY CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys with y bit set (P2PKH)"
],
[
"0x47 0x304402200cde54f44c5cfc3bf6fd71f18ac0570ab18b5a4e643145fd00cd9863da17bb0102200ad95f822df6fc4c7c4d1dd8fe9b554044bdc2c44aaf6b0843d46fed9f38d7b101 0x41 0x04f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672",
"DUP HASH160 0x14 0x84e54168b44c30bc76a97ac78b53ecbd75106e13 EQUALVERIFY CHECKSIG",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys (P2PKH)"
],
[
"0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 0x23 0x210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys with y bit set when in a P2SH redeem script"
],
[
"0x47 0x304402205708a07bf55b7ce3961d25e2495d522c7130261f00fb145525af4ac176b4656b02207ffad7719f55d73ccb57ccc4f139511f8c9325f8d1258adc63a441871c83c3ae01 0x23 0x2103fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556ac",
"HASH160 0x14 0xfa07a95bb9386647aa5a40555415277be50d4ff1 EQUAL",
"NONE", "OK",
"CHECKSIG must work with compressed pubkeys without y bit set when in a P2SH redeem script"
],
[
"0x47 0x304402202dba5e6a3653b0e6117e1e96abd8c0ab026963d4ba57505b876ee8f728c43d9d02204cf1113ea5bd191addaff587809ac7bca1bf0a4e12e9a18a81c69ffbf23ce1fc01 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x19 0x76a914e280cb6e66b96679aec288b1fbdbd4db08077a1b88ac",
"HASH160 0x14 0x6c3d84ad3f335eb67d9b66245b6b45cb8154bc5a EQUAL",
"NONE", "OK",
"CHECKSIG must work with uncompressed pubkeys when in a P2SH redeem script"
],
[
"0",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "OK",
"CHECKSIG must push false with invalid non-null DER-compliant sig with DERSIG (P2PK NOT 0 sig)"
],
[
"0x09 0x300602010102010101",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "OK",
"CHECKSIG must push false with invalid non-null DER-compliant sig with DERSIG (P2PK NOT min sig)"
],
[
"1",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"NONE", "OK",
"CHECKSIG must push false with invalid non-DER-compliant sig without DERSIG"
],
[
"0x48 0x304402204de4b86166781ffbd4375650776a338d53a0eabcc61f371ce256364f058f88ba0220597090d34c536b727fb555d61b100703a3f63b7a6ad7aa0164138c6ab3c63f880101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must push true for otherwise valid sig with multi-byte hash type without DERSIG"
],
[
"0x48 0x304502204fc10344934662ca0a93a84d14d650d8a21cf2ab91f608e8783d2999c95544320221008441aacd6b17038ff3f6700b042934f9a6fea0cec2051b51dc709e52a5bb7d6101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"CHECKSIG must push true when S is greater than the curve half order and sig is valid without DERSIG"
],
["", "CHECKSIG NOT", "", "ERR_INVALID_STACK_OPERATION", "CHECKSIG must error when there are no stack items"],
["0", "CHECKSIG NOT", "", "ERR_INVALID_STACK_OPERATION","CHECKSIG must error when there are not 2 stack items"],
["''", "0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG", "", "ERR_EVAL_FALSE", "CHECKSIG must evaluate 0-length signatures to false"],
[
"0x47 0x30440220464daa7c0365f10e019d4ac3560f7c5fb24834209d9a0eed757d9b2f61b09e0302203754bd0645c97e04a364bba06e4ec457ac25c578514eb9b37be492582a0ae36f05",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"", "ERR_SIG_HASH_TYPE",
"CHECKSIG must error with undefined hash types even when the signature is otherwise valid"
],
[
"0x48 0x3045022100de883a452b1b810fd74fd432ce8d551e51278223a6920dc304ba02aacbfc3728022065d2a9eb421ef9f3aced11cf5a85038ba619efb0cd23b66dee2645b94e05b2f205",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG NOT",
"", "ERR_SIG_HASH_TYPE",
"CHECKSIG must error with undefined hash types when the signature is invalid (valid sig 8th byte ^= 0x55)"
],
[
"0x48 0x304402204de4b86166781ffbd4375650776a338d53a0eabcc61f371ce256364f058f88ba0220597090d34c536b727fb555d61b100703a3f63b7a6ad7aa0164138c6ab3c63f880101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKSIG must error on multi-byte hash type with DERSIG"
],
[
"1",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"DERSIG", "ERR_SIG_TOO_SHORT",
"CHECKSIG must error on non-DER-compliant sig with DERSIG"
],
[
"1",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "ERR_SIG_TOO_SHORT",
"CHECKSIG must error on non-DER-compliant sig with DERSIG (P2PK NOT)"
],
[
"0x08 0x3005020100020001",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG NOT",
"DERSIG", "ERR_SIG_TOO_SHORT",
"CHECKSIG must error with too short signature with DERSIG"
],
[
"0x4a 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef848135248010101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_TOO_LONG",
"CHECKSIG must error with too long signature with DERSIG"
],
[
"0x48 0x3145022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_SEQ_ID",
"CHECKSIG must error when first byte of signature is not the ASN.1 sequence ID with DERSIG"
],
[
"0x48 0x3044022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKSIG must error when data len inside signature does not match the remaining len (one too small) with DERSIG"
],
[
"0x48 0x3046022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKSIG must error when data len inside signature does not match the remaining len (one too big) with DERSIG"
],
[
"0x26 0x3023022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef07401",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_MISSING_S_TYPE_ID",
"CHECKSIG must error when S ASN.1 integer ID is missing with DERSIG"
],
[
"0x27 0x3024022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef0740201",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_MISSING_S_LEN",
"CHECKSIG must error when S length is missing with DERSIG"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074021f30e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_S_LEN",
"CHECKSIG must error when S length is invalid (one too small) with DERSIG"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022130e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_S_LEN",
"CHECKSIG must error when S length is invalid (one too big) with DERSIG"
],
[
"0x48 0x3045032100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_R_INT_ID",
"CHECKSIG must error when R is not marked as ASN.1 integer with DERSIG"
],
[
"0x27 0x30240200022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_ZERO_R_LEN",
"CHECKSIG must error when R has length zero with DERSIG"
],
[
"0x47 0x30440220b2ec8d34d473c3aa2ab5eb7cc4a0783977e5db8c8daf777e0b6d7bfa6b6623f302207df6f09af2c40460da2c2c5778f636d3b2e27e20d10d90f5a5afb4523145470001",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKSIG must error when R is negative (too little padding) with DERSIG"
],
[
"0x47 0x30440220b20cd6f4b8496af01fe3e35b86139947ddb2f8a54cc1139d1839e2120de9fe540220261bd8ad7c1ab57912d5f432431001c26b72adc9cd7fde73c7776f7585c8538d01",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKSIG must error when R is negative (too little padding) with DERSIG (P2PK NOT)"
],
[
"0x47 0x304402200077f6e93de5ed43cf1dfddaa79fca4b766e1a8fc879b0333d377f62538d7eb5022054fed940d227ed06d6ef08f320976503848ed1f52d0dd6d17f80c9c160b01d8601",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"DERSIG", "ERR_SIG_TOO_MUCH_R_PADDING",
"CHECKSIG must error with otherwise valid sig when R has too much padding with DERSIG"
],
[
"0x47 0x304402200077f6e93de5ed43cf1dfddaa79fca4b766e1a8fc879b0333d377f62538d7eb5022054fed940d227ed06d6ef08f320976503848ed1f52d0dd6d17f80c9c160b01d8601",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "ERR_SIG_TOO_MUCH_R_PADDING",
"CHECKSIG must error with invalid sig when R has too much padding (P2PK NOT) with DERSIG (sig invalidated via 8th byte ^= 0x55)"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074032030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_INVALID_S_INT_ID",
"CHECKSIG must error when S is not marked as ASN.1 integer with DERSIG"
],
[
"0x28 0x3025022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074020001",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_ZERO_S_LEN",
"CHECKSIG must error when S has length zero with DERSIG"
],
[
"0x47 0x304402204fc10344934662ca0a93a84d14d650d8a21cf2ab91f608e8783d2999c955443202208441aacd6b17038ff3f6700b042934f9a6fea0cec2051b51dc709e52a5bb7d6101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_NEGATIVE_S",
"CHECKSIG must error when S is negative (too little padding) with DERSIG"
],
[
"0x47 0x304402206ad2fdaf8caba0f2cb2484e61b81ced77474b4c2aa069c852df1351b3314fe20022000695ad175b09a4a41cd9433f6b2e8e83253d6a7402096ba313a7be1f086dde501",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"DERSIG", "ERR_SIG_TOO_MUCH_S_PADDING",
"CHECKSIG must error with otherwise valid sig when S has too much padding with DERSIG"
],
[
"0x47 0x3044022079c8f3b4a84d0df95faa3459ed65e0094dc842521706ec9a2253a32c43c41feb02200036479eca243e68e312586061c803ddd8d2ce564ab395aa061938cf6e4d011401",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG NOT",
"DERSIG", "ERR_SIG_TOO_MUCH_S_PADDING",
"CHECKSIG must error with otherwise valid sig when S has too much padding with DERSIG (P2PK NOT)"
],
[
"0x48 0x304502204fc10344934662ca0a93a84d14d650d8a21cf2ab91f608e8783d2999c95544320221008441aacd6b17038ff3f6700b042934f9a6fea0cec2051b51dc709e52a5bb7d6101",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"DERSIG", "ERR_SIG_HIGH_S",
"CHECKSIG must error when S is greater than the curve half order even though it is otherwise valid with DERSIG"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x20 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with compressed pubkeys that are not exactly 33 bytes (one too small)"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x22 0x020079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with compressed pubkeys that are not exactly 33 bytes (one too big)"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with compressed pubkeys that do not start with 0x02 or 0x03 (modified to use hybrid indicator)"
],
[
"0x47 0x304402206f02f07d84e9bef57e3c211887902f0e3d2067e210678e7637927a3397e38ecc0220795a47bcc1585e8b329a5172fb412c51368dd4d273e8e0766e918590a3141bfe01",
"0x40 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with uncompressed pubkeys that are not exactly 65 bytes (one too small)"
],
[
"0x47 0x304402206f02f07d84e9bef57e3c211887902f0e3d2067e210678e7637927a3397e38ecc0220795a47bcc1585e8b329a5172fb412c51368dd4d273e8e0766e918590a3141bfe01",
"0x42 0x040079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with uncompressed pubkeys that are not exactly 65 bytes (one too big)"
],
[
"0x47 0x304402206f02f07d84e9bef57e3c211887902f0e3d2067e210678e7637927a3397e38ecc0220795a47bcc1585e8b329a5172fb412c51368dd4d273e8e0766e918590a3141bfe01",
"0x41 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with uncompressed pubkeys that do not start with 0x04 (modified to use compressed indicator)"
],
[
"0x48 0x304502210082c0c99f2fdaca6afc9f403fb8ecf15af5defc3ae1d50d36fe1f47678d12df5b02202b28b45438bf7d3e58bf7e3f59e76edbeb36cb3e25831f457134089aff0eae8e01",
"0x41 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with hybrid pubkeys despite being valid"
],
[
"0x47 0x304402204e804dee7cae7807599b6f46e9df993e9cb0958697d9621bc4ce8b9570e271300220039ffd97cb62963c92bafcd91b9259693f2ad021b74db6b9f62214d9f0712bdf01",
"0x41 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG NOT",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with hybrid pubkeys despite valid key and sig (P2PK NOT)"
],
[
"0x48 0x3045022100ba78f285d6d2c774b1c74da4d42859eb737eb157d128011ce73b9ba265760039022074b6aaf5be4cb6d6a1a6db2716ffabffa139345457261e1d8176061d6216794d01",
"0x41 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG NOT",
"", "ERR_PUBKEY_TYPE",
"CHECKSIG must error with hybrid pubkeys with invalid sigs (sig invalidated via 8th byte ^= 0x55)"
],
[
"0x47 0x304402200e1bf09e5bd4493bcac49225fe0858fe820ac23f3f81a9ebcf89c562c21ba60202200e3e8ce3dafdbc661fc16e34c2b8ed87f46c2600eed06fafafc6c5e6acce4abb01",
"0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 CHECKSIG",
"", "ERR_EVAL_FALSE",
"CHECKSIG must evaluate valid sigs for other hash types to false (anyonecanpay sig marked with all hash type)"
],
[
"0x48 0x3045022100f5356450d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"", "ERR_EVAL_FALSE",
"CHECKSIG must evaluate invalid sigs to false (compressed P2PK with sig invalidated via 8th byte ^= 0x55)"
],
[
"0x47 0x304402202dba5e3f3653b0e6117e1e96abd8c0ab026963d4ba57505b876ee8f728c43d9d02204cf1113ea5bd191addaff587809ac7bca1bf0a4e12e9a18a81c69ffbf23ce1fc01 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x19 0x76a914e280cb6e66b96679aec288b1fbdbd4db08077a1b88ac",
"HASH160 0x14 0x6c3d84ad3f335eb67d9b66245b6b45cb8154bc5a EQUAL",
"NONE", "ERR_EVAL_FALSE",
"CHECKSIG must evaluate invalid sigs to false (compressed p2pkh inside p2sh with sig invalidated via 8th byte ^= 0x55)"
],
[
"0",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"", "ERR_EVAL_FALSE",
"CHECKSIG must evaluate 0 sig to false without DERSIG"
],
[
"0",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"DERSIG", "ERR_EVAL_FALSE",
"CHECKSIG must consider 0 sig value and evaluate to false with DERSIG"
],
[
"1",
"0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 CHECKSIG",
"", "ERR_EVAL_FALSE",
"CHECKSIG must evaluate non-DER-compliant sig to false without DERSIG"
],
["Additional test coverage with standard payment forms involving CHECKSIG"],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801 NOP",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"Execution must not error with non-push-only sig script without P2SH or SIGPUSHONLY"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801 NOP",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"Execution must not error with non-push-only sig script with P2SH and without SIGPUSHONLY"
],
[
"11 0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"NONE", "OK",
"Execution must not error when the script finishes with data on the stack without CLEANSTACK (P2PK with extra input)"
],
[
"0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 0x23 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"CLEANSTACK", "OK",
"P2SH execution must not error when the script finishes without data on the stack with CLEANSTACK"
],
[
"11 0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 0x23 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"NONE", "OK",
"P2SH execution must not error when the script finishes with data on the stack without CLEANSTACK"
],
[
"0x48 0x3045022100e67ff2e958d066294263617782bedca9eddf1a88e15711caa8a0dd5db5317cfb0220490ca23dced8b91476492ef7e510847f2dd9e67c8f4a7f24ad2bc0e6e574b70201 0x21 0x0279be662bf9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
"DUP HASH160 0x14 0xe280cb6e66b96679aec288b1fbdbd4db08077a1b EQUALVERIFY CHECKSIG",
"", "ERR_EQUAL_VERIFY",
"EQUALVERIFY must error due to mismatched hash from corrupted compressed P2PKH (pubkey invalidated via 5th byte ^= 0x55)"
],
[
"0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 0x23 0x210279be337ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"NONE", "ERR_EVAL_FALSE",
"P2SH execution must push false on mistmatched hash from corrupted compressed P2PK redeem script (redeem script invalidated via 5th byte ^= 0x55)"
],
[
"0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801 NOP",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"SIGPUSHONLY", "ERR_SIG_PUSHONLY",
"Execution must error when signature script contains non-push-only opcodes with SIGPUSHONLY"
],
[
"0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 NOP 0x23 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"NONE", "ERR_SIG_PUSHONLY",
"P2SH execution must error when signature script contains non-push-only opcodes without SIGPUSHONLY"
],
[
"0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 NOP 0x23 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"SIGPUSHONLY", "ERR_SIG_PUSHONLY",
"P2SH execution must error when signature script contains non-push-only opcodes with SIGPUSHONLY"
],
[
"11 0x48 0x3045022100f5353150d31a63f4a0d06d1f5a01ac65f7267a719e49f2a1ac584fd546bef074022030e09575e7a1541aa018876a4003cefe1b061a90556b5140c63e0ef84813524801",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"CLEANSTACK", "ERR_CLEAN_STACK",
"Execution must error when the script finishes with data on the stack with CLEANSTACK"
],
[
"11 0x47 0x304402205550606a87650619f98b261adde6d343aad0c3fdd526c68d5ed718819ee59a7e0220335af6a47a18064681a77f8387c95934439bdf74b61e290a3353528311b8c99301 0x23 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 CHECKSIG",
"HASH160 0x14 0xe57d091fa806258280dc78a1d8544a47a5b16a19 EQUAL",
"CLEANSTACK", "ERR_CLEAN_STACK",
"P2SH execution must error when the script finishes with data on the stack with CLEANSTACK"
],
["Test coverage for CHECKMULTISIG"],
["NOTE: See the CHECKSIG section above for information about the keys used in these tests:"],
["", "0 0 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG is allowed to have zero pubkeys and/or sigs"],
["", "0 0 1 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG zero sigs means no sigs or pubkeys are checked"],
["", "0 <0>{2} 2 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 2 pubkeys"],
["", "0 <0>{3} 3 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 3 pubkeys"],
["", "0 <0>{4} 4 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 4 pubkeys"],
["", "0 <0>{5} 5 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 5 pubkeys"],
["", "0 <0>{6} 6 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 6 pubkeys"],
["", "0 <0>{7} 7 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 7 pubkeys"],
["", "0 <0>{8} 8 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 8 pubkeys"],
["", "0 <0>{9} 9 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 9 pubkeys"],
["", "0 <0>{10} 10 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 10 pubkeys"],
["", "0 <0>{11} 11 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 11 pubkeys"],
["", "0 <0>{12} 12 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 12 pubkeys"],
["", "0 <0>{13} 13 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 13 pubkeys"],
["", "0 <0>{14} 14 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 14 pubkeys"],
["", "0 <0>{15} 15 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 15 pubkeys"],
["", "0 <0>{16} 16 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 16 pubkeys"],
["", "0 <0>{17} 17 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 17 pubkeys"],
["", "0 <0>{18} 18 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 18 pubkeys"],
["", "0 <0>{19} 19 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 19 pubkeys"],
["", "0 <0>{20} 20 CHECKMULTISIG VERIFY DEPTH 0 EQUAL", "NONE", "OK","CHECKMULTISIG must allow 20 pubkeys"],
["", "<0 0 CHECKMULTISIG>{255}", "NONE", "OK", "CHECKMULTSIG increments op count by num pubkeys evaluated in addition to the usual one per op"],
[
"",
"<NOP>{3} <0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG>{12}",
"NONE", "OK",
"CHECKMULTISIG with no sigs checked still increments op count by num pubkeys evaluated (12 * 21 + 3 = 255)"
],
["1", "<0 0 CHECKMULTISIG>{256}", "", "ERR_OP_COUNT", "256 CHECKMULTISIG must error due to 255 op limit"],
[
"0x47 0x304402203f419012d8e26a336579b8a1410c6a2bb460965d093beee381851998e946013b02205281ee195559c758fb3a3abb9d38ad32ed83d53e319793fb7e5fab31ac48ec0c01 0x47 0x304402206c5bb54f2a8681d4ebbd762042addc2837d2a0e3dc3e600a09c1901512643e8b022072f3acdcce1f2adde1fddfc642e2403f84f040e7dbb0d4249a9b837f98ad259101 0x48 0x3045022100c99fdb4f2f1df128d5646dd24b603c3a7c3a93912f457a03a38a70d83acd1f52022059929aa3f91bdc711d20a4c6773fac5ef7b12b0a12c1f93192ba0eefa3bdb3d301",
"3 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 3 CHECKMULTISIG",
"NONE", "OK",
"CHECKMULTISIG must push true when provided the specified number of valid sigs (3-of-3, 3 valid sigs)"
],
[
"0x47 0x3044022015dd38cbf89c82f64393ffed0dc2a388a791086950d82fd201e5a8395fc79a2e0220379c89ff963bd904614e5e2b12acbdd14b927f35232bf53b1d598e45a4ed922c01 0x48 0x3045022100aa2c8c3d545d53109b9f9c1c808026c328e5a171c06b9202352530ab9c43c21d0220476e919d7e5c6cf8832122b33ba57aed45c83f481296d89b8f61d30f1c4271e601 0x4c69 2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 3 CHECKMULTISIG",
"HASH160 0x14 0xf86b5a7c6d32566aa4dccc04d1533530b4d64cf3 EQUAL",
"NONE", "OK",
"CHECKMULTISIG must work in a P2SH redeem script (2-of-3, 2 valid sigs)"
],
[
"0 0x47 0x30440220ea377dcb8630e68da3a0eeb57e96e195b4d9c437381f76912c0e6fc28bae6e3502204096da36de10b7261bfa6ae0fddbe11428c1d13160bcb1110ed04f3f7d2f389f01",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG NOT",
"NONE", "OK",
"CHECKMULTISIG must not error with sigs where R is negative without DERSIG (2-of-2, first sig valid non-DER, second sig invalid but DER compliant)"
],
[
"0x47 0x30440220eb8231fbc543176e5ee8b80591b7db91d4dab835daada515d95f3532eb54b86102203e76890b026b24030a99a2ae5957d573b7a9ecbc382d613b18c25c124d0fac9a01 0",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG NOT",
"NONE", "OK",
"CHECKMULTISIG must not error with sigs where R is negative without DERSIG (2-of-2, first sig invalid but DER compliant, second sig valid non-DER)"
],
["", "CHECKMULTISIG NOT", "", "ERR_INVALID_STACK_OPERATION", "CHECKMULTISIG must error when there are no stack items"],
["", "-1 CHECKMULTISIG NOT", "", "ERR_PUBKEY_COUNT", "CHECKMULTISIG must error when the specified number of pubkeys is negative"],
[
"",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 2 CHECKMULTISIG NOT",
"", "ERR_INVALID_STACK_OPERATION",
"CHECKMULTISIG must error when there are not enough pubkeys on the stack"
],
[
"",
"<0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798>{21} 21 CHECKMULTISIG 1",
"", "ERR_PUBKEY_COUNT",
"CHECKMULTISIG must error with more than 20 pubkeys"
],
[
"",
"0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 1 CHECKMULTISIG NOT",
"", "ERR_INVALID_STACK_OPERATION",
"CHECKMULTISIG must error when the required num signatures stack item is not on the stack"
],
["", "-1 0 CHECKMULTISIG NOT", "", "ERR_SIG_COUNT", "CHECKMULTISIG must error when the specified number of signatures is negative"],
[
"0x46 0x3043022053588bba590227c76367d8b0dda23d06c4438aae228931c8966ad49dc870e889021f7be968f70db1543c50781ccee983eb447c8712662ec993876da4bebb1784e901",
"1 0 CHECKMULTISIG 1",
"", "ERR_SIG_COUNT",
"CHECKMULTISIG must error with more signatures than pubkeys"
],
[
"",
"1 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 1 CHECKMULTISIG NOT",
"", "ERR_INVALID_STACK_OPERATION",
"CHECKMULTISIG must error when there are not enough signatures on the stack"
],
[
"",
"<NOP>{4} <0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIG>{12}",
"", "ERR_OP_COUNT",
"CHECKMULTISIG must error if ops would exceed 255 limit"],
[
"1",
"<NOP>{4} <0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY>{12}",
"", "ERR_OP_COUNT",
"CHECKMULTISIGVERIFY must error if ops would exceed 255 limit"
],
[
"0x48 0x304502210085b4d8c2f551d2393bbb096f18f50516a1910f25cdcd06e1d2164514c2537e830220212144571d671d885097eff4dae6bf2ae1f0a67481f0d07e73994eaea8162bf105",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"", "ERR_SIG_HASH_TYPE",
"CHECKMULTISIG must error with undefined hash types even when the signature is otherwise valid"
],
[
"0x48 0x304502210085b48dc2f551d2393bbb096f18f50516a1910f25cdcd06e1d2164514c2537e830220212144571d671d885097eff4dae6bf2ae1f0a67481f0d07e73994eaea8162bf105",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"", "ERR_SIG_HASH_TYPE",
"CHECKMULTISIG must error with undefined hash types when the signature is invalid (valid sig 8th byte ^= 0x55)"
],
[
"0x49 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d0101",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKMULTISIG must error on multi-byte hash type with DERSIG"
],
[
"0x08 0x3005020100020001",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_SHORT",
"CHECKMULTISIG must error with too short signature with DERSIG"
],
[
"0x4a 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d010101",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_LONG",
"CHECKMULTISIG must error with too long signature with DERSIG"
],
[
"0x48 0x3145022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_SEQ_ID",
"CHECKMULTISIG must error when first byte of signature is not the ASN.1 sequence ID with DERSIG"
],
[
"0x48 0x3044022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKMULTISIG must error when data len inside signature does not match the remaining len (one too small) with DERSIG"
],
[
"0x48 0x3046022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_DATA_LEN",
"CHECKMULTISIG must error when data len inside signature does not match the remaining len (one too big) with DERSIG"
],
[
"0x26 0x3023022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_MISSING_S_TYPE_ID",
"CHECKMULTISIG must error when S ASN.1 integer ID is missing with DERSIG"
],
[
"0x27 0x3024022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a0201",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_MISSING_S_LEN",
"CHECKMULTISIG must error when S length is missing with DERSIG"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a021f7eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_S_LEN",
"CHECKMULTISIG must error when S length is invalid (one too small) with DERSIG"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02217eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_S_LEN",
"CHECKMULTISIG must error when S length is invalid (one too big) with DERSIG"
],
[
"0x48 0x3045032100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_R_INT_ID",
"CHECKMULTISIG must error when R is not marked as ASN.1 integer with DERSIG"
],
[
"0x27 0x3024020002207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_ZERO_R_LEN",
"CHECKMULTISIG must error when R has length zero with DERSIG"
],
[
"0x47 0x30440220a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKMULTISIG must error when R is negative (too little padding) with DERSIG"
],
[
"0x47 0x30440220eb8231fbc543176e5ee8b80591b7db91d4dab835daada515d95f3532eb54b86102203e76890b026b24030a99a2ae5957d573b7a9ecbc382d613b18c25c124d0fac9a01 0x48 0x3045022100b6d7a4f10cd430b1292b761e2cf3ef1284dc4b8276a6d4895d955016f06f1bb702205d8f79c45719eae0985ce7602ddf4ec2427de5c353f4e642f9e4855d159f6a7801",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKMULTISIG must error when R is negative with DERSIG (2-of-2, first sig valid DER, second sig valid non-DER)"
],
[
"0x47 0x3044022058e3e5d0c457d3b41d7b555366410fb233e00f504812e87602cd5f9174cbe2fc02201805a21251d62eae7ce92ba4235bd553a38ac0e0ffe9bac0f2fa9ccfc6abdcdc01 0x47 0x30440220a1bf7167ce8c49568537045e70f689b90f42a496d75947f14e6dbfdbfa6b0fc602200564205c85c3003f5e3442eeb4632c4fc5928838727324ae3b11f8de3579981501",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKMULTISIG must error when R is negative with DERSIG (2-of-2, first sig valid non-DER, second sig valid DER)"
],
[
"0 0x47 0x30440220ea377dcb8630e68da3a0eeb57e96e195b4d9c437381f76912c0e6fc28bae6e3502204096da36de10b7261bfa6ae0fddbe11428c1d13160bcb1110ed04f3f7d2f389f01",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_R",
"CHECKMULTISIG must error when R is negative with DERSIG (2-of-2, first sig valid non-DER, second sig invalid but DER compliant)"
],
[
"0x47 0x30440220b35d1861ac81cd15748dbf82a67931057600f5596cde464621f8a8afeea84862022076aea5e870ed4d82955b1c803de191fc4c82c8b6c6e243d3e17295506f276e7301 0",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 2 CHECKMULTISIG",
"DERSIG", "ERR_EVAL_FALSE",
"CHECKMULTISIG must push false even if an unevaluated signature is not DER compliant with DERSIG (2-of-2, first sig invalid but DER compliant, second sig valid non-DER)"
],
[
"0x49 0x304602220000a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_MUCH_R_PADDING",
"CHECKMULTISIG must error with otherwise valid sig when R has too much padding with DERSIG"
],
[
"0x49 0x304602220000a1756e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_MUCH_R_PADDING",
"CHECKMULTISIG must error with invalid sig when R has too much padding with DERSIG (sig invalidated via 8th byte ^= 0x55)"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a03207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_INVALID_S_INT_ID",
"CHECKMULTISIG must error when S is not marked as ASN.1 integer with DERSIG"
],
[
"0x28 0x3025022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a020001",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_ZERO_S_LEN",
"CHECKMULTISIG must error when S has length zero with DERSIG"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a0220feb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_NEGATIVE_S",
"CHECKMULTISIG must error when S is negative (too little padding) with DERSIG"
],
[
"0x49 0x3046022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a0221007eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_MUCH_S_PADDING",
"CHECKMULTISIG must error with otherwise valid sig when S has too much padding with DERSIG"
],
[
"0x48 0x30450220432c00086747ac31b5fca8ba1cc987eb8eb0f52315ce9fc03bc383780377c3aa022100adc9314c1b1551133e9ae1ec837e2e3820263a1f0a9553c885d39e3003d9300d01",
"1 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_HIGH_S",
"CHECKMULTISIG must error when S is greater than the curve half order even though it is otherwise valid with DERSIG"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x20 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with compressed pubkeys that are not exactly 33 bytes (one too small)"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x22 0x0200f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with compressed pubkeys that are not exactly 33 bytes (one too big)"
],
[
"0x48 0x3045022100a1206e43320cc02d97c76eb2d575cdb1215b491c5b0c7a7865d3a4bea2a7a39a02207eb5a56828d164f158812e0ad8d39588258ae0e369cb918bfaab6d61ba90d80d01",
"1 0x21 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with compressed pubkeys that do not start with 0x02 or 0x03 (modified to use hybrid indicator)"
],
[
"0x47 0x3044022001f819d40db86ba57450d99dc1ed009e1a55f633a78ef6ff4ca955961cef3f530220770013aee8e7f47c1c1b8a9fe90f9f6e5e59fbecd5ed4f37a99dfd112ad4e07901",
"1 0x40 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with uncompressed pubkeys that are not exactly 65 bytes (one too small)"
],
[
"0x47 0x3044022001f819d40db86ba57450d99dc1ed009e1a55f633a78ef6ff4ca955961cef3f530220770013aee8e7f47c1c1b8a9fe90f9f6e5e59fbecd5ed4f37a99dfd112ad4e07901",
"1 0x42 0x040079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with compressed pubkeys that are not exactly 33 bytes (one too big)"
],
[
"0x47 0x3044022001f819d40db86ba57450d99dc1ed009e1a55f633a78ef6ff4ca955961cef3f530220770013aee8e7f47c1c1b8a9fe90f9f6e5e59fbecd5ed4f37a99dfd112ad4e07901",
"1 0x41 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with uncompressed pubkeys that do not start with 0x04 (modified to use compressed indicator)"
],
[
"0x47 0x3044022001f819d40db86ba57450d99dc1ed009e1a55f633a78ef6ff4ca955961cef3f530220770013aee8e7f47c1c1b8a9fe90f9f6e5e59fbecd5ed4f37a99dfd112ad4e07901",
"1 0x41 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with hybrid pubkeys despite being valid"
],
[
"0x47 0x3044022001f819810db86ba57450d99dc1ed009e1a55f633a78ef6ff4ca955961cef3f530220770013aee8e7f47c1c1b8a9fe90f9f6e5e59fbecd5ed4f37a99dfd112ad4e07901",
"1 0x41 0x0579be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 1 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error with hybrid pubkeys with invalid sigs (sig invalidated via 8th byte ^= 0x55)"
],
[
"0x47 0x304402202809a0c2d54517cb3cd7d3068e5114a9cfcf4790b6a73e0e14468116582b674c022009b0a6bed0c0a8d28761b7642a841868e194a72a6bad0587b473a9ca9fd53f8f01",
"1 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x41 0x05f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672 2 CHECKMULTISIG",
"", "ERR_PUBKEY_TYPE",
"CHECKMULTISIG must error when encountering hybrid pubkeys even if there are enough other valid sigs (1-of-2, first pubkey hybrid)"
],
[
"0x48 0x3045022100a12e942a32c449814862a6fa80a9c2a5668cd598b3e16615bb9fdcb90489b408022058c53de4979498219cabbdac166789ff6cc8402a271ec332b74deae4fd304a3101",
"1 0x41 0x0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 1 CHECKMULTISIG",
"DERSIG", "ERR_EVAL_FALSE",
"CHECKSIG must push false for valid sigs for other hash types (anyonecanpay sig marked with all hash type)"
],
[
"0x47 0x304402203f419012d8e26a336579b8a1410c6a2bb460965d093beee381851998e946013b02205281ee195559c758fb3a3abb9d38ad32ed83d53e319793fb7e5fab31ac48ec0c01 0x47 0x304402206c5bb54f2a8681d4ebbd762042addc2837d2a0e3dc3e600a09c1901512643e8b022072f3acdcce1f2adde1fddfc642e2403f84f040e7dbb0d4249a9b837f98ad259101 0",
"3 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 3 CHECKMULTISIG",
"", "ERR_EVAL_FALSE",
"CHECKMULTISIG must push false if not all required signatures are valid (3-of-3, 2 valid sigs)"
],
[
"0x47 0x3044022015dd38cbf89c82f64393ffed0dc2a388a791086950d82fd201e5a8395fc79a2e0220379c89ff963bd904614e5e2b12acbdd14b927f35232bf53b1d598e45a4ed922c01 0 0x4c69 2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 0x21 0x02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9 0x21 0x03fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556 3 CHECKMULTISIG",
"HASH160 0x14 0xf86b5a7c6d32566aa4dccc04d1533530b4d64cf3 EQUAL",
"NONE", "ERR_EVAL_FALSE",
"CHECKMULTISIG must push false if not all required signatures are valid (P2SH(2-of-3), 1 valid sig)"
],
["Additional test coverage with standard payment forms involving CHECKMULTISIG"],
[
"0x48 0x3045022100c40b401e745675a9280ef213d6bfc453bd941d61004e30acdcc2704c5098bcbb02206d2f2549311cf537b67a46840044124f2068759d3ba0ac4f1d377ded06d3532101 DUP",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 DUP 2 CHECKMULTISIG",
"NONE", "OK",
"Execution must not error when signature script contains non-push-only opcodes without SIGPUSHONLY (2-of-2, identical keys and sigs pushed via DUP)"
],
[
"0x48 0x3045022100c40b401e745675a9280ef213d6bfc453bd941d61004e30acdcc2704c5098bcbb02206d2f2549311cf537b67a46840044124f2068759d3ba0ac4f1d377ded06d3532101 DUP",
"2 0x21 0x0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 DUP 2 CHECKMULTISIG",
"SIGPUSHONLY", "ERR_SIG_PUSHONLY",
"Execution must error when signature script contains non-push-only opcodes with SIGPUSHONLY (2-of-2, identical keys and sigs pushed via DUP)"
],
["CHECKMULTISIG evaluation order tests. CHECKMULTISIG evaluates signatures and"],
["pubkeys in a specific order, and will exit early if the number of signatures"],
["left to check is greater than the number of keys left. As strict encoding fails the"],
["script when it reaches an invalidly encoded signature or pubkey, we can use it"],
["to test the exact order in which signatures and pubkeys are evaluated by"],
["distinguishing CHECKMULTISIG returning false on the stack and the script as a"],
["whole failing."],
[
"0 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
"2 0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT",
"NONE", "OK",
"2-of-2 CHECKMULTISIG NOT with the second pubkey invalid, and both signatures validly encoded. Valid pubkey fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid pubkey."
],
[
"0 0 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
"2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT",
"NONE", "OK",
"2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but second signature invalid. Valid pubkey fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid signature."
],
[
"0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
"2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0 2 CHECKMULTISIG NOT",
"DERSIG", "ERR_PUBKEY_TYPE",
"2-of-2 CHECKMULTISIG NOT with the first pubkey invalid, and both signatures validly encoded"
],
[
"0x47 0x3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501 1",
"2 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 2 CHECKMULTISIG NOT",
"DERSIG", "ERR_SIG_TOO_SHORT",
"2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but first signature invalid"
],
["While not really correctly DER encoded, the empty signature is allowed by"],
["strict encoding to provide a compact way to provide a delibrately invalid signature."],
["0", "0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 CHECKSIG NOT", "NONE", "OK"],
["0", "1 0x21 0x02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0 1 CHECKMULTISIG NOT", "NONE", "OK"],
["Test coverage for CHECKMULTISIGVERIFY"],
["1", "<0 0 CHECKMULTISIGVERIFY>{255}", "NONE", "OK", "CHECKMULTSIGVERIFY increments op count by num pubkeys evaluated in addition to the usual one per op"],
["1", "<0 0 CHECKMULTISIGVERIFY>{256}", "", "ERR_OP_COUNT", "256 CHECKMULTISIGVERIFY must error due to 255 op limit"],
[
"1",
"<NOP>{3} <0 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 20 CHECKMULTISIGVERIFY>{12}",
"NONE", "OK",
"CHECKMULTISIGVERIFY with no sigs checked still increments op count by num pubkeys evaluated (12 * 21 + 3 = 255)"
],
["", "0 0 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY is allowed to have zero pubkeys and/or sigs"],
["", "0 0 1 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY zero sigs means no sigs or pubkeys are checked"],
["", "0 <0>{2} 2 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 2 pubkeys"],
["", "0 <0>{3} 3 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 3 pubkeys"],
["", "0 <0>{4} 4 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 4 pubkeys"],
["", "0 <0>{5} 5 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 5 pubkeys"],
["", "0 <0>{6} 6 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 6 pubkeys"],
["", "0 <0>{7} 7 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 7 pubkeys"],
["", "0 <0>{8} 8 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 8 pubkeys"],
["", "0 <0>{9} 9 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 9 pubkeys"],
["", "0 <0>{10} 10 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 10 pubkeys"],
["", "0 <0>{11} 11 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 11 pubkeys"],
["", "0 <0>{12} 12 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 12 pubkeys"],
["", "0 <0>{13} 13 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 13 pubkeys"],
["", "0 <0>{14} 14 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 14 pubkeys"],
["", "0 <0>{15} 15 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 15 pubkeys"],
["", "0 <0>{16} 16 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 16 pubkeys"],
["", "0 <0>{17} 17 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 17 pubkeys"],
["", "0 <0>{18} 18 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 18 pubkeys"],
["", "0 <0>{19} 19 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 19 pubkeys"],
["", "0 <0>{20} 20 CHECKMULTISIGVERIFY DEPTH 0 EQUAL", "NONE", "OK", "CHECKMULTISIGVERIFY must allow 20 pubkeys"],
["1", "IF 0x50 ENDIF 1", "NONE", "ERR_RESERVED_OPCODE", "0x50 is reserved"],
["0x52", "0x5f ADD 0x60 EQUAL", "NONE", "ERR_EVAL_FALSE", "0x51 through 0x60 push 1 through 16 onto stack"],
["0","NOP", "NONE", "ERR_EVAL_FALSE"],
["1", "IF VER ELSE 1 ENDIF", "NONE", "ERR_RESERVED_OPCODE", "VER non-functional"],
["0", "IF VERIF ELSE 1 ENDIF", "NONE", "ERR_RESERVED_OPCODE", "VERIF illegal everywhere"],
["0", "IF ELSE 1 ELSE VERIF ENDIF", "NONE", "ERR_RESERVED_OPCODE", "VERIF illegal everywhere"],
["0", "IF VERNOTIF ELSE 1 ENDIF", "NONE", "ERR_RESERVED_OPCODE", "VERNOTIF illegal everywhere"],
["0", "IF ELSE 1 ELSE VERNOTIF ENDIF", "NONE", "ERR_RESERVED_OPCODE", "VERNOTIF illegal everywhere"],
["1 IF", "1 ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL", "IF/ENDIF can't span scriptSig/scriptPubKey"],
["1 IF 0 ENDIF", "1 ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1 ELSE 0 ENDIF", "1", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["0 NOTIF", "123", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["0", "DUP IF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0", "IF 1 ENDIF", "NONE", "ERR_EMPTY_STACK"],
["0", "DUP IF ELSE ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0", "IF 1 ELSE ENDIF", "NONE", "ERR_EMPTY_STACK"],
["0", "NOTIF ELSE 1 ENDIF", "NONE", "ERR_EMPTY_STACK"],
["0 1", "IF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0 0", "IF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["1 0", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0 1", "IF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0 0", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0 1", "NOTIF IF 1 ELSE 0 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["1 1", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["0 0", "NOTIF IF 1 ELSE 0 ENDIF ELSE IF 0 ELSE 1 ENDIF ENDIF", "NONE", "ERR_EVAL_FALSE"],
["1", "IF RETURN ELSE ELSE 1 ENDIF", "NONE", "ERR_EARLY_RETURN", "Multiple ELSEs"],
["1", "IF 1 ELSE ELSE RETURN ENDIF", "NONE", "ERR_EARLY_RETURN"],
["1", "ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL", "Malformed IF/ELSE/ENDIF sequence"],
["1", "ELSE ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "ENDIF ELSE", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "ENDIF ELSE IF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "IF ELSE ENDIF ELSE", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "IF ELSE ENDIF ELSE ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "IF ENDIF ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "IF ELSE ELSE ENDIF ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL"],
["1", "RETURN", "NONE", "ERR_EARLY_RETURN"],
["1", "DUP IF RETURN ENDIF", "NONE", "ERR_EARLY_RETURN"],
["1", "RETURN 'data'", "NONE", "ERR_EARLY_RETURN", "canonical prunable txout format"],
["0 IF", "RETURN ENDIF 1", "NONE", "ERR_UNBALANCED_CONDITIONAL", "still prunable because IF/ENDIF can't span scriptSig/scriptPubKey"],
["0", "VERIFY 1", "NONE", "ERR_VERIFY"],
["1", "VERIFY", "NONE", "ERR_EMPTY_STACK"],
["1", "VERIFY 0", "NONE", "ERR_EVAL_FALSE"],
["1 TOALTSTACK", "FROMALTSTACK 1", "NONE", "ERR_INVALID_ALTSTACK_OPERATION", "alt stack not shared between sig/pubkey"],
["IFDUP", "DEPTH 0 EQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["DROP", "DEPTH 0 EQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["DUP", "DEPTH 0 EQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "DUP 1 ADD 2 EQUALVERIFY 0 EQUAL", "NONE", "ERR_EVAL_FALSE"],
["NOP", "NIP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1 NIP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1 0 NIP", "NONE", "ERR_EVAL_FALSE"],
["NOP", "OVER 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "OVER", "NONE", "ERR_INVALID_STACK_OPERATION"],
["0 1", "OVER DEPTH 3 EQUALVERIFY", "NONE", "ERR_EVAL_FALSE"],
["19 20 21", "PICK 19 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "0 PICK", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "-1 PICK", "NONE", "ERR_INVALID_STACK_OPERATION"],
["19 20 21", "0 PICK 20 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["19 20 21", "1 PICK 21 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["19 20 21", "2 PICK 22 EQUALVERIFY DEPTH 3 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["NOP", "0 ROLL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "-1 ROLL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["19 20 21", "0 ROLL 20 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["19 20 21", "1 ROLL 21 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["19 20 21", "2 ROLL 22 EQUALVERIFY DEPTH 2 EQUAL", "NONE", "ERR_EQUAL_VERIFY"],
["NOP", "ROT 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1 ROT 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1 2 ROT 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "0 1 2 ROT", "NONE", "ERR_EVAL_FALSE"],
["NOP", "SWAP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "SWAP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["0 1", "SWAP 1 EQUALVERIFY", "NONE", "ERR_EQUAL_VERIFY"],
["NOP", "TUCK 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "TUCK 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 0", "TUCK DEPTH 3 EQUALVERIFY SWAP 2DROP", "NONE", "ERR_EVAL_FALSE"],
["NOP", "2DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "2DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "3DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "3DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 2", "3DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "2OVER 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "2 3 2OVER 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "2SWAP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "2 3 2SWAP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SIZE 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["", "EQUAL NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "EQUAL must error when there are no stack items"],
["0", "EQUAL NOT", "NONE", "ERR_INVALID_STACK_OPERATION", "EQUAL must error when there are not 2 stack items"],
["0 1","EQUAL", "NONE", "ERR_EVAL_FALSE"],
["1 1 ADD", "0 EQUAL", "NONE", "ERR_EVAL_FALSE"],
["11 1 ADD 12 SUB", "11 EQUAL", "NONE", "ERR_EVAL_FALSE"],
["2147483648 0 ADD", "NOP", "NONE", "ERR_OUT_OF_RANGE", "Arithmetic operands must be in range [-2^31...2^31] "],
["-2147483648 0 ADD", "NOP", "NONE", "ERR_OUT_OF_RANGE", "Arithmetic operands must be in range [-2^31...2^31] "],
["2147483647 DUP ADD", "4294967294 NUMEQUAL", "NONE", "ERR_OUT_OF_RANGE", "NUMEQUAL must be in numeric range"],
["'abcdef' NOT", "0 EQUAL", "NONE", "ERR_OUT_OF_RANGE", "NOT is an arithmetic operand"],
["2 2MUL", "4 EQUAL", "NONE", "ERR_EVAL_FALSE", "2MUL is a NOP"],
["2 2DIV", "1 EQUAL", "NONE", "ERR_EVAL_FALSE", "2DIV is a NOP"],
["1","NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 SSTX SSGEN SSRTX 2 EQUAL", "NONE", "ERR_EVAL_FALSE"],
["'NOP_1_to_10' NOP1 NOP2 NOP3 NOP4 NOP5 NOP6 NOP7 NOP8 NOP9 NOP10 SSTX SSGEN SSRTX","'NOP_1_to_11' EQUAL", "NONE", "ERR_EVAL_FALSE"],
["Ensure 100% coverage of discouraged NOPS"],
["1", "NOP1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb0 is a discouraged NOP"],
["1", "NOP2", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb1 is a discouraged NOP when CLTV is inactive"],
["1", "NOP3", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb2 is a discouraged NOP when CSV is inactive"],
["1", "NOP4", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb3 is a discouraged NOP"],
["1", "NOP5", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb4 is a discouraged NOP"],
["1", "NOP6", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb5 is a discouraged NOP"],
["1", "NOP7", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb6 is a discouraged NOP"],
["1", "NOP8", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb7 is a discouraged NOP"],
["1", "NOP9", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb8 is a discouraged NOP"],
["1", "NOP10", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xb9 is a discouraged NOP"],
["1", "0xc0", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc0 is a discouraged NOP when SHA256 is inactive"],
["1", "0xc1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc1 is a discouraged NOP"],
["1", "0xc2", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc2 is a discouraged NOP"],
["1", "0xc3", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc3 is a discouraged NOP"],
["1", "0xc4", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc4 is a discouraged NOP"],
["1", "0xc5", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc5 is a discouraged NOP"],
["1", "0xc6", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc6 is a discouraged NOP"],
["1", "0xc7", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc7 is a discouraged NOP"],
["1", "0xc8", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc8 is a discouraged NOP"],
["1", "0xc9", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xc9 is a discouraged NOP"],
["1", "0xca", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xca is a discouraged NOP"],
["1", "0xcb", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xcb is a discouraged NOP"],
["1", "0xcc", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xcc is a discouraged NOP"],
["1", "0xcd", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xcd is a discouraged NOP"],
["1", "0xce", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xce is a discouraged NOP"],
["1", "0xcf", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xcf is a discouraged NOP"],
["1", "0xd0", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd0 is a discouraged NOP"],
["1", "0xd1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd1 is a discouraged NOP"],
["1", "0xd2", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd2 is a discouraged NOP"],
["1", "0xd3", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd3 is a discouraged NOP"],
["1", "0xd4", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd4 is a discouraged NOP"],
["1", "0xd5", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd5 is a discouraged NOP"],
["1", "0xd6", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd6 is a discouraged NOP"],
["1", "0xd7", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd7 is a discouraged NOP"],
["1", "0xd8", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd8 is a discouraged NOP"],
["1", "0xd9", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xd9 is a discouraged NOP"],
["1", "0xda", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xda is a discouraged NOP"],
["1", "0xdb", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xdb is a discouraged NOP"],
["1", "0xdc", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xdc is a discouraged NOP"],
["1", "0xdd", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xdd is a discouraged NOP"],
["1", "0xde", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xde is a discouraged NOP"],
["1", "0xdf", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xdf is a discouraged NOP"],
["1", "0xe0", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe0 is a discouraged NOP"],
["1", "0xe1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe1 is a discouraged NOP"],
["1", "0xe2", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe2 is a discouraged NOP"],
["1", "0xe3", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe3 is a discouraged NOP"],
["1", "0xe4", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe4 is a discouraged NOP"],
["1", "0xe5", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe5 is a discouraged NOP"],
["1", "0xe6", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe6 is a discouraged NOP"],
["1", "0xe7", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe7 is a discouraged NOP"],
["1", "0xe8", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe8 is a discouraged NOP"],
["1", "0xe9", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xe9 is a discouraged NOP"],
["1", "0xea", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xea is a discouraged NOP"],
["1", "0xeb", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xeb is a discouraged NOP"],
["1", "0xec", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xec is a discouraged NOP"],
["1", "0xed", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xed is a discouraged NOP"],
["1", "0xee", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xee is a discouraged NOP"],
["1", "0xef", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xef is a discouraged NOP"],
["1", "0xf0", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf0 is a discouraged NOP"],
["1", "0xf1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf1 is a discouraged NOP"],
["1", "0xf2", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf2 is a discouraged NOP"],
["1", "0xf3", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf3 is a discouraged NOP"],
["1", "0xf4", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf4 is a discouraged NOP"],
["1", "0xf5", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf5 is a discouraged NOP"],
["1", "0xf6", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf6 is a discouraged NOP"],
["1", "0xf7", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf7 is a discouraged NOP"],
["1", "0xf8", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Opcode 0xf8 is a discouraged NOP"],
["NOP10", "1", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in scriptSig"],
["1 0x01 NOP10", "HASH160 0x14 0xa880c3383e77efb97808a87ca378539e5f8904ef EQUAL", "DISCOURAGE_UPGRADABLE_NOPS", "ERR_DISCOURAGE_UPGRADABLE_NOPS", "Discouraged NOP10 in redeemScript"],
["0x50","1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0x50 is reserved"],
["0xfa", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfa is reserved"],
["0xfb", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfb is reserved"],
["0xfc", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfc is reserved"],
["0xfd", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfd is reserved"],
["0xfe", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfe is reserved"],
["0xff", "1", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xff is reserved"],
["1 1","IF 0x50 ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0x50 is reserved in executed branch"],
["1 1","IF 0xfa ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfa is reserved in executed branch"],
["1 1","IF 0xfb ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfb is reserved in executed branch"],
["1 1","IF 0xfc ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfc is reserved in executed branch"],
["1 1","IF 0xfd ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfd is reserved in executed branch"],
["1 1","IF 0xfe ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xfe is reserved in executed branch"],
["1 1","IF 0xff ELSE ENDIF", "NONE", "ERR_RESERVED_OPCODE", "Opcode 0xff is reserved in executed branch"],
["1 IF 1 ELSE", "0xff ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL", "Invalid because scriptSig and scriptPubKey are processed separately"],
["NOP", "RIPEMD160", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SHA1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SHA256", "SHA256", "ERR_INVALID_STACK_OPERATION"],
["NOP", "BLAKE256", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "HASH160", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "HASH256", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "'b'{2049}", "NONE", "ERR_PUSH_SIZE", ">2048 byte push"],
["0", "IF 'b'{2049} ENDIF 1", "NONE", "ERR_PUSH_SIZE", ">2048 byte push in non-executed IF branch"],
["1", "<NOP>{256}", "NONE", "ERR_OP_COUNT", ">255 opcodes executed"],
["0", "IF <NOP>{256} ENDIF 1", "NONE", "ERR_OP_COUNT", ">255 opcodes including non-executed IF branch"],
["1 2 3 4 5 <3DUP>{173}", "1 2 3 4 5 6 <3DUP>{165}", "NONE", "ERR_STACK_SIZE", ">1,024 stack size"],
["1 2 3 4 5 <3DUP>{172}", "1 TOALTSTACK 2 TOALTSTACK 3 4 5 6 <3DUP>{166}", "NONE", "ERR_STACK_SIZE", ">1,024 stack+altstack size"],
["NOP", "0 'a'{2048} <'b'{2048}>{6} 'b'{2024}", "NONE", "ERR_SCRIPT_SIZE", "16385-byte scriptPubKey"],
["NOP1","NOP10", "NONE", "ERR_EMPTY_STACK"],
["1","VER", "NONE", "ERR_RESERVED_OPCODE", "OP_VER is reserved"],
["1","VERIF", "NONE", "ERR_RESERVED_OPCODE", "OP_VERIF is reserved"],
["1","VERNOTIF", "NONE", "ERR_RESERVED_OPCODE", "OP_VERNOTIF is reserved"],
["1","RESERVED", "NONE", "ERR_RESERVED_OPCODE", "OP_RESERVED is reserved"],
["2147483648", "1ADD 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do math on 5-byte integers"],
["2147483648", "NEGATE 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do math on 5-byte integers"],
["-2147483648", "1ADD 1", "NONE", "ERR_OUT_OF_RANGE", "Because we use a sign bit, -2147483648 is also 5 bytes"],
["2147483647", "1ADD 1SUB 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do math on 5-byte integers, even if the result is 4-bytes"],
["2147483648", "1SUB 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do math on 5-byte integers, even if the result is 4-bytes"],
["2147483648 1", "BOOLOR 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)"],
["2147483648 1", "BOOLAND 1", "NONE", "ERR_OUT_OF_RANGE", "We cannot do BOOLAND on 5-byte integers"],
["1", "1 ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL", "ENDIF without IF"],
["1", "IF 1", "NONE", "ERR_UNBALANCED_CONDITIONAL", "IF without ENDIF"],
["1 IF 1", "ENDIF", "NONE", "ERR_UNBALANCED_CONDITIONAL", "IFs don't carry over"],
["NOP", "IF 1 ENDIF", "NONE", "ERR_INVALID_STACK_OPERATION", "The following tests check the if(stack.size() < N) tests in each opcode"],
["NOP", "NOTIF 1 ENDIF", "NONE", "ERR_INVALID_STACK_OPERATION", "They are here to catch copy-and-paste errors"],
["NOP", "VERIFY 1", "NONE", "ERR_INVALID_STACK_OPERATION", "Most of them are duplicated elsewhere,"],
["NOP", "TOALTSTACK 1", "NONE", "ERR_INVALID_STACK_OPERATION", "but, hey, more is always better, right?"],
["1", "FROMALTSTACK", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "2DROP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "2DUP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1", "3DUP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1 1", "2OVER", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1 1 1 1", "2ROT", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1 1", "2SWAP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "IFDUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "DROP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "DUP 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "NIP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "OVER", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1 1 3", "PICK", "NONE", "ERR_INVALID_STACK_OPERATION"],
["0", "PICK 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1 1 3", "ROLL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["0", "ROLL 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1", "ROT", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "SWAP", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "TUCK", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SIZE 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "EQUAL 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "EQUALVERIFY 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1ADD 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "1SUB 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "NEGATE 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "ABS 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "NOT 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "0NOTEQUAL 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "ADD", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "SUB", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "BOOLAND", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "BOOLOR", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "NUMEQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "NUMEQUALVERIFY 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "NUMNOTEQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "LESSTHAN", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "GREATERTHAN", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "LESSTHANOREQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "GREATERTHANOREQUAL", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "MIN", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1", "MAX", "NONE", "ERR_INVALID_STACK_OPERATION"],
["1 1", "WITHIN", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "RIPEMD160 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SHA1 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "SHA256 1", "SHA256", "ERR_INVALID_STACK_OPERATION"],
["0", "SHA256", "NONE", "ERR_EVAL_FALSE", "Treated as NOP since it doesn't set SHA256 script flag"],
["NOP", "BLAKE256 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "HASH160 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP", "HASH256 1", "NONE", "ERR_INVALID_STACK_OPERATION"],
["NOP 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "NONE", "ERR_SIG_PUSHONLY", "Tests for Script.IsPushOnly()"],
["NOP1 0x01 1", "HASH160 0x14 0xda1745e9b549bd0bfa1a569971c77eba30cd5a4b EQUAL", "NONE", "ERR_SIG_PUSHONLY"],
["0 0x01 0x50", "HASH160 0x14 0x77c33ee1f1892b124f2c9aaed62114c23cffe2da EQUAL", "NONE", "ERR_RESERVED_OPCODE", "OP_RESERVED in P2SH should fail"],
["0 0x01 VER", "HASH160 0x14 0xe682277f7669fe986d315d52b56df3d244da11a0 EQUAL", "NONE", "ERR_RESERVED_OPCODE", "OP_VER in P2SH should fail"],
["MINIMALDATA enforcement for PUSHDATAs"],
["0x4c 0x00", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "Empty vector minimally represented by OP_0"],
["0x01 0x81", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "-1 minimally represented by OP_1NEGATE"],
["0x01 0x01", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "1 to 16 minimally represented by OP_1 to OP_16"],
["0x01 0x02", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x03", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x04", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x05", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x06", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x07", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x08", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x09", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0a", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0b", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0c", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0d", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0e", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x0f", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x01 0x10", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x4c 0x48 0x11{72}", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "PUSHDATA1 of 72 bytes minimally represented by direct push"],
["0x4d 0xFF00 0x11{255}", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"],
["0x4e 0x00010000 0x11{256}", "DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"],
["MINIMALDATA enforcement for numeric arguments"],
["0x01 0x00", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals 0"],
["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals 0"],
["0x01 0x80", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "0x80 (negative zero) numequals 0"],
["0x02 0x0080", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals 0"],
["0x02 0x0500", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals 5"],
["0x03 0x050000", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals 5"],
["0x02 0x0580", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals -5"],
["0x03 0x050080", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "numequals -5"],
["0x03 0xff7f80", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "Minimal encoding is 0xffff"],
["0x03 0xff7f00", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "Minimal encoding is 0xff7f"],
["0x04 0xffff7f80", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "Minimal encoding is 0xffffff"],
["0x04 0xffff7f00", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA", "Minimal encoding is 0xffff7f"],
["Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule"],
["1 0x02 0x0000", "PICK DROP", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["1 0x02 0x0000", "ROLL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "1ADD DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "1SUB DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "NEGATE DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "ABS DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "NOT DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000", "0NOTEQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "ADD DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "ADD DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "SUB DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "SUB DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "BOOLAND DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "BOOLAND DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "BOOLOR DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "BOOLOR DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "NUMEQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 1", "NUMEQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "NUMEQUALVERIFY 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "NUMEQUALVERIFY 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "NUMNOTEQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "NUMNOTEQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "LESSTHAN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "LESSTHAN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "GREATERTHAN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "GREATERTHAN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "LESSTHANOREQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "LESSTHANOREQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "GREATERTHANOREQUAL DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "MIN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "MIN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "MAX DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "MAX DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0 0", "WITHIN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000 0", "WITHIN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0 0x02 0x0000", "WITHIN DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "CHECKMULTISIG DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "CHECKMULTISIG DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0 1", "CHECKMULTISIG DROP 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0 0x02 0x0000", "CHECKMULTISIGVERIFY 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["0x02 0x0000 0", "CHECKMULTISIGVERIFY 1", "MINIMALDATA", "ERR_MINIMAL_DATA"],
["The End"]
]