From d6f2b092c0e45f004dd2c5e121c414263c71bea4 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Mon, 20 Apr 2015 22:01:09 -0500 Subject: [PATCH] txscript: Define opcodes in hex and sync BC opcodes. This commit modifies the definition of the opcodes to their hex counterparts rather than decimal since it is far more common to see scripts in hex. This makes it easier when manually looking at script dumps to correlate opcodes. However, since there are also cases where it is useful to see the decimal value of the opcode, the decimal value has been left as a comment. Obviously converting the numbers is trivial, but it is handy when looking at the opcode definitions to already have it there. In addition, it syncs the opcodes with the latest Bitcoin Core internal opcodes for completeness and modifies the tests accordingly. --- txscript/opcode.go | 534 ++++++++++++++++++++-------------------- txscript/opcode_test.go | 79 +++--- 2 files changed, 315 insertions(+), 298 deletions(-) diff --git a/txscript/opcode.go b/txscript/opcode.go index 7adc1352..bfc040ca 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -31,268 +31,268 @@ type opcode struct { parsefunc func(*opcode, *Engine, []byte) error } -// These constants are the values of the official opcode used on the btc wiki, -// in bitcoind and in most if not all other references and software related to -// handling BTC scripts. +// These constants are the values of the official opcodes used on the btc wiki, +// in bitcoin core and in most if not all other references and software related +// to handling BTC scripts. const ( - OP_FALSE = 0 // AKA OP_0 - OP_0 = 0 - OP_DATA_1 = 1 - OP_DATA_2 = 2 - OP_DATA_3 = 3 - OP_DATA_4 = 4 - OP_DATA_5 = 5 - OP_DATA_6 = 6 - OP_DATA_7 = 7 - OP_DATA_8 = 8 - OP_DATA_9 = 9 - OP_DATA_10 = 10 - OP_DATA_11 = 11 - OP_DATA_12 = 12 - OP_DATA_13 = 13 - OP_DATA_14 = 14 - OP_DATA_15 = 15 - OP_DATA_16 = 16 - OP_DATA_17 = 17 - OP_DATA_18 = 18 - OP_DATA_19 = 19 - OP_DATA_20 = 20 - OP_DATA_21 = 21 - OP_DATA_22 = 22 - OP_DATA_23 = 23 - OP_DATA_24 = 24 - OP_DATA_25 = 25 - OP_DATA_26 = 26 - OP_DATA_27 = 27 - OP_DATA_28 = 28 - OP_DATA_29 = 29 - OP_DATA_30 = 30 - OP_DATA_31 = 31 - OP_DATA_32 = 32 - OP_DATA_33 = 33 - OP_DATA_34 = 34 - OP_DATA_35 = 35 - OP_DATA_36 = 36 - OP_DATA_37 = 37 - OP_DATA_38 = 38 - OP_DATA_39 = 39 - OP_DATA_40 = 40 - OP_DATA_41 = 41 - OP_DATA_42 = 42 - OP_DATA_43 = 43 - OP_DATA_44 = 44 - OP_DATA_45 = 45 - OP_DATA_46 = 46 - OP_DATA_47 = 47 - OP_DATA_48 = 48 - OP_DATA_49 = 49 - OP_DATA_50 = 50 - OP_DATA_51 = 51 - OP_DATA_52 = 52 - OP_DATA_53 = 53 - OP_DATA_54 = 54 - OP_DATA_55 = 55 - OP_DATA_56 = 56 - OP_DATA_57 = 57 - OP_DATA_58 = 58 - OP_DATA_59 = 59 - OP_DATA_60 = 60 - OP_DATA_61 = 61 - OP_DATA_62 = 62 - OP_DATA_63 = 63 - OP_DATA_64 = 64 - OP_DATA_65 = 65 - OP_DATA_66 = 66 - OP_DATA_67 = 67 - OP_DATA_68 = 68 - OP_DATA_69 = 69 - OP_DATA_70 = 70 - OP_DATA_71 = 71 - OP_DATA_72 = 72 - OP_DATA_73 = 73 - OP_DATA_74 = 74 - OP_DATA_75 = 75 - OP_PUSHDATA1 = 76 - OP_PUSHDATA2 = 77 - OP_PUSHDATA4 = 78 - OP_1NEGATE = 79 - OP_RESERVED = 80 - OP_1 = 81 // AKA OP_TRUE - OP_TRUE = 81 - OP_2 = 82 - OP_3 = 83 - OP_4 = 84 - OP_5 = 85 - OP_6 = 86 - OP_7 = 87 - OP_8 = 88 - OP_9 = 89 - OP_10 = 90 - OP_11 = 91 - OP_12 = 92 - OP_13 = 93 - OP_14 = 94 - OP_15 = 95 - OP_16 = 96 - OP_NOP = 97 - OP_VER = 98 - OP_IF = 99 - OP_NOTIF = 100 - OP_VERIF = 101 - OP_VERNOTIF = 102 - OP_ELSE = 103 - OP_ENDIF = 104 - OP_VERIFY = 105 - OP_RETURN = 106 - OP_TOALTSTACK = 107 - OP_FROMALTSTACK = 108 - OP_2DROP = 109 - OP_2DUP = 110 - OP_3DUP = 111 - OP_2OVER = 112 - OP_2ROT = 113 - OP_2SWAP = 114 - OP_IFDUP = 115 - OP_DEPTH = 116 - OP_DROP = 117 - OP_DUP = 118 - OP_NIP = 119 - OP_OVER = 120 - OP_PICK = 121 - OP_ROLL = 122 - OP_ROT = 123 - OP_SWAP = 124 - OP_TUCK = 125 - OP_CAT = 126 - OP_SUBSTR = 127 - OP_LEFT = 128 - OP_RIGHT = 129 - OP_SIZE = 130 - OP_INVERT = 131 - OP_AND = 132 - OP_OR = 133 - OP_XOR = 134 - OP_EQUAL = 135 - OP_EQUALVERIFY = 136 - OP_RESERVED1 = 137 - OP_RESERVED2 = 138 - OP_1ADD = 139 - OP_1SUB = 140 - OP_2MUL = 141 - OP_2DIV = 142 - OP_NEGATE = 143 - OP_ABS = 144 - OP_NOT = 145 - OP_0NOTEQUAL = 146 - OP_ADD = 147 - OP_SUB = 148 - OP_MUL = 149 - OP_DIV = 150 - OP_MOD = 151 - OP_LSHIFT = 152 - OP_RSHIFT = 153 - OP_BOOLAND = 154 - OP_BOOLOR = 155 - OP_NUMEQUAL = 156 - OP_NUMEQUALVERIFY = 157 - OP_NUMNOTEQUAL = 158 - OP_LESSTHAN = 159 - OP_GREATERTHAN = 160 - OP_LESSTHANOREQUAL = 161 - OP_GREATERTHANOREQUAL = 162 - OP_MIN = 163 - OP_MAX = 164 - OP_WITHIN = 165 - OP_RIPEMD160 = 166 - OP_SHA1 = 167 - OP_SHA256 = 168 - OP_HASH160 = 169 - OP_HASH256 = 170 - OP_CODESEPARATOR = 171 - OP_CHECKSIG = 172 - OP_CHECKSIGVERIFY = 173 - OP_CHECKMULTISIG = 174 - OP_CHECKMULTISIGVERIFY = 175 - OP_NOP1 = 176 - OP_NOP2 = 177 - OP_NOP3 = 178 - OP_NOP4 = 179 - OP_NOP5 = 180 - OP_NOP6 = 181 - OP_NOP7 = 182 - OP_NOP8 = 183 - OP_NOP9 = 184 - OP_NOP10 = 185 - OP_UNKNOWN186 = 186 - OP_UNKNOWN187 = 187 - OP_UNKNOWN188 = 188 - OP_UNKNOWN189 = 189 - OP_UNKNOWN190 = 190 - OP_UNKNOWN191 = 191 - OP_UNKNOWN192 = 192 - OP_UNKNOWN193 = 193 - OP_UNKNOWN194 = 194 - OP_UNKNOWN195 = 195 - OP_UNKNOWN196 = 196 - OP_UNKNOWN197 = 197 - OP_UNKNOWN198 = 198 - OP_UNKNOWN199 = 199 - OP_UNKNOWN200 = 200 - OP_UNKNOWN201 = 201 - OP_UNKNOWN202 = 202 - OP_UNKNOWN203 = 203 - OP_UNKNOWN204 = 204 - OP_UNKNOWN205 = 205 - OP_UNKNOWN206 = 206 - OP_UNKNOWN207 = 207 - OP_UNKNOWN208 = 208 - OP_UNKNOWN209 = 209 - OP_UNKNOWN210 = 210 - OP_UNKNOWN211 = 211 - OP_UNKNOWN212 = 212 - OP_UNKNOWN213 = 213 - OP_UNKNOWN214 = 214 - OP_UNKNOWN215 = 215 - OP_UNKNOWN216 = 216 - OP_UNKNOWN217 = 217 - OP_UNKNOWN218 = 218 - OP_UNKNOWN219 = 219 - OP_UNKNOWN220 = 220 - OP_UNKNOWN221 = 221 - OP_UNKNOWN222 = 222 - OP_UNKNOWN223 = 223 - OP_UNKNOWN224 = 224 - OP_UNKNOWN225 = 225 - OP_UNKNOWN226 = 226 - OP_UNKNOWN227 = 227 - OP_UNKNOWN228 = 228 - OP_UNKNOWN229 = 229 - OP_UNKNOWN230 = 230 - OP_UNKNOWN231 = 231 - OP_UNKNOWN232 = 232 - OP_UNKNOWN233 = 233 - OP_UNKNOWN234 = 234 - OP_UNKNOWN235 = 235 - OP_UNKNOWN236 = 236 - OP_UNKNOWN237 = 237 - OP_UNKNOWN238 = 238 - OP_UNKNOWN239 = 239 - OP_UNKNOWN240 = 240 - OP_UNKNOWN241 = 241 - OP_UNKNOWN242 = 242 - OP_UNKNOWN243 = 243 - OP_UNKNOWN244 = 244 - OP_UNKNOWN245 = 245 - OP_UNKNOWN246 = 246 - OP_UNKNOWN247 = 247 - OP_UNKNOWN248 = 248 - OP_UNKNOWN249 = 249 - OP_UNKNOWN250 = 250 - OP_UNKNOWN251 = 251 - OP_UNKNOWN252 = 252 - OP_PUBKEYHASH = 253 // bitcoind internal, for completeness - OP_PUBKEY = 254 // bitcoind internal, for completeness - OP_INVALIDOPCODE = 255 // bitcoind internal, for completeness + OP_0 = 0x00 // 0 + OP_FALSE = 0x00 // 0 - AKA OP_0 + OP_DATA_1 = 0x01 // 1 + OP_DATA_2 = 0x02 // 2 + OP_DATA_3 = 0x03 // 3 + OP_DATA_4 = 0x04 // 4 + OP_DATA_5 = 0x05 // 5 + OP_DATA_6 = 0x06 // 6 + OP_DATA_7 = 0x07 // 7 + OP_DATA_8 = 0x08 // 8 + OP_DATA_9 = 0x09 // 9 + OP_DATA_10 = 0x0a // 10 + OP_DATA_11 = 0x0b // 11 + OP_DATA_12 = 0x0c // 12 + OP_DATA_13 = 0x0d // 13 + OP_DATA_14 = 0x0e // 14 + OP_DATA_15 = 0x0f // 15 + OP_DATA_16 = 0x10 // 16 + OP_DATA_17 = 0x11 // 17 + OP_DATA_18 = 0x12 // 18 + OP_DATA_19 = 0x13 // 19 + OP_DATA_20 = 0x14 // 20 + OP_DATA_21 = 0x15 // 21 + OP_DATA_22 = 0x16 // 22 + OP_DATA_23 = 0x17 // 23 + OP_DATA_24 = 0x18 // 24 + OP_DATA_25 = 0x19 // 25 + OP_DATA_26 = 0x1a // 26 + OP_DATA_27 = 0x1b // 27 + OP_DATA_28 = 0x1c // 28 + OP_DATA_29 = 0x1d // 29 + OP_DATA_30 = 0x1e // 30 + OP_DATA_31 = 0x1f // 31 + OP_DATA_32 = 0x20 // 32 + OP_DATA_33 = 0x21 // 33 + OP_DATA_34 = 0x22 // 34 + OP_DATA_35 = 0x23 // 35 + OP_DATA_36 = 0x24 // 36 + OP_DATA_37 = 0x25 // 37 + OP_DATA_38 = 0x26 // 38 + OP_DATA_39 = 0x27 // 39 + OP_DATA_40 = 0x28 // 40 + OP_DATA_41 = 0x29 // 41 + OP_DATA_42 = 0x2a // 42 + OP_DATA_43 = 0x2b // 43 + OP_DATA_44 = 0x2c // 44 + OP_DATA_45 = 0x2d // 45 + OP_DATA_46 = 0x2e // 46 + OP_DATA_47 = 0x2f // 47 + OP_DATA_48 = 0x30 // 48 + OP_DATA_49 = 0x31 // 49 + OP_DATA_50 = 0x32 // 50 + OP_DATA_51 = 0x33 // 51 + OP_DATA_52 = 0x34 // 52 + OP_DATA_53 = 0x35 // 53 + OP_DATA_54 = 0x36 // 54 + OP_DATA_55 = 0x37 // 55 + OP_DATA_56 = 0x38 // 56 + OP_DATA_57 = 0x39 // 57 + OP_DATA_58 = 0x3a // 58 + OP_DATA_59 = 0x3b // 59 + OP_DATA_60 = 0x3c // 60 + OP_DATA_61 = 0x3d // 61 + OP_DATA_62 = 0x3e // 62 + OP_DATA_63 = 0x3f // 63 + OP_DATA_64 = 0x40 // 64 + OP_DATA_65 = 0x41 // 65 + OP_DATA_66 = 0x42 // 66 + OP_DATA_67 = 0x43 // 67 + OP_DATA_68 = 0x44 // 68 + OP_DATA_69 = 0x45 // 69 + OP_DATA_70 = 0x46 // 70 + OP_DATA_71 = 0x47 // 71 + OP_DATA_72 = 0x48 // 72 + OP_DATA_73 = 0x49 // 73 + OP_DATA_74 = 0x4a // 74 + OP_DATA_75 = 0x4b // 75 + OP_PUSHDATA1 = 0x4c // 76 + OP_PUSHDATA2 = 0x4d // 77 + OP_PUSHDATA4 = 0x4e // 78 + OP_1NEGATE = 0x4f // 79 + OP_RESERVED = 0x50 // 80 + OP_1 = 0x51 // 81 - AKA OP_TRUE + OP_TRUE = 0x51 // 81 + OP_2 = 0x52 // 82 + OP_3 = 0x53 // 83 + OP_4 = 0x54 // 84 + OP_5 = 0x55 // 85 + OP_6 = 0x56 // 86 + OP_7 = 0x57 // 87 + OP_8 = 0x58 // 88 + OP_9 = 0x59 // 89 + OP_10 = 0x5a // 90 + OP_11 = 0x5b // 91 + OP_12 = 0x5c // 92 + OP_13 = 0x5d // 93 + OP_14 = 0x5e // 94 + OP_15 = 0x5f // 95 + OP_16 = 0x60 // 96 + OP_NOP = 0x61 // 97 + OP_VER = 0x62 // 98 + OP_IF = 0x63 // 99 + OP_NOTIF = 0x64 // 100 + OP_VERIF = 0x65 // 101 + OP_VERNOTIF = 0x66 // 102 + OP_ELSE = 0x67 // 103 + OP_ENDIF = 0x68 // 104 + OP_VERIFY = 0x69 // 105 + OP_RETURN = 0x6a // 106 + OP_TOALTSTACK = 0x6b // 107 + OP_FROMALTSTACK = 0x6c // 108 + OP_2DROP = 0x6d // 109 + OP_2DUP = 0x6e // 110 + OP_3DUP = 0x6f // 111 + OP_2OVER = 0x70 // 112 + OP_2ROT = 0x71 // 113 + OP_2SWAP = 0x72 // 114 + OP_IFDUP = 0x73 // 115 + OP_DEPTH = 0x74 // 116 + OP_DROP = 0x75 // 117 + OP_DUP = 0x76 // 118 + OP_NIP = 0x77 // 119 + OP_OVER = 0x78 // 120 + OP_PICK = 0x79 // 121 + OP_ROLL = 0x7a // 122 + OP_ROT = 0x7b // 123 + OP_SWAP = 0x7c // 124 + OP_TUCK = 0x7d // 125 + OP_CAT = 0x7e // 126 + OP_SUBSTR = 0x7f // 127 + OP_LEFT = 0x80 // 128 + OP_RIGHT = 0x81 // 129 + OP_SIZE = 0x82 // 130 + OP_INVERT = 0x83 // 131 + OP_AND = 0x84 // 132 + OP_OR = 0x85 // 133 + OP_XOR = 0x86 // 134 + OP_EQUAL = 0x87 // 135 + OP_EQUALVERIFY = 0x88 // 136 + OP_RESERVED1 = 0x89 // 137 + OP_RESERVED2 = 0x8a // 138 + OP_1ADD = 0x8b // 139 + OP_1SUB = 0x8c // 140 + OP_2MUL = 0x8d // 141 + OP_2DIV = 0x8e // 142 + OP_NEGATE = 0x8f // 143 + OP_ABS = 0x90 // 144 + OP_NOT = 0x91 // 145 + OP_0NOTEQUAL = 0x92 // 146 + OP_ADD = 0x93 // 147 + OP_SUB = 0x94 // 148 + OP_MUL = 0x95 // 149 + OP_DIV = 0x96 // 150 + OP_MOD = 0x97 // 151 + OP_LSHIFT = 0x98 // 152 + OP_RSHIFT = 0x99 // 153 + OP_BOOLAND = 0x9a // 154 + OP_BOOLOR = 0x9b // 155 + OP_NUMEQUAL = 0x9c // 156 + OP_NUMEQUALVERIFY = 0x9d // 157 + OP_NUMNOTEQUAL = 0x9e // 158 + OP_LESSTHAN = 0x9f // 159 + OP_GREATERTHAN = 0xa0 // 160 + OP_LESSTHANOREQUAL = 0xa1 // 161 + OP_GREATERTHANOREQUAL = 0xa2 // 162 + OP_MIN = 0xa3 // 163 + OP_MAX = 0xa4 // 164 + OP_WITHIN = 0xa5 // 165 + OP_RIPEMD160 = 0xa6 // 166 + OP_SHA1 = 0xa7 // 167 + OP_SHA256 = 0xa8 // 168 + OP_HASH160 = 0xa9 // 169 + OP_HASH256 = 0xaa // 170 + OP_CODESEPARATOR = 0xab // 171 + OP_CHECKSIG = 0xac // 172 + OP_CHECKSIGVERIFY = 0xad // 173 + OP_CHECKMULTISIG = 0xae // 174 + OP_CHECKMULTISIGVERIFY = 0xaf // 175 + OP_NOP1 = 0xb0 // 176 + OP_NOP2 = 0xb1 // 177 + OP_NOP3 = 0xb2 // 178 + OP_NOP4 = 0xb3 // 179 + OP_NOP5 = 0xb4 // 180 + OP_NOP6 = 0xb5 // 181 + OP_NOP7 = 0xb6 // 182 + OP_NOP8 = 0xb7 // 183 + OP_NOP9 = 0xb8 // 184 + OP_NOP10 = 0xb9 // 185 + OP_UNKNOWN186 = 0xba // 186 + OP_UNKNOWN187 = 0xbb // 187 + OP_UNKNOWN188 = 0xbc // 188 + OP_UNKNOWN189 = 0xbd // 189 + OP_UNKNOWN190 = 0xbe // 190 + OP_UNKNOWN191 = 0xbf // 191 + OP_UNKNOWN192 = 0xc0 // 192 + OP_UNKNOWN193 = 0xc1 // 193 + OP_UNKNOWN194 = 0xc2 // 194 + OP_UNKNOWN195 = 0xc3 // 195 + OP_UNKNOWN196 = 0xc4 // 196 + OP_UNKNOWN197 = 0xc5 // 197 + OP_UNKNOWN198 = 0xc6 // 198 + OP_UNKNOWN199 = 0xc7 // 199 + OP_UNKNOWN200 = 0xc8 // 200 + OP_UNKNOWN201 = 0xc9 // 201 + OP_UNKNOWN202 = 0xca // 202 + OP_UNKNOWN203 = 0xcb // 203 + OP_UNKNOWN204 = 0xcc // 204 + OP_UNKNOWN205 = 0xcd // 205 + OP_UNKNOWN206 = 0xce // 206 + OP_UNKNOWN207 = 0xcf // 207 + OP_UNKNOWN208 = 0xd0 // 208 + OP_UNKNOWN209 = 0xd1 // 209 + OP_UNKNOWN210 = 0xd2 // 210 + OP_UNKNOWN211 = 0xd3 // 211 + OP_UNKNOWN212 = 0xd4 // 212 + OP_UNKNOWN213 = 0xd5 // 213 + OP_UNKNOWN214 = 0xd6 // 214 + OP_UNKNOWN215 = 0xd7 // 215 + OP_UNKNOWN216 = 0xd8 // 216 + OP_UNKNOWN217 = 0xd9 // 217 + OP_UNKNOWN218 = 0xda // 218 + OP_UNKNOWN219 = 0xdb // 219 + OP_UNKNOWN220 = 0xdc // 220 + OP_UNKNOWN221 = 0xdd // 221 + OP_UNKNOWN222 = 0xde // 222 + OP_UNKNOWN223 = 0xdf // 223 + OP_UNKNOWN224 = 0xe0 // 224 + OP_UNKNOWN225 = 0xe1 // 225 + OP_UNKNOWN226 = 0xe2 // 226 + OP_UNKNOWN227 = 0xe3 // 227 + OP_UNKNOWN228 = 0xe4 // 228 + OP_UNKNOWN229 = 0xe5 // 229 + OP_UNKNOWN230 = 0xe6 // 230 + OP_UNKNOWN231 = 0xe7 // 231 + OP_UNKNOWN232 = 0xe8 // 232 + OP_UNKNOWN233 = 0xe9 // 233 + OP_UNKNOWN234 = 0xea // 234 + OP_UNKNOWN235 = 0xeb // 235 + OP_UNKNOWN236 = 0xec // 236 + OP_UNKNOWN237 = 0xed // 237 + OP_UNKNOWN238 = 0xee // 238 + OP_UNKNOWN239 = 0xef // 239 + OP_UNKNOWN240 = 0xf0 // 240 + OP_UNKNOWN241 = 0xf1 // 241 + OP_UNKNOWN242 = 0xf2 // 242 + OP_UNKNOWN243 = 0xf3 // 243 + OP_UNKNOWN244 = 0xf4 // 244 + OP_UNKNOWN245 = 0xf5 // 245 + OP_UNKNOWN246 = 0xf6 // 246 + OP_UNKNOWN247 = 0xf7 // 247 + OP_UNKNOWN248 = 0xf8 // 248 + OP_SMALLDATA = 0xf9 // 249 - bitcoin core internal + OP_SMALLINTEGER = 0xfa // 250 - bitcoin core internal + OP_PUBKEYS = 0xfb // 251 - bitcoin core internal + OP_UNKNOWN252 = 0xfc // 252 + OP_PUBKEYHASH = 0xfd // 253 - bitcoin core internal + OP_PUBKEY = 0xfe // 254 - bitcoin core internal + OP_INVALIDOPCODE = 0xff // 255 - bitcoin core internal ) // conditional execution constants @@ -815,11 +815,11 @@ var opcodemapPreinit = map[byte]*opcode{ opfunc: opcodeInvalid}, OP_UNKNOWN248: {value: OP_UNKNOWN248, name: "OP_UNKNOWN248", length: 1, opfunc: opcodeInvalid}, - OP_UNKNOWN249: {value: OP_UNKNOWN249, name: "OP_UNKNOWN249", length: 1, + OP_SMALLDATA: {value: OP_SMALLDATA, name: "OP_SMALLDATA", length: 1, opfunc: opcodeInvalid}, - OP_UNKNOWN250: {value: OP_UNKNOWN250, name: "OP_UNKNOWN250", length: 1, - opfunc: opcodeInvalid}, - OP_UNKNOWN251: {value: OP_UNKNOWN251, name: "OP_UNKNOWN251", length: 1, + OP_SMALLINTEGER: {value: OP_SMALLINTEGER, name: "OP_SMALLINTEGER", + length: 1, opfunc: opcodeInvalid}, + OP_PUBKEYS: {value: OP_PUBKEYS, name: "OP_PUBKEYS", length: 1, opfunc: opcodeInvalid}, OP_UNKNOWN252: {value: OP_UNKNOWN252, name: "OP_UNKNOWN252", length: 1, opfunc: opcodeInvalid}, @@ -827,8 +827,8 @@ var opcodemapPreinit = map[byte]*opcode{ opfunc: opcodeInvalid}, OP_PUBKEY: {value: OP_PUBKEY, name: "OP_PUBKEY", length: 1, opfunc: opcodeInvalid}, - OP_INVALIDOPCODE: {value: OP_INVALIDOPCODE, name: "OP_INVALIDOPCODE", length: 1, - opfunc: opcodeInvalid}, + OP_INVALIDOPCODE: {value: OP_INVALIDOPCODE, name: "OP_INVALIDOPCODE", + length: 1, opfunc: opcodeInvalid}, } // opcodeOnelineRepls defines opcode names which are replaced when doing a diff --git a/txscript/opcode_test.go b/txscript/opcode_test.go index 2efb225e..b5da7957 100644 --- a/txscript/opcode_test.go +++ b/txscript/opcode_test.go @@ -3798,22 +3798,22 @@ var detailedTests = []detailedTest{ disassembly: "OP_UNKNOWN248", }, { - name: "invalid opcode 249", - script: []byte{txscript.OP_UNKNOWN249}, + name: "invalid opcode OP_SMALLDATA", + script: []byte{txscript.OP_SMALLDATA}, expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_UNKNOWN249", + disassembly: "OP_SMALLDATA", }, { - name: "invalid opcode 250", - script: []byte{txscript.OP_UNKNOWN250}, + name: "invalid opcode OP_SMALLINTEGER", + script: []byte{txscript.OP_SMALLINTEGER}, expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_UNKNOWN250", + disassembly: "OP_SMALLINTEGER", }, { - name: "invalid opcode 251", - script: []byte{txscript.OP_UNKNOWN251}, + name: "invalid opcode OP_PUBKEYS", + script: []byte{txscript.OP_PUBKEYS}, expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_UNKNOWN251", + disassembly: "OP_PUBKEYS", }, { name: "invalid opcode 252", @@ -3821,6 +3821,24 @@ var detailedTests = []detailedTest{ expectedReturn: txscript.ErrStackInvalidOpcode, disassembly: "OP_UNKNOWN252", }, + { + name: "invalid opcode OP_PUBKEYHASH", + script: []byte{txscript.OP_PUBKEYHASH}, + expectedReturn: txscript.ErrStackInvalidOpcode, + disassembly: "OP_PUBKEYHASH", + }, + { + name: "invalid opcode OP_PUBKEY", + script: []byte{txscript.OP_PUBKEY}, + expectedReturn: txscript.ErrStackInvalidOpcode, + disassembly: "OP_PUBKEY", + }, + { + name: "invalid opcode OP_INVALIDOPCODE", + script: []byte{txscript.OP_INVALIDOPCODE}, + expectedReturn: txscript.ErrStackInvalidOpcode, + disassembly: "OP_INVALIDOPCODE", + }, { name: "invalid opcode 186 if noexec", @@ -4201,22 +4219,22 @@ var detailedTests = []detailedTest{ disassembly: "0 OP_IF OP_UNKNOWN248 OP_ELSE 1 OP_ENDIF", }, { - name: "invalid opcode 249 if noexec", - script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_UNKNOWN249, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + name: "invalid opcode OP_SMALLDATA if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_SMALLDATA, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, after: [][]byte{{0x01}}, - disassembly: "0 OP_IF OP_UNKNOWN249 OP_ELSE 1 OP_ENDIF", + disassembly: "0 OP_IF OP_SMALLDATA OP_ELSE 1 OP_ENDIF", }, { - name: "invalid opcode 250 if noexec", - script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_UNKNOWN250, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + name: "invalid opcode OP_SMALLINTEGER if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_SMALLINTEGER, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, after: [][]byte{{0x01}}, - disassembly: "0 OP_IF OP_UNKNOWN250 OP_ELSE 1 OP_ENDIF", + disassembly: "0 OP_IF OP_SMALLINTEGER OP_ELSE 1 OP_ENDIF", }, { - name: "invalid opcode 251 if noexec", - script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_UNKNOWN251, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + name: "invalid opcode OP_PUBKEYS if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_PUBKEYS, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, after: [][]byte{{0x01}}, - disassembly: "0 OP_IF OP_UNKNOWN251 OP_ELSE 1 OP_ENDIF", + disassembly: "0 OP_IF OP_PUBKEYS OP_ELSE 1 OP_ENDIF", }, { name: "invalid opcode 252 if noexec", @@ -4224,24 +4242,23 @@ var detailedTests = []detailedTest{ after: [][]byte{{0x01}}, disassembly: "0 OP_IF OP_UNKNOWN252 OP_ELSE 1 OP_ENDIF", }, - { - name: "invalid opcode OP_PUBKEY", - script: []byte{txscript.OP_PUBKEY}, - expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_PUBKEY", + name: "invalid opcode OP_PUBKEYHASH if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_PUBKEYHASH, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + after: [][]byte{{0x01}}, + disassembly: "0 OP_IF OP_PUBKEYHASH OP_ELSE 1 OP_ENDIF", }, { - name: "invalid opcode OP_PUBKEYHASH", - script: []byte{txscript.OP_PUBKEYHASH}, - expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_PUBKEYHASH", + name: "invalid opcode OP_PUBKEY if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_PUBKEY, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + after: [][]byte{{0x01}}, + disassembly: "0 OP_IF OP_PUBKEY OP_ELSE 1 OP_ENDIF", }, { - name: "invalid opcode OP_INVALIDOPCODE", - script: []byte{txscript.OP_INVALIDOPCODE}, - expectedReturn: txscript.ErrStackInvalidOpcode, - disassembly: "OP_INVALIDOPCODE", + name: "invalid opcode OP_INVALIDOPCODE if noexec", + script: []byte{txscript.OP_FALSE, txscript.OP_IF, txscript.OP_INVALIDOPCODE, txscript.OP_ELSE, txscript.OP_TRUE, txscript.OP_ENDIF}, + after: [][]byte{{0x01}}, + disassembly: "0 OP_IF OP_INVALIDOPCODE OP_ELSE 1 OP_ENDIF", }, }