O'Reilly logo

Mastering Bitcoin by Andreas M. Antonopoulos

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Appendix A. Transaction Script Language Operators, Constants, and Symbols

Table A-1 shows operators for pushing values onto the stack.

Table A-1. Push value onto stack
Symbol Value (hex) Description

OP_0 or OP_FALSE

0x00

An empty array is pushed onto the stack

1-75

0x01-0x4b

Push the next N bytes onto the stack, where N is 1 to 75 bytes

OP_PUSHDATA1

0x4c

The next script byte contains N, push the following N bytes onto the stack

OP_PUSHDATA2

0x4d

The next two script bytes contain N, push the following N bytes onto the stack

OP_PUSHDATA4

0x4e

The next four script bytes contain N, push the following N bytes onto the stack

OP_1NEGATE

0x4f

Push the value “–1” onto the stack

OP_RESERVED

0x50

Halt - Invalid transaction unless found in an unexecuted OP_IF clause

OP_1 or OP_TRUE

0x51

Push the value “1” onto the stack

OP_2 to OP_16

0x52 to 0x60

For OP_N, push the value “N” onto the stack. E.g., OP_2 pushes “2”

Table A-2 shows conditional flow control operators.

Table A-2. Conditional flow control
Symbol Value (hex) Description

OP_NOP

0x61

Do nothing

OP_VER

0x62

Halt - Invalid transaction unless found in an unexecuted OP_IF clause

OP_IF

0x63

Execute the statements following if top of stack is not 0

OP_NOTIF

0x64

Execute the statements following if top of stack is 0

OP_VERIF

0x65

Halt - Invalid transaction

OP_VERNOTIF

0x66

Halt - Invalid transaction

OP_ELSE

0x67

Execute only if the previous statements were not executed

OP_ENDIF

0x68

End the OP_IF, OP_NOTIF, OP_ELSE block

OP_VERIFY

0x69

Check the top of the stack, halt and invalidate transaction if not TRUE

OP_RETURN

0x6a

Halt and invalidate transaction

Table A-3 shows operators used to manipulate the stack.

Table A-3. Stack operations
Symbol Value (hex) Description

OP_TOALTSTACK

0x6b

Pop top item from stack and push to alternative stack

OP_FROMALTSTACK

0x6c

Pop top item from alternative stack and push to stack

OP_2DROP

0x6d

Pop top two stack items

OP_2DUP

0x6e

Duplicate top two stack items

OP_3DUP

0x6f

Duplicate top three stack items

OP_2OVER

0x70

Copy the third and fourth items in the stack to the top

OP_2ROT

0x71

Move the fifth and sixth items in the stack to the top

OP_2SWAP

0x72

Swap the two top pairs of items in the stack

OP_IFDUP

0x73

Duplicate the top item in the stack if it is not 0

OP_DEPTH

0x74

Count the items on the stack and push the resulting count

OP_DROP

0x75

Pop the top item in the stack

OP_DUP

0x76

Duplicate the top item in the stack

OP_NIP

0x77

Pop the second item in the stack

OP_OVER

0x78

Copy the second item in the stack and push it onto the top

OP_PICK

0x79

Pop value N from top, then copy the Nth item to the top of the stack

OP_ROLL

0x7a

Pop value N from top, then move the Nth item to the top of the stack

OP_ROT

0x7b

Rotate the top three items in the stack

OP_SWAP

0x7c

Swap the top three items in the stack

OP_TUCK

0x7d

Copy the top item and insert it between the top and second item.

Table A-4 shows string operators.

Table A-4. String splice operations
Symbol Value (hex) Description

OP_CAT

0x7e

Disabled (concatenates top two items)

OP_SUBSTR

0x7f

Disabled (returns substring)

OP_LEFT

0x80

Disabled (returns left substring)

OP_RIGHT

0x81

Disabled (returns right substring)

OP_SIZE

0x82

Calculate string length of top item and push the result

Table A-5 shows binary arithmetic and boolean logic operators.

Table A-5. Binary arithmetic and conditionals
Symbol Value (hex) Description

OP_INVERT

0x83

Disabled (Flip the bits of the top item)

OP_AND

0x84

Disabled (Boolean AND of two top items)

OP_OR

0x85

Disabled (Boolean OR of two top items)

OP_XOR

0x86

Disabled (Boolean XOR of two top items)

OP_EQUAL

0x87

Push TRUE (1) if top two items are exactly equal, push FALSE (0) otherwise

OP_EQUALVERIFY

0x88

Same as OP_EQUAL, but run OP_VERIFY after to halt if not TRUE

OP_RESERVED1

0x89

Halt - Invalid transaction unless found in an unexecuted OP_IF clause

OP_RESERVED2

0x8a

Halt - Invalid transaction unless found in an unexecuted OP_IF clause

Table A-6 shows numeric (arithmetic) operators.

Table A-6. Numeric operators
Symbol Value (hex) Description

OP_1ADD

0x8b

Add 1 to the top item

OP_1SUB

0x8c

Subtract 1 from the top item

OP_2MUL

0x8d

Disabled (multiply top item by 2)

OP_2DIV

0x8e

Disabled (divide top item by 2)

OP_NEGATE

0x8f

Flip the sign of top item

OP_ABS

0x90

Change the sign of the top item to positive

OP_NOT

0x91

If top item is 0 or 1 Boolean flip it, otherwise return 0

OP_0NOTEQUAL

0x92

If top item is 0 return 0, otherwise return 1

OP_ADD

0x93

Pop top two items, add them and push result

OP_SUB

0x94

Pop top two items, subtract first from second, push result

OP_MUL

0x95

Disabled (multiply top two items)

OP_DIV

0x96

Disabled (divide second item by first item)

OP_MOD

0x97

Disabled (remainder divide second item by first item)

OP_LSHIFT

0x98

Disabled (shift second item left by first item number of bits)

OP_RSHIFT

0x99

Disabled (shift second item right by first item number of bits)

OP_BOOLAND

0x9a

Boolean AND of top two items

OP_BOOLOR

0x9b

Boolean OR of top two items

OP_NUMEQUAL

0x9c

Return TRUE if top two items are equal numbers

OP_NUMEQUALVERIFY

0x9d

Same as NUMEQUAL, then OP_VERIFY to halt if not TRUE

OP_NUMNOTEQUAL

0x9e

Return TRUE if top two items are not equal numbers

OP_LESSTHAN

0x9f

Return TRUE if second item is less than top item

OP_GREATERTHAN

0xa0

Return TRUE if second item is greater than top item

OP_LESSTHANOREQUAL

0xa1

Return TRUE if second item is less than or equal to top item

OP_GREATERTHANOREQUAL

0xa2

Return TRUE if second item is great than or equal to top item

OP_MIN

0xa3

Return the smaller of the two top items

OP_MAX

0xa4

Return the larger of the two top items

OP_WITHIN

0xa5

Return TRUE if the third item is between the second item (or equal) and first item

Table A-7 shows cryptographic function operators.

Table A-7. Cryptographic and hashing operations
Symbol Value (hex) Description

OP_RIPEMD160

0xa6

Return RIPEMD160 hash of top item

OP_SHA1

0xa7

Return SHA1 hash of top item

OP_SHA256

0xa8

Return SHA256 hash of top item

OP_HASH160

0xa9

Return RIPEMD160(SHA256(x)) hash of top item

OP_HASH256

0xaa

Return SHA256(SHA256(x)) hash of top item

OP_CODESEPARATOR

0xab

Mark the beginning of signature-checked data

OP_CHECKSIG

0xac

Pop a public key and signature and validate the signature for the transaction’s hashed data, return TRUE if matching

OP_CHECKSIGVERIFY

0xad

Same as CHECKSIG, then OP_VERIFY to halt if not TRUE

OP_CHECKMULTISIG

0xae

Run CHECKSIG for each pair of signature and public key provided. All must match. Bug in implementation pops an extra value, prefix with OP_NOP as workaround

OP_CHECKMULTISIGVERIFY

0xaf

Same as CHECKMULTISIG, then OP_VERIFY to halt if not TRUE

Table A-8 shows nonoperator symbols

Table A-8. Non-operators
Symbol Value (hex) Description

OP_NOP1-OP_NOP10

0xb0-0xb9

Does nothing, ignored

Table A-9 shows operator codes reserved for use by the internal script parser.

Table A-9. Reserved OP codes for internal use by the parser
Symbol Value (hex) Description

OP_SMALLDATA

0xf9

Represents small data field

OP_SMALLINTEGER

0xfa

Represents small integer data field

OP_PUBKEYS

0xfb

Represents public key fields

OP_PUBKEYHASH

0xfd

Represents a public key hash field

OP_PUBKEY

0xfe

Represents a public key field

OP_INVALIDOPCODE

0xff

Represents any OP code not currently assigned

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required