diff --git a/src/test/data/script_tests.json b/src/test/data/script_tests.json --- a/src/test/data/script_tests.json +++ b/src/test/data/script_tests.json @@ -582,47 +582,86 @@ ["Unevaluated non-minimal pushes are ignored"], ["0 IF PUSHDATA1 0x00 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA1 ignored"], +["", "0 IF PUSHDATA1 0x00 ENDIF 1", "MINIMALDATA", "OK", "non-minimal PUSHDATA1 ignored (scriptPubKey)"], ["0 IF PUSHDATA2 0x0000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA2 ignored"], +["", "0 IF PUSHDATA2 0x0000 ENDIF 1", "MINIMALDATA", "OK", "non-minimal PUSHDATA2 ignored (scriptPubKey)"], ["0 IF PUSHDATA4 0x00000000 ENDIF 1", "", "MINIMALDATA", "OK", "non-minimal PUSHDATA4 ignored"], +["", "0 IF PUSHDATA4 0x00000000 ENDIF 1", "MINIMALDATA", "OK", "non-minimal PUSHDATA4 ignored (scriptPubKey)"], ["0 IF 0x01 0x81 ENDIF 1", "", "MINIMALDATA", "OK", "1NEGATE equiv"], +["", "0 IF 0x01 0x81 ENDIF 1", "MINIMALDATA", "OK", "1NEGATE equiv (scriptPubKey)"], ["0 IF 0x01 0x01 ENDIF 1", "", "MINIMALDATA", "OK", "OP_1 equiv"], +["", "0 IF 0x01 0x01 ENDIF 1", "MINIMALDATA", "OK", "OP_1 equiv (scriptPubKey)"], ["0 IF 0x01 0x02 ENDIF 1", "", "MINIMALDATA", "OK", "OP_2 equiv"], +["", "0 IF 0x01 0x02 ENDIF 1", "MINIMALDATA", "OK", "OP_2 equiv (scriptPubKey)"], ["0 IF 0x01 0x03 ENDIF 1", "", "MINIMALDATA", "OK", "OP_3 equiv"], +["", "0 IF 0x01 0x03 ENDIF 1", "MINIMALDATA", "OK", "OP_3 equiv (scriptPubKey)"], ["0 IF 0x01 0x04 ENDIF 1", "", "MINIMALDATA", "OK", "OP_4 equiv"], +["", "0 IF 0x01 0x04 ENDIF 1", "MINIMALDATA", "OK", "OP_4 equiv (scriptPubKey)"], ["0 IF 0x01 0x05 ENDIF 1", "", "MINIMALDATA", "OK", "OP_5 equiv"], +["", "0 IF 0x01 0x05 ENDIF 1", "MINIMALDATA", "OK", "OP_5 equiv (scriptPubKey)"], ["0 IF 0x01 0x06 ENDIF 1", "", "MINIMALDATA", "OK", "OP_6 equiv"], +["", "0 IF 0x01 0x06 ENDIF 1", "MINIMALDATA", "OK", "OP_6 equiv (scriptPubKey)"], ["0 IF 0x01 0x07 ENDIF 1", "", "MINIMALDATA", "OK", "OP_7 equiv"], +["", "0 IF 0x01 0x07 ENDIF 1", "MINIMALDATA", "OK", "OP_7 equiv (scriptPubKey)"], ["0 IF 0x01 0x08 ENDIF 1", "", "MINIMALDATA", "OK", "OP_8 equiv"], +["", "0 IF 0x01 0x08 ENDIF 1", "MINIMALDATA", "OK", "OP_8 equiv (scriptPubKey)"], ["0 IF 0x01 0x09 ENDIF 1", "", "MINIMALDATA", "OK", "OP_9 equiv"], +["", "0 IF 0x01 0x09 ENDIF 1", "MINIMALDATA", "OK", "OP_9 equiv (scriptPubKey)"], ["0 IF 0x01 0x0a ENDIF 1", "", "MINIMALDATA", "OK", "OP_10 equiv"], +["", "0 IF 0x01 0x0a ENDIF 1", "MINIMALDATA", "OK", "OP_10 equiv (scriptPubKey)"], ["0 IF 0x01 0x0b ENDIF 1", "", "MINIMALDATA", "OK", "OP_11 equiv"], +["", "0 IF 0x01 0x0b ENDIF 1", "MINIMALDATA", "OK", "OP_11 equiv (scriptPubKey)"], ["0 IF 0x01 0x0c ENDIF 1", "", "MINIMALDATA", "OK", "OP_12 equiv"], +["", "0 IF 0x01 0x0c ENDIF 1", "MINIMALDATA", "OK", "OP_12 equiv (scriptPubKey)"], ["0 IF 0x01 0x0d ENDIF 1", "", "MINIMALDATA", "OK", "OP_13 equiv"], +["", "0 IF 0x01 0x0d ENDIF 1", "MINIMALDATA", "OK", "OP_13 equiv (scriptPubKey)"], ["0 IF 0x01 0x0e ENDIF 1", "", "MINIMALDATA", "OK", "OP_14 equiv"], +["", "0 IF 0x01 0x0e ENDIF 1", "MINIMALDATA", "OK", "OP_14 equiv (scriptPubKey)"], ["0 IF 0x01 0x0f ENDIF 1", "", "MINIMALDATA", "OK", "OP_15 equiv"], +["", "0 IF 0x01 0x0f ENDIF 1", "MINIMALDATA", "OK", "OP_15 equiv (scriptPubKey)"], ["0 IF 0x01 0x10 ENDIF 1", "", "MINIMALDATA", "OK", "OP_16 equiv"], +["", "0 IF 0x01 0x10 ENDIF 1", "MINIMALDATA", "OK", "OP_16 equiv (scriptPubKey)"], ["Numeric minimaldata rules are only applied when a stack item is numerically evaluated; the push itself is allowed"], ["0x01 0x00", "1", "MINIMALDATA", "OK"], +["", "0x01 0x00 1", "MINIMALDATA", "OK"], ["0x01 0x80", "1", "MINIMALDATA", "OK"], +["", "0x01 0x80 1", "MINIMALDATA", "OK"], ["0x02 0x0180", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0180 1", "MINIMALDATA", "OK"], ["0x02 0x0100", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0100 1", "MINIMALDATA", "OK"], ["0x02 0x0200", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0200 1", "MINIMALDATA", "OK"], ["0x02 0x0300", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0300 1", "MINIMALDATA", "OK"], ["0x02 0x0400", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0400 1", "MINIMALDATA", "OK"], ["0x02 0x0500", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0500 1", "MINIMALDATA", "OK"], ["0x02 0x0600", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0600 1", "MINIMALDATA", "OK"], ["0x02 0x0700", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0700 1", "MINIMALDATA", "OK"], ["0x02 0x0800", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0800 1", "MINIMALDATA", "OK"], ["0x02 0x0900", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0900 1", "MINIMALDATA", "OK"], ["0x02 0x0a00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0a00 1", "MINIMALDATA", "OK"], ["0x02 0x0b00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0b00 1", "MINIMALDATA", "OK"], ["0x02 0x0c00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0c00 1", "MINIMALDATA", "OK"], ["0x02 0x0d00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0d00 1", "MINIMALDATA", "OK"], ["0x02 0x0e00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0e00 1", "MINIMALDATA", "OK"], ["0x02 0x0f00", "1", "MINIMALDATA", "OK"], +["", "0x02 0x0f00 1", "MINIMALDATA", "OK"], ["0x02 0x1000", "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"], @@ -1448,35 +1487,70 @@ ["MINIMALDATA enforcement for PUSHDATAs"], ["PUSHDATA1 0x00", "DROP 1", "MINIMALDATA", "MINIMALDATA", "Empty vector minimally represented by OP_0"], +["", "PUSHDATA1 0x00 DROP 1", "MINIMALDATA", "MINIMALDATA", "Empty vector minimally represented by OP_0 (scriptPubKey)"], ["0x01 0x81", "DROP 1", "MINIMALDATA", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE"], +["", "0x01 0x81 DROP 1", "MINIMALDATA", "MINIMALDATA", "-1 minimally represented by OP_1NEGATE (scriptPubKey)"], ["0x01 0x01", "DROP 1", "MINIMALDATA", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16"], +["", "0x01 0x01 DROP 1", "MINIMALDATA", "MINIMALDATA", "1 to 16 minimally represented by OP_1 to OP_16 (scriptPubKey)"], ["0x01 0x02", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x02 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x03", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x03 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x04", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x04 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x05", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x05 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x06", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x06 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x07", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x07 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x08", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x08 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x09", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x09 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0a", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0a DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0b", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0b DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0c", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0c DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0d", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0d DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0e", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0e DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x0f", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x0f DROP 1", "MINIMALDATA", "MINIMALDATA"], ["0x01 0x10", "DROP 1", "MINIMALDATA", "MINIMALDATA"], +["", "0x01 0x10 DROP 1", "MINIMALDATA", "MINIMALDATA"], ["PUSHDATA1 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", "MINIMALDATA", "PUSHDATA1 of 72 bytes minimally represented by direct push"], +["", "PUSHDATA1 0x48 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 DROP 1", "MINIMALDATA", + "MINIMALDATA", + "PUSHDATA1 of 72 bytes minimally represented by direct push (scriptPubKey)"], ["PUSHDATA2 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", "MINIMALDATA", "PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1"], +["", "PUSHDATA2 0xFF00 0x111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 DROP 1", "MINIMALDATA", + "MINIMALDATA", + "PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1 (scriptPubKey)"], ["PUSHDATA4 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", "DROP 1", "MINIMALDATA", "MINIMALDATA", "PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2"], +["", "PUSHDATA4 0x00010000 0x11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 DROP 1", "MINIMALDATA", + "MINIMALDATA", + "PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2 (scriptPubKey)"], + +["MINIMALDATA push rule enforcement with P2SH"], +["0x01 0x4f", "HASH160 0x14 0xc692a0d72bb4690b00f2728775fb8e45eeb190ad OP_EQUAL", "P2SH,MINIMALDATA", "OK", "minimal push inside P2SH redeemScript"], +["PUSHDATA1 0x01 0x4f", "HASH160 0x14 0xc692a0d72bb4690b00f2728775fb8e45eeb190ad OP_EQUAL", "P2SH,MINIMALDATA", "MINIMALDATA", "P2SH redeemScript itself was not pushed minimally"], +["1 0x01 0x81", "HASH160 0x14 0x19e672940307de32037c538ad37578ab38f2b83e OP_EQUAL", "P2SH,MINIMALDATA", "MINIMALDATA", "P2SH redeemscript 'OP_BIN2NUM' pushed naively"], +["1 -1", "HASH160 0x14 0x19e672940307de32037c538ad37578ab38f2b83e OP_EQUAL", "P2SH,MINIMALDATA", "OK", "P2SH redeemscript 'OP_BIN2NUM' pushed minimally"], +["0x02 0x0181", "HASH160 0x14 0x823ceb939791c0227262f8c2e5d29f072a590609 OP_EQUAL", "P2SH,MINIMALDATA", "MINIMALDATA", "non-minimal push inside P2SH redeemScript"], +["0x02 0x0181", "HASH160 0x14 0x823ceb939791c0227262f8c2e5d29f072a590609 OP_EQUAL", "MINIMALDATA", "OK", "non-minimal push inside P2SH redeemScript but P2SH not active"], ["MINIMALDATA enforcement for numeric arguments"],