User talk:Smtp
opcodes
OP_FALSE 0x00 0 ; 0 |
- 0x01 0 ; 1 |
- 0x02 0 ; 2 |
- 0x03 0 ; 3 |
- 0x04 0 ; 4 |
- 0x04 0 ; 5 |
- 0x06 0 ; 6 |
- 0x07 0 ; 7 |
- 0x08 0 ; 8 |
- 0x09 0 ; 9 |
- 0x0a 0 ; 10 |
- 0x0b 0 ; 11 |
- 0x0c 0 ; 12 |
- 0x0d 0 ; 13 |
- 0x0e 0 ; 14 |
- 0x0f 0 ; 15 |
- 0x10 0 ; 16 |
- 0x11 0 ; 17 |
- 0x12 0 ; 18 |
- 0x13 0 ; 19 |
- 0x14 0 ; 20 |
- 0x15 0 ; 21 |
- 0x16 0 ; 22 |
- 0x17 0 ; 23 |
- 0x18 0 ; 24 |
- 0x19 0 ; 25 |
- 0x1a 0 ; 26 |
- 0x1b 0 ; 27 |
- 0x1c 0 ; 28 |
- 0x1d 0 ; 29 |
- 0x1e 0 ; 30 |
- 0x1f 0 ; 31 |
- 0x20 0 ; 32 |
- 0x21 0 ; 33 |
- 0x22 0 ; 34 |
- 0x23 0 ; 35 |
- 0x24 0 ; 36 |
- 0x25 0 ; 37 |
- 0x26 0 ; 38 |
- 0x27 0 ; 39 |
- 0x28 0 ; 40 |
- 0x29 0 ; 41 |
- 0x2a 0 ; 42 |
- 0x2b 0 ; 43 |
- 0x2c 0 ; 44 |
- 0x2d 0 ; 45 |
- 0x2e 0 ; 46 |
- 0x2f 0 ; 47 |
- 0x30 0 ; 48 |
- 0x31 0 ; 49 |
- 0x32 0 ; 50 |
- 0x33 0 ; 51 |
- 0x34 0 ; 52 |
- 0x35 0 ; 53 |
- 0x36 0 ; 54 |
- 0x37 0 ; 55 |
- 0x38 0 ; 56 |
- 0x39 0 ; 57 |
- 0x3a 0 ; 58 |
- 0x3b 0 ; 59 |
- 0x3c 0 ; 60 |
- 0x3d 0 ; 61 |
- 0x3e 0 ; 62 |
- 0x3f 0 ; 63 |
- 0x40 0 ; 64 |
- 0x41 0 ; 65 |
- 0x42 0 ; 66 |
- 0x43 0 ; 67 |
- 0x44 0 ; 68 |
- 0x45 0 ; 69 |
- 0x46 0 ; 70 |
- 0x47 0 ; 71 |
- 0x48 0 ; 72 |
- 0x49 0 ; 73 |
- 0x4a 0 ; 74 |
- 0x4b 0 ; 75 |
OP_PUSHDATA1 0x4c 0 ; 0 - 255 |
OP_PUSHDATA2 0x4d 0 ; 0 - 2^16-1 |
OP_PUSHDATA4 0x4e 0 ; 0 - 2^32-1 |
OP_1NEGATE 0x4f 0 ; 1 |
Constants
Nemonic | Decimal | Hex | Input | Output | Description |
---|---|---|---|---|---|
OP_0, 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. |