Skip to content

Latest commit

 

History

History
163 lines (151 loc) · 7.83 KB

appdx-scriptops.asciidoc

File metadata and controls

163 lines (151 loc) · 7.83 KB

Appendix: Transaction Script Language Operators, Constants and Symbols

Table 1. Push Value onto Stack
Symbol Value (hex) Description

OP_0 or OP_FALSE

0x00

An empty array is pushed on to 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 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

Ends 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 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

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

OP_2ROT

0x71

Moves 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 on to 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 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 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 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 form 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 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_VEIRFY 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 8. Non-Operators
Symbol Value (hex) Description

OP_NOP1-OP_NOP10

0xb0-0xb9

Does nothing, ignored.

Table 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