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
opcode
is 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 |