User talk:Smtp
opcodes
opcode overview
For each opcode is given its nemonic, its hexadecimal bytevalue, the number of stack items needed (poped) during execution, the number of stack items pushed (after execution). Different colors indicate different semantic execution groups.
_FALSE 0x00 0 ; 1(0) |
- 0x01 0 ; 1(1) |
- 0x02 0 ; 1(2) |
- 0x03 0 ; 1(3) |
- 0x04 0 ; 1(4) |
- 0x04 0 ; 1(5) |
- 0x06 0 ; 1(6) |
- 0x07 0 ; 1(7) |
- 0x08 0 ; 1(8) |
- 0x09 0 ; 1(9) |
- 0x0a 0 ; 1(10) |
- 0x0b 0 ; 1(11) |
- 0x0c 0 ; 1(12) |
- 0x0d 0 ; 1(13) |
- 0x0e 0 ; 1(14) |
- 0x0f 0 ; 1(15) |
- 0x10 0 ; 1(16) |
- 0x11 0 ; 1(17) |
- 0x12 0 ; 1(18) |
- 0x13 0 ; 1(19) |
- 0x14 0 ; 1(20) |
- 0x15 0 ; 1(21) |
- 0x16 0 ; 1(22) |
- 0x17 0 ; 1(23) |
- 0x18 0 ; 1(24) |
- 0x19 0 ; 1(25) |
- 0x1a 0 ; 1(26) |
- 0x1b 0 ; 1(27) |
- 0x1c 0 ; 1(28) |
- 0x1d 0 ; 1(29) |
- 0x1e 0 ; 1(30) |
- 0x1f 0 ; 1(31) |
- 0x20 0 ; 1(32) |
- 0x21 0 ; 1(33) |
- 0x22 0 ; 1(34) |
- 0x23 0 ; 1(35) |
- 0x24 0 ; 1(36) |
- 0x25 0 ; 1(37) |
- 0x26 0 ; 1(38) |
- 0x27 0 ; 1(39) |
- 0x28 0 ; 1(40) |
- 0x29 0 ; 1(41) |
- 0x2a 0 ; 1(42) |
- 0x2b 0 ; 1(43) |
- 0x2c 0 ; 1(44) |
- 0x2d 0 ; 1(45) |
- 0x2e 0 ; 1(46) |
- 0x2f 0 ; 1(47) |
- 0x30 0 ; 1(48) |
- 0x31 0 ; 1(49) |
- 0x32 0 ; 1(50) |
- 0x33 0 ; 1(51) |
- 0x34 0 ; 1(52) |
- 0x35 0 ; 1(53) |
- 0x36 0 ; 1(54) |
- 0x37 0 ; 1(55) |
- 0x38 0 ; 1(56) |
- 0x39 0 ; 1(57) |
- 0x3a 0 ; 1(58) |
- 0x3b 0 ; 1(59) |
- 0x3c 0 ; 1(60) |
- 0x3d 0 ; 1(61) |
- 0x3e 0 ; 1(62) |
- 0x3f 0 ; 1(63) |
- 0x40 0 ; 1(64) |
- 0x41 0 ; 1(65) |
- 0x42 0 ; 1(66) |
- 0x43 0 ; 1(67) |
- 0x44 0 ; 1(68) |
- 0x45 0 ; 1(69) |
- 0x46 0 ; 1(70) |
- 0x47 0 ; 1(71) |
- 0x48 0 ; 1(72) |
- 0x49 0 ; 1(73) |
- 0x4a 0 ; 1(74) |
- 0x4b 0 ; 1(75) |
_PUSHDATA1 0x4c 0 ; 1(0 - 255) |
_PUSHDATA2 0x4d 0 ; 1(0 - 2^16-1) |
_PUSHDATA4 0x4e 0 ; 1(0 - 2^32-1) |
_1NEGATE 0x4f 0 ; 1(1) |
_RESERVED 0x50 |
_1 0x51 0 ; 1(1) |
_2 0x52 0 ; 1(1) |
_3 0x53 0 ; 1(1) |
_4 0x54 0 ; 1(1) |
_5 0x55 0 ; 1(1) |
_6 0x56 0 ; 1(1) |
_7 0x57 0 ; 1(1) |
_8 0x58 0 ; 1(1) |
_9 0x59 0 ; 1(1) |
_10 0x5a 0 ; 1(1) |
_11 0x5b 0 ; 1(1) |
_12 0x5c 0 ; 1(1) |
_13 0x5d 0 ; 1(1) |
_14 0x5e 0 ; 1(1) |
_15 0x5f 0 ; 1(1) |
_16 0x60 0 ; 1(1) |
_NOP 0x61 0 ; 0 |
_VER 0x62 |
_IF 0x63 1 ; 0 |
_NOTIF 0x64 1 ; 0 |
_VERIF 0x65 |
_VERNOTIF 0x66 |
_ELSE 0x67 0 ; 0 |
_ENDIF 0x68 0 ; 0 |
_VERIFY 0x69 1 ; 0/1 |
_RETURN 0x6a 0 ; 0 |
_TOALTSTACK 0x6b 1 ; 0 |
_FROMALTSTACK 0x6c 0 ; 1 |
_2DROP 0x6d 2 ; 0 |
_2DUP 0x6e 2 ; 4 |
_3DUP 0x6f 3 ; 6 |
_2OVER 0x70 4 ; 6 |
_2ROT 0x71 6 ; 6 |
_2SWAP 0x72 4 ; 4 |
_IFDUP 0x73 1 ; 1/2 |
_DEPTH 0x74 0 ; 1 |
_DROP 0x75 1 ; 0 |
_DUP 0x76 1 ; 2 |
_NIP 0x77 2 ; 1 |
_OVER 0x78 2 ; 3 |
_PICK 0x79 1+n+1 ; n+2 |
_ROLL 0x7a 1+n+1 ; n+1 |
_ROT 0x7b 3 ; 3 |
_SWAP 0x7c 2 ; 2 |
_TUCK 0x7d 2 ; 3 |
_CAT 0x7e 2 ; 1 |
_SUBSTR 0x7f 3 ; 1 |
_LEFT 0x80 2 ; 1 |
_RIGHT 0x81 2 ; 1 |
_SIZE 0x82 1 ; 2 |
_INVERT 0x83 1 ; 1 |
_AND 0x84 2 ; 1 |
_OR 0x85 2 ; 1 |
_XOR 0x86 2 ; 1 |
_EQUAL 0x87 2 ; 1 |
_EQUALVERIFY 0x88 2 ; 0/1 |
_RESERVED1 0x89 |
_RESERVED2 0x8a |
_1ADD 0x8b 1 ; 1 |
_1SUB 0x8c 1 ; 1 |
_2MUL 0x8d 1 ; 1 |
_2DIV 0x8e 1 ; 1 |
_NEGATE 0x8f 1 ; 1 |
_ABS 0x90 1 ; 1 |
_NOT 0x91 1 ; 1 |
_0NOTEQUAL 0x92 1 ; 1 |
_ADD 0x93 2 ; 1 |
_SUB 0x94 2 ; 1 |
_MUL 0x95 2 ; 1 |
_DIV 0x96 2 ; 1 |
_MOD 0x97 2 ; 1 |
_LSHIFT 0x98 2 ; 1 |
_RSHIFT 0x99 2 ; 1 |
_BOOLAND 0x9a 2 ; 1 |
_BOOLOR 0x9b 2 ; 1 |
_NUMEQUAL 0x9c 2 ; 1 |
_NUMEQUALVERIFY 0x9d 2 ; 0/1 |
_NUMNOTEQUAL 0x9e 2 ; 1 |
_LESSTHAN 0x9f 2 ; 1 |
Constants
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_FALSE | 0 | 0x00 | Nothing. | (empty value) | An empty array of bytes is pushed onto the stack. (This is not a no-op: an item is added to the stack.) |
N/A | 1-75 | 0x01-0x4b | (special) | data | The next opcode bytes is data to be pushed onto the stack |
OP_PUSHDATA1 | 76 | 0x4c | (special) | data | The next byte contains the number of bytes to be pushed onto the stack. |
OP_PUSHDATA2 | 77 | 0x4d | (special) | data | The next two bytes contain the number of bytes to be pushed onto the stack. |
OP_PUSHDATA4 | 78 | 0x4e | (special) | data | The next four bytes contain the number of bytes to be pushed onto the stack. |
OP_1NEGATE | 79 | 0x4f | Nothing. | -1 | The number -1 is pushed onto the stack. |
OP_1, OP_TRUE | 81 | 0x51 | Nothing. | 1 | The number 1 is pushed onto the stack. |
OP_2-OP_16 | 82-96 | 0x52-0x60 | Nothing. | 2-16 | The number in the word name (2-16) is pushed onto the stack. |
Flow control
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_NOP | 97 | 0x61 | Nothing | Nothing | Does nothing. |
OP_IF | 99 | 0x63 | <expression> if [statements] [else [statements]]* endif | If the top stack value is not 0, the statements are executed. The top stack value is removed. | |
OP_NOTIF | 100 | 0x64 | <expression> if [statements] [else [statements]]* endif | If the top stack value is 0, the statements are executed. The top stack value is removed. | |
OP_ELSE | 103 | 0x67 | <expression> if [statements] [else [statements]]* endif | If the preceding OP_IF or OP_NOTIF or OP_ELSE was not executed then these statements are and if the preceding OP_IF or OP_NOTIF or OP_ELSE was executed then these statements are not. | |
OP_ENDIF | 104 | 0x68 | <expression> if [statements] [else [statements]]* endif | Ends an if/else block. | |
OP_VERIFY | 105 | 0x69 | True / false | Nothing / False | Marks transaction as invalid if top stack value is not true. True is removed, but false is not. |
OP_RETURN | 106 | 0x6a | Nothing | Nothing | Marks transaction as invalid. |
Stack
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_TOALTSTACK | 107 | 0x6b | x1 | (alt)x1 | Puts the input onto the top of the alt stack. Removes it from the main stack. |
OP_FROMALTSTACK | 108 | 0x6c | (alt)x1 | x1 | Puts the input onto the top of the main stack. Removes it from the alt stack. |
OP_IFDUP | 115 | 0x73 | x | x / x x | If the top stack value is not 0, duplicate it. |
OP_DEPTH | 116 | 0x74 | Nothing | <Stack size> | Puts the number of stack items onto the stack. |
OP_DROP | 117 | 0x75 | x | Nothing | Removes the top stack item. |
OP_DUP | 118 | 0x76 | x | x x | Duplicates the top stack item. |
OP_NIP | 119 | 0x77 | x1 x2 | x2 | Removes the second-to-top stack item. |
OP_OVER | 120 | 0x78 | x1 x2 | x1 x2 x1 | Copies the second-to-top stack item to the top. |
OP_PICK | 121 | 0x79 | xn ... x2 x1 x0 <n> | xn ... x2 x1 x0 xn | The item n back in the stack is copied to the top. |
OP_ROLL | 122 | 0x7a | xn ... x2 x1 x0 <n> | ... x2 x1 x0 xn | The item n back in the stack is moved to the top. |
OP_ROT | 123 | 0x7b | x1 x2 x3 | x2 x3 x1 | The top three items on the stack are rotated to the left. |
OP_SWAP | 124 | 0x7c | x1 x2 | x2 x1 | The top two items on the stack are swapped. |
OP_TUCK | 125 | 0x7d | x1 x2 | x2 x1 x2 | The item at the top of the stack is copied and inserted before the second-to-top item. |
OP_2DROP | 109 | 0x6d | x1 x2 | Nothing | Removes the top two stack items. |
OP_2DUP | 110 | 0x6e | x1 x2 | x1 x2 x1 x2 | Duplicates the top two stack items. |
OP_3DUP | 111 | 0x6f | x1 x2 x3 | x1 x2 x3 x1 x2 x3 | Duplicates the top three stack items. |
OP_2OVER | 112 | 0x70 | x1 x2 x3 x4 | x1 x2 x3 x4 x1 x2 | Copies the pair of items two spaces back in the stack to the front. |
OP_2ROT | 113 | 0x71 | x1 x2 x3 x4 x5 x6 | x3 x4 x5 x6 x1 x2 | The fifth and sixth items back are moved to the top of the stack. |
OP_2SWAP | 114 | 0x72 | x1 x2 x3 x4 | x3 x4 x1 x2 | Swaps the top two pairs of items. |
Splice
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_CAT | 126 | 0x7e | x1 x2 | out | Concatenates two strings. Currently disabled. |
OP_SUBSTR | 127 | 0x7f | in begin size | out | Returns a section of a string. Currently disabled. |
OP_LEFT | 128 | 0x80 | in size | out | Keeps only characters left of the specified point in a string. Currently disabled. |
OP_RIGHT | 129 | 0x81 | in size | out | Keeps only characters right of the specified point in a string. Currently disabled. |
OP_SIZE | 130 | 0x82 | in | in size | Returns the length of the input string. |
Bitwise logic
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_INVERT | 131 | 0x83 | in | out | Flips all of the bits in the input. Currently disabled. |
OP_AND | 132 | 0x84 | x1 x2 | out | Boolean and between each bit in the inputs. Currently disabled. |
OP_OR | 133 | 0x85 | x1 x2 | out | Boolean or between each bit in the inputs. Currently disabled. |
OP_XOR | 134 | 0x86 | x1 x2 | out | Boolean exclusive or between each bit in the inputs. Currently disabled. |
OP_EQUAL | 135 | 0x87 | x1 x2 | True / false | Returns 1 if the inputs are exactly equal, 0 otherwise. |
OP_EQUALVERIFY | 136 | 0x88 | x1 x2 | True / false | Same as OP_EQUAL, but runs OP_VERIFY afterward. |
Arithmetic
Arithmetic is limited to max 4 byte integers
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_1ADD | 139 | 0x8b | in | out | 1 is added to the input. |
OP_1SUB | 140 | 0x8c | in | out | 1 is subtracted from the input. |
OP_2MUL | 141 | 0x8d | in | out | The input is multiplied by 2. Currently disabled. |
OP_2DIV | 142 | 0x8e | in | out | The input is divided by 2. Currently disabled. |
OP_NEGATE | 143 | 0x8f | in | out | The sign of the input is flipped. |
OP_ABS | 144 | 0x90 | in | out | The input is made positive. |
OP_NOT | 145 | 0x91 | in | out | If the input is 0 or 1, it is flipped. Otherwise the output will be 0. |
OP_0NOTEQUAL | 146 | 0x92 | in | out | Returns 0 if the input is 0. 1 otherwise. |
OP_ADD | 147 | 0x93 | a b | out | a is added to b. |
OP_SUB | 148 | 0x94 | a b | out | b is subtracted from a. |
OP_MUL | 149 | 0x95 | a b | out | a is multiplied by b. Currently disabled. |
OP_DIV | 150 | 0x96 | a b | out | a is divided by b. Currently disabled. |
OP_MOD | 151 | 0x97 | a b | out | Returns the remainder after dividing a by b. Currently disabled. |
OP_LSHIFT | 152 | 0x98 | a b | out | Shifts a left b bits, preserving sign. Currently disabled. |
OP_RSHIFT | 153 | 0x99 | a b | out | Shifts a right b bits, preserving sign. Currently disabled. |
OP_BOOLAND | 154 | 0x9a | a b | out | If both a and b are not 0, the output is 1. Otherwise 0. |
OP_BOOLOR | 155 | 0x9b | a b | out | If a or b is not 0, the output is 1. Otherwise 0. |
OP_NUMEQUAL | 156 | 0x9c | a b | out | Returns 1 if the numbers are equal, 0 otherwise. |
OP_NUMEQUALVERIFY | 157 | 0x9d | a b | out | Same as OP_NUMEQUAL, but runs OP_VERIFY afterward. |
OP_NUMNOTEQUAL | 158 | 0x9e | a b | out | Returns 1 if the numbers are not equal, 0 otherwise. |
OP_LESSTHAN | 159 | 0x9f | a b | out | Returns 1 if a is less than b, 0 otherwise. |
OP_GREATERTHAN | 160 | 0xa0 | a b | out | Returns 1 if a is greater than b, 0 otherwise. |
OP_LESSTHANOREQUAL | 161 | 0xa1 | a b | out | Returns 1 if a is less than or equal to b, 0 otherwise. |
OP_GREATERTHANOREQUAL | 162 | 0xa2 | a b | out | Returns 1 if a is greater than or equal to b, 0 otherwise. |
OP_MIN | 163 | 0xa3 | a b | out | Returns the smaller of a and b. |
OP_MAX | 164 | 0xa4 | a b | out | Returns the larger of a and b. |
OP_WITHIN | 165 | 0xa5 | x min max | out | Returns 1 if x is within the specified range (left-inclusive), 0 otherwise. |
Crypto
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_RIPEMD160 | 166 | 0xa6 | in | hash | The input is hashed using RIPEMD-160. |
OP_SHA1 | 167 | 0xa7 | in | hash | The input is hashed using SHA-1. |
OP_SHA256 | 168 | 0xa8 | in | hash | The input is hashed using SHA-256. |
OP_HASH160 | 169 | 0xa9 | in | hash | The input is hashed twice: first with SHA-256 and then with RIPEMD-160. |
OP_HASH256 | 170 | 0xaa | in | hash | The input is hashed two times with SHA-256. |
OP_CODESEPARATOR | 171 | 0xab | Nothing | Nothing | All of the signature checking words will only match signatures to the data after the most recently-executed OP_CODESEPARATOR. |
OP_CHECKSIG | 172 | 0xac | sig pubkey | True / false | The entire transaction's outputs, inputs, and script (from the most recently-executed OP_CODESEPARATOR to the end) are hashed. The signature used by OP_CHECKSIG must be a valid signature for this hash and public key. If it is, 1 is returned, 0 otherwise. |
OP_CHECKSIGVERIFY | 173 | 0xad | sig pubkey | True / false | Same as OP_CHECKSIG, but OP_VERIFY is executed afterward. |
OP_CHECKMULTISIG | 174 | 0xae | x sig1 sig2 ... <number of signatures> pub1 pub2 <number of public keys> | True / False | For each signature and public key pair, OP_CHECKSIG is executed. If more public keys than signatures are listed, some key/sig pairs can fail. All signatures need to match a public key. If all signatures are valid, 1 is returned, 0 otherwise. Due to a bug, one extra unused value is removed from the stack. |
OP_CHECKMULTISIGVERIFY | 175 | 0xaf | x sig1 sig2 ... <number of signatures> pub1 pub2 ... <number of public keys> | True / False | Same as OP_CHECKMULTISIG, but OP_VERIFY is executed afterward. |
Pseudo-words
These words are used internally for assisting with transaction matching. They are invalid if used in actual scripts.
Nemonic | Decimal | Hex | Description |
---|---|---|---|
OP_PUBKEYHASH | 253 | 0xfd | Represents a public key hashed with OP_HASH160. |
OP_PUBKEY | 254 | 0xfe | Represents a public key compatible with OP_CHECKSIG. |
OP_INVALIDOPCODE | 255 | 0xff | Matches any opcode that is not yet assigned. |
Reserved words
Any opcode not assigned is also reserved. Using an unassigned opcode makes the transaction invalid.
Nemonic | Decimal | Hex | When used... |
---|---|---|---|
OP_RESERVED | 80 | 0x50 | Transaction is invalid unless occuring in an unexecuted OP_IF branch |
OP_VER | 98 | 0x62 | Transaction is invalid unless occuring in an unexecuted OP_IF branch |
OP_VERIF | 101 | 0x65 | Transaction is invalid even when occuring in an unexecuted OP_IF branch |
OP_VERNOTIF | 102 | 0x66 | Transaction is invalid even when occuring in an unexecuted OP_IF branch |
OP_RESERVED1 | 137 | 0x89 | Transaction is invalid unless occuring in an unexecuted OP_IF branch |
OP_RESERVED2 | 138 | 0x8a | Transaction is invalid unless occuring in an unexecuted OP_IF branch |
OP_NOP1-OP_NOP10 | 176-185 | 0xb0-0xb9 | The word is ignored. |