Difference between revisions of "User talk:Smtp"
(→script validation conditions) |
(→script validation conditions) |
||
Line 1,022: | Line 1,022: | ||
<li>the opcodes OP_VERIF and OP_NOTVERIF invalidate a script which contains this opcode (even if this opcode is not executed!) | <li>the opcodes OP_VERIF and OP_NOTVERIF invalidate a script which contains this opcode (even if this opcode is not executed!) | ||
<li>the opcodes OP_ELSE or OP_ENDIF has no matching OP_IF<br> | <li>the opcodes OP_ELSE or OP_ENDIF has no matching OP_IF<br> | ||
+ | <li>the script execution has been finished but there is (at least) an unmatched OP_IF<br> | ||
<li>the opcodes OP_VERIFY, OP_EQUALVERIFY, OP_NUMEQUALVERIFY, OP_CHECKSIGVERIFY and OP_CHECKMULTISIGVERIFY invalidate the script if the stack-top item is false | <li>the opcodes OP_VERIFY, OP_EQUALVERIFY, OP_NUMEQUALVERIFY, OP_CHECKSIGVERIFY and OP_CHECKMULTISIGVERIFY invalidate the script if the stack-top item is false | ||
<li>the execution of OP_RETURN | <li>the execution of OP_RETURN |
Revision as of 16:54, 2 January 2013
Contents
opcodes
opcode overview
For each opcode is given: its nemonic without the leading OP_, its hexadecimal byte value, the number of stack items needed (poped) during execution, the number of stack items pushed (after execution). A * after the needed stack items indicates that further bytes from the script following the current opcode are needed. A # indicates that items on the alternative stack are poped/pushed. A @ indicates that further (global) data from transcations is needed.
Different colors indicate different semantic execution groups of opcodes.
_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 |
_GREATERTHAN 0xa0 2 ; 1 |
_LESSTHANOREQUAL 0xa1 2 ; 1 |
_GREATERTHANOREQUAL 0xa2 2 ; 1 |
_MIN 0xa3 2 ; 1 |
_MAX 0xa4 2 ; 1 |
_WITHIN 0xa5 3 ; 1 |
_RIPEMD160 0xa6 1 ; 1 |
_SHA1 0xa7 1 ; 1 |
_SHA256 0xa8 1 ; 1 |
_HASH160 0xa9 1 ; 1 |
_HASH256 0xaa 1 ; 1 |
_CODESEPARATOR 0xab 0 ; 0 |
_CHECKSIG 0xac 2 @; 1 |
_CHECKSIGVERIFY 0xad 2 @; 0/1 |
_CHECKMULTISIG 0xae 2n+2 @; 1 |
_CHECKMULTISIGVERIFY 0xaf 2n+2 @; 0/1 |
_NOP1 0xb0 0 ; 0 |
_NOP2 0xb1 0 ; 0 |
_NOP3 0xb2 0 ; 0 |
_NOP4 0xb3 0 ; 0 |
_NOP5 0xb4 0 ; 0 |
_NOP6 0xb5 0 ; 0 |
_NOP7 0xb6 0 ; 0 |
_NOP8 0xb7 0 ; 0 |
_NOP9 0xb8 0 ; 0 |
_NOP10 0xb9 0 ; 0 |
- 0xba |
- 0xbb |
- 0xbc |
- 0xbd |
- 0xbe |
- 0xbf |
- 0xc0 |
- 0xc1 |
- 0xc2 |
- 0xc3 |
- 0xc4 |
- 0xc5 |
- 0xc6 |
- 0xc7 |
- 0xc8 |
- 0xc9 |
- 0xca |
- 0xcb |
- 0xcc |
- 0xcd |
- 0xce |
- 0xcf |
- 0xd0 |
- 0xd1 |
- 0xd2 |
- 0xd3 |
- 0xd4 |
- 0xd5 |
- 0xd6 |
- 0xd7 |
- 0xd8 |
- 0xd9 |
- 0xda |
- 0xdb |
- 0xdc |
- 0xdd |
- 0xde |
- 0xdf |
- 0xe0 |
- 0xe1 |
- 0xe2 |
- 0xe3 |
- 0xe4 |
- 0xe5 |
- 0xe6 |
- 0xe7 |
- 0xe8 |
- 0xe9 |
- 0xea |
- 0xeb |
- 0xec |
- 0xed |
- 0xee |
- 0xef |
- 0xf0 |
- 0xf1 |
- 0xf2 |
- 0xf3 |
- 0xf4 |
- 0xf5 |
- 0xf6 |
- 0xf7 |
- 0xf8 |
- 0xf9 |
- 0xfa |
_SMALLINTEGER 0xfb |
_PUBKEYS 0xfc |
_PUBKEYHASH 0xfd |
_PUBKEY 0xfe |
_INVALIDOPCODE 0xff |
The opcode value 0x00 with nemonic OP_FALSE is also named OP_0 and the opcode value 0x51 with nemonic OP_1 as also named OP_TRUE.
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.) |
- | 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. |
script validation conditions
A script is considered invalid, if any of these conditions meets:
- the total size of the script exceeds (currently) 10000 bytes
- there are more than (currently) 201 opcodes of opcode value > 0x60 in the script
- each instruction is (currently) limited to maximal 520 bytes. This effects only the opcodes OP_PUSHDATA2 and OP_PUSHDATA4
- the executed opcode of the script has insufficient input (from stack, from script or from anywhere)
- the opcode is not defined (for execution) - indicated by white or light gray background color in the table
- the opcode is disabled (currently 15 opcodes) - indicated by white fontcolor in the above table
- stack overflow occurs during execution of the opcode (currently the number of items on the stack and on the alternate stack is limited to 1000)
- the opcodes OP_VERIF and OP_NOTVERIF invalidate a script which contains this opcode (even if this opcode is not executed!)
- the opcodes OP_ELSE or OP_ENDIF has no matching OP_IF
- the script execution has been finished but there is (at least) an unmatched OP_IF
- the opcodes OP_VERIFY, OP_EQUALVERIFY, OP_NUMEQUALVERIFY, OP_CHECKSIGVERIFY and OP_CHECKMULTISIGVERIFY invalidate the script if the stack-top item is false
- the execution of OP_RETURN
- the numerical value of the top-stack item is negative or greater than the number of items - 2 on the stack if OP_PICK or OP_ROLL shall be executed
- (the 2nd argument of OP_WITHIN is numerical greater than the top-stack item)
- an item used as pubkey or signature for each of the opcodes OP_CHECKSIG, OP_CHECKSIGVERIFY, OP_CHECKMULTISIG or OP_CHECKMULTISIGVERIFY can be neither a pubkey or signature (for the given hash)
- the number of signature items or the number of public key items on the stack is negative for OP_CHECKMULTISIG or OP_CHECKMULTISIGVERIFY
- there or more signatures items than public key items on the stack for OP_CHECKMULTISIG or OP_CHECKMULTISIGVERIFY
- there are (currently) more than 20 public key items on the stack for OP_CHECKMULTISIG or CHECKMULTISIGVERIFY
- the script execution has been finished and the stack is empty or the top-stack item is false (numerical value 0)
else the script is considered to be valid.^{[1]}
References
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.1/ | bitcoin-clinet version 0.7.1 source-file src/src/script.cpp
References
http://sourceforge.net/projects/bitcoin/files/Bitcoin/bitcoin-0.7.2/ bitcoin-client version 0.7.1 , file: src/src/script.h , file: src/src/script.cpp