Module: Bitcoin::Opcodes
- Included in:
- Descriptor, Descriptor::MultiA, Descriptor::Pk, Descriptor::RawTr, Multisig, Script, ScriptInterpreter, Taproot::SimpleBuilder
- Defined in:
- lib/bitcoin/opcodes.rb
Overview
Constant Summary collapse
- OP_0 =
0x00- OP_1 =
0x51- 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_PUSHDATA1 =
0x4c- OP_PUSHDATA2 =
0x4d- OP_PUSHDATA4 =
0x4e- OP_1NEGATE =
0x4f- OP_NOP =
0x61- OP_IF =
0x63- OP_NOTIF =
0x64- OP_ELSE =
0x67- OP_ENDIF =
0x68- OP_VERIFY =
0x69- OP_RETURN =
0x6a- OP_TOALTSTACK =
0x6b- OP_FROMALTSTACK =
0x6c- 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_2DROP =
0x6d- OP_2DUP =
0x6e- OP_3DUP =
0x6f- OP_2OVER =
0x70- OP_2ROT =
0x71- OP_2SWAP =
0x72- OP_CAT =
0x7e- OP_SUBSTR =
disabled
0x7f- OP_LEFT =
disabled
0x80- OP_RIGHT =
disabled
0x81- OP_SIZE =
disabled
0x82- OP_INVERT =
0x83- OP_AND =
disabled
0x84- OP_OR =
disabled
0x85- OP_XOR =
disabled
0x86- OP_EQUAL =
disabled
0x87- OP_EQUALVERIFY =
0x88- OP_1ADD =
0x8b- OP_1SUB =
0x8c- OP_2MUL =
disabled
0x8d- OP_2DIV =
disabled
0x8e- OP_NEGATE =
0x8f- OP_ABS =
0x90- OP_NOT =
0x91- OP_0NOTEQUAL =
0x92- OP_ADD =
0x93- OP_SUB =
0x94- OP_MUL =
disabled
0x95- OP_DIV =
disabled
0x96- OP_MOD =
disabled
0x97- OP_LSHIFT =
disabled
0x98- OP_RSHIFT =
disabled
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 =
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_NOP2 =
OP_CHECKLOCKTIMEVERIFY = OP_CLTV = 0xb1
- OP_NOP3 =
OP_CHECKSEQUENCEVERIFY = OP_CSV = 0xb2
- OP_RESERVED =
0x50- OP_VER =
0x62- OP_VERIF =
0x65- OP_VERNOTIF =
0x66- OP_RESERVED1 =
0x89- OP_RESERVED2 =
0x8a- OP_NOP1 =
0xb0- OP_NOP4 =
0xb3- OP_NOP5 =
0xb4- OP_NOP6 =
0xb5- OP_NOP7 =
0xb6- OP_NOP8 =
0xb7- OP_NOP9 =
0xb8- OP_NOP10 =
0xb9- OP_CHECKSIGADD =
BIP 342 opcodes (Tapscript)
0xba- OP_PUBKEYHASH =
0xfd- OP_PUBKEY =
0xfe- OP_INVALIDOPCODE =
0xff- DUPLICATE_KEY =
[:OP_NOP2, :OP_NOP3]
- OPCODES_MAP =
- NAME_MAP =
- OP_SUCCESSES =
[0x50, 0x62, 0x89, 0x8a, 0x8d, 0x8e, (0x7e..0x81).to_a, (0x83..0x86).to_a, (0x95..0x99).to_a, (0xbb..0xfe).to_a].flatten
Class Method Summary collapse
-
.defined?(opcode, allow_success = false) ⇒ Boolean
whether opcode is predefined opcode.
- .name_to_opcode(name) ⇒ Object
-
.op_success?(opcode) ⇒ Boolean
Check whether
opcodeis OP_SUCCESSx or not?. - .opcode_to_name(opcode) ⇒ Object
- .opcode_to_small_int(opcode) ⇒ Object
- .small_int_to_opcode(int) ⇒ Object
Class Method Details
.defined?(opcode, allow_success = false) ⇒ Boolean
whether opcode is predefined opcode
164 165 166 167 |
# File 'lib/bitcoin/opcodes.rb', line 164 def defined?(opcode, allow_success = false) return true if allow_success && op_success?(opcode) !opcode_to_name(opcode).nil? end |
.name_to_opcode(name) ⇒ Object
158 159 160 161 |
# File 'lib/bitcoin/opcodes.rb', line 158 def name_to_opcode(name) return NAME_MAP['OP_' + name] if name =~ /^\d/ && name.to_i < 17 && name.to_i > -1 NAME_MAP[name] end |
.op_success?(opcode) ⇒ Boolean
Check whether opcode is OP_SUCCESSx or not?
186 187 188 |
# File 'lib/bitcoin/opcodes.rb', line 186 def op_success?(opcode) OP_SUCCESSES.include?(opcode) end |
.opcode_to_name(opcode) ⇒ Object
153 154 155 156 |
# File 'lib/bitcoin/opcodes.rb', line 153 def opcode_to_name(opcode) return OPCODES_MAP[opcode].delete('OP_') if opcode == OP_0 || (opcode <= OP_16 && opcode >= OP_1) OPCODES_MAP[opcode] end |
.opcode_to_small_int(opcode) ⇒ Object
176 177 178 179 180 181 |
# File 'lib/bitcoin/opcodes.rb', line 176 def opcode_to_small_int(opcode) return 0 if opcode == ''.b || opcode == OP_0 return -1 if opcode == OP_1NEGATE return opcode - (OP_1 - 1) if opcode >= OP_1 && opcode <= OP_16 nil end |
.small_int_to_opcode(int) ⇒ Object
169 170 171 172 173 174 |
# File 'lib/bitcoin/opcodes.rb', line 169 def small_int_to_opcode(int) return OP_0 if int == 0 return OP_1NEGATE if int == -1 return OP_1 + (int - 1) if int >= 1 && int <= 16 nil end |