tapyrus 0.2.7 → 0.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +37 -0
  3. data/.prettierignore +3 -0
  4. data/.prettierrc.yaml +3 -0
  5. data/.ruby-version +1 -1
  6. data/CODE_OF_CONDUCT.md +7 -7
  7. data/README.md +14 -17
  8. data/Rakefile +3 -3
  9. data/lib/openassets/marker_output.rb +0 -4
  10. data/lib/openassets/payload.rb +4 -10
  11. data/lib/openassets.rb +0 -2
  12. data/lib/schnorr/sign_to_contract.rb +51 -0
  13. data/lib/schnorr/signature.rb +3 -6
  14. data/lib/schnorr.rb +14 -9
  15. data/lib/tapyrus/base58.rb +7 -6
  16. data/lib/tapyrus/bip175.rb +78 -0
  17. data/lib/tapyrus/block.rb +1 -2
  18. data/lib/tapyrus/block_header.rb +15 -9
  19. data/lib/tapyrus/bloom_filter.rb +5 -3
  20. data/lib/tapyrus/chain_params.rb +1 -4
  21. data/lib/tapyrus/chainparams/dev.yml +3 -2
  22. data/lib/tapyrus/chainparams/prod.yml +3 -2
  23. data/lib/tapyrus/constants.rb +29 -23
  24. data/lib/tapyrus/errors.rb +1 -3
  25. data/lib/tapyrus/ext/ecdsa.rb +4 -4
  26. data/lib/tapyrus/ext/json_parser.rb +1 -4
  27. data/lib/tapyrus/ext.rb +1 -1
  28. data/lib/tapyrus/ext_key.rb +44 -32
  29. data/lib/tapyrus/key.rb +31 -35
  30. data/lib/tapyrus/key_path.rb +15 -12
  31. data/lib/tapyrus/logger.rb +20 -16
  32. data/lib/tapyrus/merkle_tree.rb +22 -20
  33. data/lib/tapyrus/message/addr.rb +1 -7
  34. data/lib/tapyrus/message/base.rb +0 -3
  35. data/lib/tapyrus/message/block.rb +2 -9
  36. data/lib/tapyrus/message/block_transaction_request.rb +3 -6
  37. data/lib/tapyrus/message/block_transactions.rb +2 -6
  38. data/lib/tapyrus/message/block_txn.rb +0 -4
  39. data/lib/tapyrus/message/cmpct_block.rb +1 -7
  40. data/lib/tapyrus/message/error.rb +1 -4
  41. data/lib/tapyrus/message/fee_filter.rb +1 -4
  42. data/lib/tapyrus/message/filter_add.rb +0 -4
  43. data/lib/tapyrus/message/filter_clear.rb +0 -4
  44. data/lib/tapyrus/message/filter_load.rb +2 -5
  45. data/lib/tapyrus/message/get_addr.rb +0 -4
  46. data/lib/tapyrus/message/get_block_txn.rb +0 -4
  47. data/lib/tapyrus/message/get_blocks.rb +0 -3
  48. data/lib/tapyrus/message/get_data.rb +1 -4
  49. data/lib/tapyrus/message/get_headers.rb +1 -3
  50. data/lib/tapyrus/message/header_and_short_ids.rb +3 -9
  51. data/lib/tapyrus/message/headers.rb +0 -4
  52. data/lib/tapyrus/message/headers_parser.rb +3 -8
  53. data/lib/tapyrus/message/inv.rb +1 -4
  54. data/lib/tapyrus/message/inventories_parser.rb +2 -7
  55. data/lib/tapyrus/message/inventory.rb +12 -5
  56. data/lib/tapyrus/message/mem_pool.rb +0 -4
  57. data/lib/tapyrus/message/merkle_block.rb +4 -9
  58. data/lib/tapyrus/message/network_addr.rb +7 -6
  59. data/lib/tapyrus/message/not_found.rb +0 -3
  60. data/lib/tapyrus/message/ping.rb +0 -3
  61. data/lib/tapyrus/message/pong.rb +0 -3
  62. data/lib/tapyrus/message/prefilled_tx.rb +0 -4
  63. data/lib/tapyrus/message/reject.rb +0 -3
  64. data/lib/tapyrus/message/send_cmpct.rb +1 -3
  65. data/lib/tapyrus/message/send_headers.rb +0 -3
  66. data/lib/tapyrus/message/tx.rb +0 -4
  67. data/lib/tapyrus/message/ver_ack.rb +1 -5
  68. data/lib/tapyrus/message/version.rb +2 -5
  69. data/lib/tapyrus/message.rb +14 -16
  70. data/lib/tapyrus/mnemonic.rb +17 -15
  71. data/lib/tapyrus/network/connection.rb +0 -3
  72. data/lib/tapyrus/network/message_handler.rb +61 -60
  73. data/lib/tapyrus/network/peer.rb +13 -12
  74. data/lib/tapyrus/network/peer_discovery.rb +10 -9
  75. data/lib/tapyrus/network/pool.rb +12 -12
  76. data/lib/tapyrus/network.rb +0 -2
  77. data/lib/tapyrus/node/cli.rb +12 -14
  78. data/lib/tapyrus/node/configuration.rb +1 -3
  79. data/lib/tapyrus/node/spv.rb +2 -3
  80. data/lib/tapyrus/node.rb +1 -1
  81. data/lib/tapyrus/opcodes.rb +9 -7
  82. data/lib/tapyrus/out_point.rb +5 -5
  83. data/lib/tapyrus/rpc/http_server.rb +21 -22
  84. data/lib/tapyrus/rpc/request_handler.rb +16 -21
  85. data/lib/tapyrus/rpc/tapyrus_core_client.rb +67 -25
  86. data/lib/tapyrus/rpc.rb +1 -0
  87. data/lib/tapyrus/script/color.rb +10 -0
  88. data/lib/tapyrus/script/multisig.rb +13 -12
  89. data/lib/tapyrus/script/script.rb +93 -88
  90. data/lib/tapyrus/script/script_error.rb +1 -4
  91. data/lib/tapyrus/script/script_interpreter.rb +439 -399
  92. data/lib/tapyrus/script/tx_checker.rb +20 -10
  93. data/lib/tapyrus/secp256k1/native.rb +14 -15
  94. data/lib/tapyrus/secp256k1/rfc6979.rb +7 -4
  95. data/lib/tapyrus/secp256k1/ruby.rb +10 -12
  96. data/lib/tapyrus/secp256k1.rb +0 -4
  97. data/lib/tapyrus/slip39/share.rb +41 -29
  98. data/lib/tapyrus/slip39/sss.rb +92 -49
  99. data/lib/tapyrus/slip39.rb +20 -5
  100. data/lib/tapyrus/store/chain_entry.rb +0 -4
  101. data/lib/tapyrus/store/db/level_db.rb +5 -9
  102. data/lib/tapyrus/store/db.rb +0 -2
  103. data/lib/tapyrus/store/spv_chain.rb +11 -17
  104. data/lib/tapyrus/store.rb +1 -3
  105. data/lib/tapyrus/tx.rb +45 -37
  106. data/lib/tapyrus/tx_builder.rb +160 -0
  107. data/lib/tapyrus/tx_in.rb +1 -6
  108. data/lib/tapyrus/tx_out.rb +2 -7
  109. data/lib/tapyrus/util.rb +7 -9
  110. data/lib/tapyrus/validation.rb +12 -11
  111. data/lib/tapyrus/version.rb +1 -1
  112. data/lib/tapyrus/wallet/account.rb +22 -18
  113. data/lib/tapyrus/wallet/base.rb +12 -9
  114. data/lib/tapyrus/wallet/db.rb +6 -9
  115. data/lib/tapyrus/wallet/master_key.rb +2 -4
  116. data/lib/tapyrus.rb +7 -22
  117. data/tapyrusrb.gemspec +13 -14
  118. metadata +26 -7
  119. data/.travis.yml +0 -14
data/lib/tapyrus/rpc.rb CHANGED
@@ -3,5 +3,6 @@ module Tapyrus
3
3
  autoload :HttpServer, 'tapyrus/rpc/http_server'
4
4
  autoload :RequestHandler, 'tapyrus/rpc/request_handler'
5
5
  autoload :TapyrusCoreClient, 'tapyrus/rpc/tapyrus_core_client'
6
+ autoload :Error, 'tapyrus/rpc/tapyrus_core_client'
6
7
  end
7
8
  end
@@ -24,6 +24,11 @@ module Tapyrus
24
24
  new(TokenTypes::NFT, Tapyrus.sha256(out_point.to_payload))
25
25
  end
26
26
 
27
+ # Return ColorIdentifier for native token(i.e TPC)
28
+ def self.default
29
+ new(TokenTypes::NONE, '0000000000000000000000000000000000000000000000000000000000000000'.htb)
30
+ end
31
+
27
32
  def to_payload
28
33
  [type, payload].pack('Ca*')
29
34
  end
@@ -51,6 +56,11 @@ module Tapyrus
51
56
  to_payload.eql?(other.to_payload)
52
57
  end
53
58
 
59
+ # Return true if the coin is native token(i.e TPC), otherwise false
60
+ def default?
61
+ self == ColorIdentifier.default
62
+ end
63
+
54
64
  private
55
65
 
56
66
  def initialize(type, payload)
@@ -1,11 +1,10 @@
1
1
  module Tapyrus
2
-
3
2
  # utility for multisig
4
3
  module Multisig
5
4
  include Tapyrus::Opcodes
6
5
 
7
6
  def self.prefix
8
- [OP_0].pack("C*")
7
+ [OP_0].pack('C*')
9
8
  end
10
9
 
11
10
  # generate input script sig spending a multisig output script.
@@ -23,7 +22,7 @@ module Tapyrus
23
22
  # multiple parties. Signatures must be in the same order as the
24
23
  # pubkeys in the output script being redeemed.
25
24
  def self.add_sig_to_multisig_script_sig(sig_to_add, script_sig, hash_type = SIGHASH_TYPE[:all])
26
- signature = sig_to_add + [hash_type].pack("C*")
25
+ signature = sig_to_add + [hash_type].pack('C*')
27
26
  offset = script_sig.empty? ? 0 : 1
28
27
  script_sig.insert(offset, Tapyrus::Script.pack_pushdata(signature))
29
28
  end
@@ -49,17 +48,19 @@ module Tapyrus
49
48
  pubkeys = redeem_script.get_multisig_pubkeys
50
49
 
51
50
  # find the pubkey for each signature by trying to verify it
52
- sigs = Hash[script.chunks[1...-1].map.with_index do |sig, idx|
53
- sig = sig.pushed_data
54
- pubkey = pubkeys.map do |key|
55
- Tapyrus::Key.new(pubkey: key.bth).verify(sig, sig_hash) ? key : nil
56
- end.compact.first
57
- raise "Key for signature ##{idx} not found in redeem script!" unless pubkey
58
- [pubkey, sig]
59
- end]
51
+ sigs =
52
+ Hash[
53
+ script.chunks[1...-1].map.with_index do |sig, idx|
54
+ sig = sig.pushed_data
55
+ pubkey =
56
+ pubkeys.map { |key| Tapyrus::Key.new(pubkey: key.bth).verify(sig, sig_hash) ? key : nil }.compact.first
57
+ raise "Key for signature ##{idx} not found in redeem script!" unless pubkey
58
+ [pubkey, sig]
59
+ end
60
+ ]
60
61
 
61
62
  prefix + pubkeys.map { |k| sigs[k] ? Tapyrus::Script.pack_pushdata(sigs[k]) : nil }.join +
62
63
  Tapyrus::Script.pack_pushdata(script.chunks[-1].pushed_data)
63
64
  end
64
65
  end
65
- end
66
+ end
@@ -2,7 +2,6 @@
2
2
  # https://github.com/lian/bitcoin-ruby/blob/master/COPYING
3
3
 
4
4
  module Tapyrus
5
-
6
5
  # tapyrus script
7
6
  class Script
8
7
  include Tapyrus::HexConverter
@@ -82,14 +81,12 @@ module Tapyrus
82
81
  def remove_color
83
82
  raise RuntimeError, 'Only cp2pkh and cp2sh can remove color' unless cp2pkh? or cp2sh?
84
83
 
85
- Tapyrus::Script.new.tap do |s|
86
- s.chunks = self.chunks[2..-1]
87
- end
84
+ Tapyrus::Script.new.tap { |s| s.chunks = self.chunks[2..-1] }
88
85
  end
89
86
 
90
87
  def get_multisig_pubkeys
91
88
  num = Tapyrus::Opcodes.opcode_to_small_int(chunks[-2].bth.to_i(16))
92
- (1..num).map{ |i| chunks[i].pushed_data }
89
+ (1..num).map { |i| chunks[i].pushed_data }
93
90
  end
94
91
 
95
92
  # generate m of n multisig script
@@ -104,14 +101,16 @@ module Tapyrus
104
101
  # generate script from string.
105
102
  def self.from_string(string)
106
103
  script = new
107
- string.split(' ').each do |v|
108
- opcode = Opcodes.name_to_opcode(v)
109
- if opcode
110
- script << (v =~ /^\d/ && Opcodes.small_int_to_opcode(v.ord) ? v.ord : opcode)
111
- else
112
- script << (v =~ /^[0-9]+$/ ? v.to_i : v)
104
+ string
105
+ .split(' ')
106
+ .each do |v|
107
+ opcode = Opcodes.name_to_opcode(v)
108
+ if opcode
109
+ script << (v =~ /^\d/ && Opcodes.small_int_to_opcode(v.ord) ? v.ord : opcode)
110
+ else
111
+ script << (v =~ /^[0-9]+$/ ? v.to_i : v)
112
+ end
113
113
  end
114
- end
115
114
  script
116
115
  end
117
116
 
@@ -150,19 +149,20 @@ module Tapyrus
150
149
  if opcode.pushdata?
151
150
  pushcode = opcode.ord
152
151
  packed_size = nil
153
- len = case pushcode
154
- when OP_PUSHDATA1
155
- packed_size = buf.read(1)
156
- packed_size.unpack('C').first
157
- when OP_PUSHDATA2
158
- packed_size = buf.read(2)
159
- packed_size.unpack('v').first
160
- when OP_PUSHDATA4
161
- packed_size = buf.read(4)
162
- packed_size.unpack('V').first
163
- else
164
- pushcode if pushcode < OP_PUSHDATA1
165
- end
152
+ len =
153
+ case pushcode
154
+ when OP_PUSHDATA1
155
+ packed_size = buf.read(1)
156
+ packed_size.unpack('C').first
157
+ when OP_PUSHDATA2
158
+ packed_size = buf.read(2)
159
+ packed_size.unpack('v').first
160
+ when OP_PUSHDATA4
161
+ packed_size = buf.read(4)
162
+ packed_size.unpack('V').first
163
+ else
164
+ pushcode if pushcode < OP_PUSHDATA1
165
+ end
166
166
  if len
167
167
  s.chunks << [len].pack('C') if buf.eof?
168
168
  unless buf.eof?
@@ -194,7 +194,7 @@ module Tapyrus
194
194
  return [p2sh_addr] if p2sh?
195
195
  return [cp2pkh_addr] if cp2pkh?
196
196
  return [cp2sh_addr] if cp2sh?
197
- return get_multisig_pubkeys.map{|pubkey| Tapyrus::Key.new(pubkey: pubkey.bth).to_p2pkh} if multisig?
197
+ return get_multisig_pubkeys.map { |pubkey| Tapyrus::Key.new(pubkey: pubkey.bth).to_p2pkh } if multisig?
198
198
  []
199
199
  end
200
200
 
@@ -206,8 +206,8 @@ module Tapyrus
206
206
  # whether this script is a P2PKH format script.
207
207
  def p2pkh?
208
208
  return false unless chunks.size == 5
209
- [OP_DUP, OP_HASH160, OP_EQUALVERIFY, OP_CHECKSIG] ==
210
- (chunks[0..1]+ chunks[3..4]).map(&:ord) && chunks[2].bytesize == 21
209
+ [OP_DUP, OP_HASH160, OP_EQUALVERIFY, OP_CHECKSIG] == (chunks[0..1] + chunks[3..4]).map(&:ord) &&
210
+ chunks[2].bytesize == 21
211
211
  end
212
212
 
213
213
  def p2sh?
@@ -228,8 +228,7 @@ module Tapyrus
228
228
  end
229
229
 
230
230
  def standard_op_return?
231
- op_return? && size <= MAX_OP_RETURN_RELAY &&
232
- (chunks.size == 1 || chunks[1].opcode <= OP_16)
231
+ op_return? && size <= MAX_OP_RETURN_RELAY && (chunks.size == 1 || chunks[1].opcode <= OP_16)
233
232
  end
234
233
 
235
234
  # Return whether this script is a CP2PKH format script or not.
@@ -239,8 +238,8 @@ module Tapyrus
239
238
  return false unless chunks[0].bytesize == 34
240
239
  return false unless Tapyrus::Color::ColorIdentifier.parse_from_payload(chunks[0].pushed_data)&.valid?
241
240
  return false unless chunks[1].ord == OP_COLOR
242
- [OP_DUP, OP_HASH160, OP_EQUALVERIFY, OP_CHECKSIG] ==
243
- (chunks[2..3]+ chunks[5..6]).map(&:ord) && chunks[4].bytesize == 21
241
+ [OP_DUP, OP_HASH160, OP_EQUALVERIFY, OP_CHECKSIG] == (chunks[2..3] + chunks[5..6]).map(&:ord) &&
242
+ chunks[4].bytesize == 21
244
243
  end
245
244
 
246
245
  # Return whether this script is a CP2SH format script or not.
@@ -252,7 +251,7 @@ module Tapyrus
252
251
  return false unless chunks[1].ord == OP_COLOR
253
252
  OP_HASH160 == chunks[2].ord && OP_EQUAL == chunks[4].ord && chunks[3].bytesize == 21
254
253
  end
255
-
254
+
256
255
  # Return whether this script represents colored coin.
257
256
  # @return [Boolean] true if this script is colored, otherwise false.
258
257
  def colored?
@@ -275,24 +274,25 @@ module Tapyrus
275
274
 
276
275
  # whether data push only script which dose not include other opcode
277
276
  def push_only?
278
- chunks.each do |c|
279
- return false if !c.opcode.nil? && c.opcode > OP_16
280
- end
277
+ chunks.each { |c| return false if !c.opcode.nil? && c.opcode > OP_16 }
281
278
  true
282
279
  end
283
280
 
284
281
  # get public keys in the stack.
285
282
  # @return[Array[String]] an array of the pubkeys with hex format.
286
283
  def get_pubkeys
287
- chunks.select{|c|c.pushdata? && [33, 65].include?(c.pushed_data.bytesize) && [2, 3, 4, 6, 7].include?(c.pushed_data[0].bth.to_i(16))}.map{|c|c.pushed_data.bth}
284
+ chunks
285
+ .select do |c|
286
+ c.pushdata? && [33, 65].include?(c.pushed_data.bytesize) &&
287
+ [2, 3, 4, 6, 7].include?(c.pushed_data[0].bth.to_i(16))
288
+ end
289
+ .map { |c| c.pushed_data.bth }
288
290
  end
289
291
 
290
292
  # returns the self payload. ScriptInterpreter does not use this.
291
293
  def to_script_code(skip_separator_index = 0)
292
294
  payload = to_payload
293
- if skip_separator_index > 0
294
- payload = subscript_codeseparator(skip_separator_index)
295
- end
295
+ payload = subscript_codeseparator(skip_separator_index) if skip_separator_index > 0
296
296
  Tapyrus.pack_var_string(payload)
297
297
  end
298
298
 
@@ -303,7 +303,7 @@ module Tapyrus
303
303
  elsif obj.is_a?(String)
304
304
  append_data(obj)
305
305
  elsif obj.is_a?(Array)
306
- obj.each { |o| self.<< o}
306
+ obj.each { |o| self.<< o }
307
307
  self
308
308
  end
309
309
  end
@@ -339,41 +339,44 @@ module Tapyrus
339
339
 
340
340
  # Check the item is in the chunk of the script.
341
341
  def include?(item)
342
- chunk_item = if item.is_a?(Integer)
343
- item.chr
344
- elsif item.is_a?(String)
345
- data = Encoding::ASCII_8BIT == item.encoding ? item : item.htb
346
- Tapyrus::Script.pack_pushdata(data)
347
- end
342
+ chunk_item =
343
+ if item.is_a?(Integer)
344
+ item.chr
345
+ elsif item.is_a?(String)
346
+ data = Encoding::ASCII_8BIT == item.encoding ? item : item.htb
347
+ Tapyrus::Script.pack_pushdata(data)
348
+ end
348
349
  return false unless chunk_item
349
350
  chunks.include?(chunk_item)
350
351
  end
351
352
 
352
353
  def to_s
353
- chunks.map { |c|
354
- case c
355
- when Integer
356
- opcode_to_name(c)
357
- when String
358
- return c if c.empty?
359
- if c.pushdata?
360
- v = Opcodes.opcode_to_small_int(c.ord)
361
- if v
362
- v
363
- else
364
- data = c.pushed_data
365
- if data.bytesize <= 4
366
- Script.decode_number(data.bth) # for scriptnum
354
+ chunks
355
+ .map do |c|
356
+ case c
357
+ when Integer
358
+ opcode_to_name(c)
359
+ when String
360
+ return c if c.empty?
361
+ if c.pushdata?
362
+ v = Opcodes.opcode_to_small_int(c.ord)
363
+ if v
364
+ v
367
365
  else
368
- data.bth
366
+ data = c.pushed_data
367
+ if data.bytesize <= 4
368
+ Script.decode_number(data.bth) # for scriptnum
369
+ else
370
+ data.bth
371
+ end
369
372
  end
373
+ else
374
+ opcode = Opcodes.opcode_to_name(c.ord)
375
+ opcode ? opcode : 'OP_UNKNOWN [error]'
370
376
  end
371
- else
372
- opcode = Opcodes.opcode_to_name(c.ord)
373
- opcode ? opcode : 'OP_UNKNOWN [error]'
374
377
  end
375
378
  end
376
- }.join(' ')
379
+ .join(' ')
377
380
  end
378
381
 
379
382
  # generate sha-256 hash for payload
@@ -431,17 +434,18 @@ module Tapyrus
431
434
  # binary +data+ convert pushdata which contains data length and append PUSHDATA opcode if necessary.
432
435
  def self.pack_pushdata(data)
433
436
  size = data.bytesize
434
- header = if size < OP_PUSHDATA1
435
- [size].pack('C')
436
- elsif size < 0xff
437
- [OP_PUSHDATA1, size].pack('CC')
438
- elsif size < 0xffff
439
- [OP_PUSHDATA2, size].pack('Cv')
440
- elsif size < 0xffffffff
441
- [OP_PUSHDATA4, size].pack('CV')
442
- else
443
- raise ArgumentError, 'data size is too big.'
444
- end
437
+ header =
438
+ if size < OP_PUSHDATA1
439
+ [size].pack('C')
440
+ elsif size < 0xff
441
+ [OP_PUSHDATA1, size].pack('CC')
442
+ elsif size < 0xffff
443
+ [OP_PUSHDATA2, size].pack('Cv')
444
+ elsif size < 0xffffffff
445
+ [OP_PUSHDATA4, size].pack('CV')
446
+ else
447
+ raise ArgumentError, 'data size is too big.'
448
+ end
445
449
  header + data
446
450
  end
447
451
 
@@ -465,8 +469,12 @@ module Tapyrus
465
469
  if chunk == sub_chunk
466
470
  buf << chunk
467
471
  i += 1
468
- (i = 0; buf.clear) if i == subscript.chunks.size # matched the whole subscript
469
- else # matched the part of head
472
+ (
473
+ i = 0
474
+ buf.clear
475
+ ) if i == subscript.chunks.size # matched the whole subscript
476
+ else
477
+ # matched the part of head
470
478
  i = 0
471
479
  tmp = chunk.dup
472
480
  tmp.slice!(sub_chunk)
@@ -488,7 +496,7 @@ module Tapyrus
488
496
 
489
497
  # remove all occurences of opcode. Typically it's OP_CODESEPARATOR.
490
498
  def delete_opcode(opcode)
491
- @chunks = chunks.select{|chunk| chunk.ord != opcode}
499
+ @chunks = chunks.select { |chunk| chunk.ord != opcode }
492
500
  self
493
501
  end
494
502
 
@@ -496,12 +504,10 @@ module Tapyrus
496
504
  def subscript_codeseparator(separator_index)
497
505
  buf = []
498
506
  process_separator_index = 0
499
- chunks.each{|chunk|
507
+ chunks.each do |chunk|
500
508
  buf << chunk if process_separator_index == separator_index
501
- if chunk.ord == OP_CODESEPARATOR && process_separator_index < separator_index
502
- process_separator_index += 1
503
- end
504
- }
509
+ process_separator_index += 1 if chunk.ord == OP_CODESEPARATOR && process_separator_index < separator_index
510
+ end
505
511
  buf.join
506
512
  end
507
513
 
@@ -518,10 +524,10 @@ module Tapyrus
518
524
  end
519
525
 
520
526
  def to_h
521
- h = {asm: to_s, hex: to_hex, type: type}
527
+ h = { asm: to_s, hex: to_hex, type: type }
522
528
  addrs = addresses
523
529
  unless addrs.empty?
524
- h[:req_sigs] = multisig? ? Tapyrus::Opcodes.opcode_to_small_int(chunks[0].bth.to_i(16)) :addrs.size
530
+ h[:req_sigs] = multisig? ? Tapyrus::Opcodes.opcode_to_small_int(chunks[0].bth.to_i(16)) : addrs.size
525
531
  h[:addresses] = addrs
526
532
  end
527
533
  h
@@ -568,5 +574,4 @@ module Tapyrus
568
574
  Tapyrus.encode_base58_address(color_id + hash160, Tapyrus.chain_params.cp2sh_version)
569
575
  end
570
576
  end
571
-
572
577
  end
@@ -1,8 +1,6 @@
1
1
  module Tapyrus
2
-
3
2
  # tapyrus script error
4
3
  class ScriptError < Exception
5
-
6
4
  attr_accessor :code
7
5
  attr_accessor :extra_msg
8
6
 
@@ -100,6 +98,5 @@ module Tapyrus
100
98
  def self.name_to_code(name)
101
99
  NAME_MAP[name]
102
100
  end
103
-
104
101
  end
105
- end
102
+ end