Module: BSV::Script::Opcodes
- Defined in:
- lib/bsv/script/opcodes.rb
Overview
All Bitcoin script opcodes as integer constants.
Includes data push operations, flow control, stack manipulation, splice, bitwise, arithmetic, and cryptographic opcodes. Also provides Opcodes.name_for for reverse lookup (opcode byte → name).
Constant Summary collapse
- OP_0 =
Push value
0x00- OP_FALSE =
OP_0- OP_PUSHDATA1 =
0x4c- OP_PUSHDATA2 =
0x4d- OP_PUSHDATA4 =
0x4e- OP_1NEGATE =
0x4f- OP_RESERVED =
0x50- OP_1 =
0x51- OP_TRUE =
OP_1- OP_2 =
0x52- OP_3 =
0x53- OP_4 =
0x54- OP_5 =
0x55- OP_6 =
0x56- OP_7 =
0x57- OP_8 =
0x58- OP_9 =
0x59- OP_10 =
0x5a- OP_11 =
0x5b- OP_12 =
0x5c- OP_13 =
0x5d- OP_14 =
0x5e- OP_15 =
0x5f- OP_16 =
0x60- OP_NOP =
Flow control
0x61- OP_VER =
0x62- OP_IF =
0x63- OP_NOTIF =
0x64- OP_VERIF =
0x65- OP_VERNOTIF =
0x66- OP_ELSE =
0x67- OP_ENDIF =
0x68- OP_VERIFY =
0x69- OP_RETURN =
0x6a- OP_TOALTSTACK =
Stack
0x6b- OP_FROMALTSTACK =
0x6c- OP_2DROP =
0x6d- OP_2DUP =
0x6e- OP_3DUP =
0x6f- OP_2OVER =
0x70- OP_2ROT =
0x71- OP_2SWAP =
0x72- OP_IFDUP =
0x73- OP_DEPTH =
0x74- OP_DROP =
0x75- OP_DUP =
0x76- OP_NIP =
0x77- OP_OVER =
0x78- OP_PICK =
0x79- OP_ROLL =
0x7a- OP_ROT =
0x7b- OP_SWAP =
0x7c- OP_TUCK =
0x7d- OP_CAT =
Splice
0x7e- OP_SPLIT =
0x7f- OP_NUM2BIN =
0x80- OP_BIN2NUM =
0x81- OP_SIZE =
0x82- OP_INVERT =
Bitwise logic
0x83- OP_AND =
0x84- OP_OR =
0x85- OP_XOR =
0x86- OP_EQUAL =
0x87- OP_EQUALVERIFY =
0x88- OP_RESERVED1 =
0x89- OP_RESERVED2 =
0x8a- OP_1ADD =
Arithmetic
0x8b- OP_1SUB =
0x8c- OP_2MUL =
0x8d- OP_2DIV =
0x8e- OP_NEGATE =
0x8f- OP_ABS =
0x90- OP_NOT =
0x91- OP_0NOTEQUAL =
0x92- OP_ADD =
0x93- OP_SUB =
0x94- OP_MUL =
0x95- OP_DIV =
0x96- OP_MOD =
0x97- OP_LSHIFT =
0x98- OP_RSHIFT =
0x99- OP_BOOLAND =
0x9a- OP_BOOLOR =
0x9b- OP_NUMEQUAL =
0x9c- OP_NUMEQUALVERIFY =
0x9d- OP_NUMNOTEQUAL =
0x9e- OP_LESSTHAN =
0x9f- OP_GREATERTHAN =
0xa0- OP_LESSTHANOREQUAL =
0xa1- OP_GREATERTHANOREQUAL =
0xa2- OP_MIN =
0xa3- OP_MAX =
0xa4- OP_WITHIN =
0xa5- OP_RIPEMD160 =
Crypto
0xa6- OP_SHA1 =
0xa7- OP_SHA256 =
0xa8- OP_HASH160 =
0xa9- OP_HASH256 =
0xaa- OP_CODESEPARATOR =
0xab- OP_CHECKSIG =
0xac- OP_CHECKSIGVERIFY =
0xad- OP_CHECKMULTISIG =
0xae- OP_CHECKMULTISIGVERIFY =
0xaf- OP_NOP1 =
Expansion / NOP upgrades
0xb0- OP_CHECKLOCKTIMEVERIFY =
0xb1- OP_CHECKSEQUENCEVERIFY =
0xb2- OP_SUBSTR =
Chronicle slots (0xb3–0xb7): string-splice and numeric-shift opcodes re-enabled in BSV Chronicle. Fully implemented in the interpreter.
0xb3- OP_LEFT =
0xb4- OP_RIGHT =
0xb5- OP_LSHIFTNUM =
0xb6- OP_RSHIFTNUM =
0xb7- OP_NOP4 =
NOP aliases for the Chronicle slots (preserved for compatibility)
OP_SUBSTR- OP_NOP5 =
OP_LEFT- OP_NOP6 =
OP_RIGHT- OP_NOP7 =
OP_LSHIFTNUM- OP_NOP8 =
OP_RSHIFTNUM- OP_NOP9 =
0xb8- OP_NOP10 =
0xb9- OP_NOP11 =
Extended NOP range (0xba–0xfc) — unnamed, reserved for future use. Defined so that to_asm/from_asm can round-trip scripts containing them.
0xba- OP_NOP12 =
0xbb- OP_NOP13 =
0xbc- OP_NOP14 =
0xbd- OP_NOP15 =
0xbe- OP_NOP16 =
0xbf- OP_NOP17 =
0xc0- OP_NOP18 =
0xc1- OP_NOP19 =
0xc2- OP_NOP20 =
0xc3- OP_NOP21 =
0xc4- OP_NOP22 =
0xc5- OP_NOP23 =
0xc6- OP_NOP24 =
0xc7- OP_NOP25 =
0xc8- OP_NOP26 =
0xc9- OP_NOP27 =
0xca- OP_NOP28 =
0xcb- OP_NOP29 =
0xcc- OP_NOP30 =
0xcd- OP_NOP31 =
0xce- OP_NOP32 =
0xcf- OP_NOP33 =
0xd0- OP_NOP34 =
0xd1- OP_NOP35 =
0xd2- OP_NOP36 =
0xd3- OP_NOP37 =
0xd4- OP_NOP38 =
0xd5- OP_NOP39 =
0xd6- OP_NOP40 =
0xd7- OP_NOP41 =
0xd8- OP_NOP42 =
0xd9- OP_NOP43 =
0xda- OP_NOP44 =
0xdb- OP_NOP45 =
0xdc- OP_NOP46 =
0xdd- OP_NOP47 =
0xde- OP_NOP48 =
0xdf- OP_NOP49 =
0xe0- OP_NOP50 =
0xe1- OP_NOP51 =
0xe2- OP_NOP52 =
0xe3- OP_NOP53 =
0xe4- OP_NOP54 =
0xe5- OP_NOP55 =
0xe6- OP_NOP56 =
0xe7- OP_NOP57 =
0xe8- OP_NOP58 =
0xe9- OP_NOP59 =
0xea- OP_NOP60 =
0xeb- OP_NOP61 =
0xec- OP_NOP62 =
0xed- OP_NOP63 =
0xee- OP_NOP64 =
0xef- OP_NOP65 =
0xf0- OP_NOP66 =
0xf1- OP_NOP67 =
0xf2- OP_NOP68 =
0xf3- OP_NOP69 =
0xf4- OP_NOP70 =
0xf5- OP_NOP71 =
0xf6- OP_NOP72 =
0xf7- OP_NOP73 =
0xf8- OP_NOP74 =
0xf9- OP_NOP75 =
0xfa- OP_NOP76 =
0xfb- OP_NOP77 =
0xfc- OP_PUBKEYHASH =
Pseudo-words (not used in scripts)
0xfd- OP_PUBKEY =
0xfe- OP_INVALIDOPCODE =
0xff- NAME =
Reverse lookup: opcode byte → name string. Sorted so canonical names (OP_0, OP_1) win over aliases (OP_FALSE, OP_TRUE) regardless of Module#constants enumeration order.
constants .select { |c| c.to_s.start_with?('OP_') } .sort .each_with_object({}) { |c, h| h[const_get(c)] ||= c.to_s } .freeze
Class Method Summary collapse
-
.name_for(opcode) ⇒ String?
Look up the canonical name for an opcode byte.
Class Method Details
.name_for(opcode) ⇒ String?
Look up the canonical name for an opcode byte.
241 242 243 |
# File 'lib/bsv/script/opcodes.rb', line 241 def name_for(opcode) NAME[opcode] end |