bitcoinrb 1.12.0 → 1.13.0

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/bitcoinrb.gemspec +1 -6
  4. data/lib/bitcoin/bip321_uri.rb +3 -6
  5. data/lib/bitcoin/bip324/fs_chacha20.rb +4 -6
  6. data/lib/bitcoin/bip324/fs_chacha_poly1305.rb +20 -17
  7. data/lib/bitcoin/bip324.rb +3 -1
  8. data/lib/bitcoin/descriptor/checksum.rb +6 -2
  9. data/lib/bitcoin/descriptor/expression.rb +2 -2
  10. data/lib/bitcoin/descriptor/sp.rb +219 -0
  11. data/lib/bitcoin/descriptor.rb +20 -0
  12. data/lib/bitcoin/ext_key.rb +11 -7
  13. data/lib/bitcoin/key.rb +1 -1
  14. data/lib/bitcoin/message/cf_parser.rb +2 -2
  15. data/lib/bitcoin/message/fee_filter.rb +2 -2
  16. data/lib/bitcoin/message/header_and_short_ids.rb +4 -4
  17. data/lib/bitcoin/message/inventory.rb +1 -1
  18. data/lib/bitcoin/message/network_addr.rb +7 -3
  19. data/lib/bitcoin/message/ping.rb +5 -3
  20. data/lib/bitcoin/message/pong.rb +2 -2
  21. data/lib/bitcoin/message/send_cmpct.rb +2 -2
  22. data/lib/bitcoin/message/version.rb +4 -4
  23. data/lib/bitcoin/message.rb +12 -2
  24. data/lib/bitcoin/message_sign.rb +98 -38
  25. data/lib/bitcoin/mnemonic.rb +9 -4
  26. data/lib/bitcoin/psbt/input.rb +51 -33
  27. data/lib/bitcoin/psbt/key_origin_info.rb +2 -2
  28. data/lib/bitcoin/psbt/output.rb +9 -5
  29. data/lib/bitcoin/psbt/tx.rb +16 -10
  30. data/lib/bitcoin/psbt.rb +1 -1
  31. data/lib/bitcoin/rpc.rb +0 -2
  32. data/lib/bitcoin/script/script.rb +14 -4
  33. data/lib/bitcoin/secp256k1/rfc6979.rb +6 -3
  34. data/lib/bitcoin/sighash_generator.rb +2 -2
  35. data/lib/bitcoin/silent_payment/output.rb +46 -0
  36. data/lib/bitcoin/silent_payment.rb +113 -12
  37. data/lib/bitcoin/taproot/control_block.rb +1 -0
  38. data/lib/bitcoin/tx.rb +8 -6
  39. data/lib/bitcoin/tx_out.rb +2 -2
  40. data/lib/bitcoin/util.rb +5 -5
  41. data/lib/bitcoin/version.rb +1 -1
  42. data/lib/bitcoin/wallet/account.rb +2 -2
  43. data/lib/bitcoin/wallet/db.rb +3 -3
  44. data/lib/bitcoin/wallet/master_key.rb +2 -2
  45. data/lib/bitcoin/wallet/utxo.rb +2 -2
  46. data/lib/bitcoin.rb +1 -6
  47. metadata +18 -108
  48. data/exe/bitcoinrb-cli +0 -5
  49. data/exe/bitcoinrbd +0 -46
  50. data/lib/bitcoin/network/connection.rb +0 -73
  51. data/lib/bitcoin/network/message_handler.rb +0 -243
  52. data/lib/bitcoin/network/peer.rb +0 -228
  53. data/lib/bitcoin/network/peer_discovery.rb +0 -42
  54. data/lib/bitcoin/network/pool.rb +0 -135
  55. data/lib/bitcoin/network.rb +0 -13
  56. data/lib/bitcoin/node/cli.rb +0 -122
  57. data/lib/bitcoin/node/configuration.rb +0 -40
  58. data/lib/bitcoin/node/spv.rb +0 -87
  59. data/lib/bitcoin/node.rb +0 -7
  60. data/lib/bitcoin/rpc/http_server.rb +0 -84
  61. data/lib/bitcoin/rpc/request_handler.rb +0 -150
  62. data/lib/bitcoin/store/chain_entry.rb +0 -68
  63. data/lib/bitcoin/store/db/level_db.rb +0 -98
  64. data/lib/bitcoin/store/db.rb +0 -9
  65. data/lib/bitcoin/store/spv_chain.rb +0 -101
  66. data/lib/bitcoin/store/utxo_db.rb +0 -226
  67. data/lib/bitcoin/store.rb +0 -12
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitcoinrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
@@ -23,20 +23,6 @@ dependencies:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
25
  version: 0.5.1
26
- - !ruby/object:Gem::Dependency
27
- name: eventmachine
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: '0'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- version: '0'
40
26
  - !ruby/object:Gem::Dependency
41
27
  name: murmurhash3
42
28
  requirement: !ruby/object:Gem::Requirement
@@ -65,62 +51,6 @@ dependencies:
65
51
  - - ">="
66
52
  - !ruby/object:Gem::Version
67
53
  version: 1.5.0
68
- - !ruby/object:Gem::Dependency
69
- name: daemon-spawn
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- type: :runtime
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- version: '0'
82
- - !ruby/object:Gem::Dependency
83
- name: thor
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: '0'
89
- type: :runtime
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- - !ruby/object:Gem::Dependency
97
- name: eventmachine_httpserver
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
- type: :runtime
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: iniparse
112
- requirement: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: '0'
117
- type: :runtime
118
- prerelease: false
119
- version_requirements: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
54
  - !ruby/object:Gem::Dependency
125
55
  name: siphash
126
56
  requirement: !ruby/object:Gem::Requirement
@@ -177,20 +107,6 @@ dependencies:
177
107
  - - "~>"
178
108
  - !ruby/object:Gem::Version
179
109
  version: 0.2.0
180
- - !ruby/object:Gem::Dependency
181
- name: observer
182
- requirement: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - "~>"
185
- - !ruby/object:Gem::Version
186
- version: 0.1.2
187
- type: :runtime
188
- prerelease: false
189
- version_requirements: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - "~>"
192
- - !ruby/object:Gem::Version
193
- version: 0.1.2
194
110
  - !ruby/object:Gem::Dependency
195
111
  name: secp256k1rb
196
112
  requirement: !ruby/object:Gem::Requirement
@@ -233,12 +149,24 @@ dependencies:
233
149
  - - '='
234
150
  - !ruby/object:Gem::Version
235
151
  version: 0.3.0
152
+ - !ruby/object:Gem::Dependency
153
+ name: dnsruby
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - '='
157
+ - !ruby/object:Gem::Version
158
+ version: 1.73.0
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - '='
164
+ - !ruby/object:Gem::Version
165
+ version: 1.73.0
236
166
  description: The implementation of Bitcoin Protocol for Ruby.
237
167
  email:
238
168
  - azuchi@chaintope.com
239
- executables:
240
- - bitcoinrb-cli
241
- - bitcoinrbd
169
+ executables: []
242
170
  extensions: []
243
171
  extra_rdoc_files: []
244
172
  files:
@@ -257,8 +185,6 @@ files:
257
185
  - bin/setup
258
186
  - bitcoinrb.conf.sample
259
187
  - bitcoinrb.gemspec
260
- - exe/bitcoinrb-cli
261
- - exe/bitcoinrbd
262
188
  - lib/bitcoin.rb
263
189
  - lib/bitcoin/base58.rb
264
190
  - lib/bitcoin/bip321_uri.rb
@@ -297,6 +223,7 @@ files:
297
223
  - lib/bitcoin/descriptor/sh.rb
298
224
  - lib/bitcoin/descriptor/sorted_multi.rb
299
225
  - lib/bitcoin/descriptor/sorted_multi_a.rb
226
+ - lib/bitcoin/descriptor/sp.rb
300
227
  - lib/bitcoin/descriptor/tr.rb
301
228
  - lib/bitcoin/descriptor/wpkh.rb
302
229
  - lib/bitcoin/descriptor/wsh.rb
@@ -367,16 +294,6 @@ files:
367
294
  - lib/bitcoin/mnemonic/wordlist/italian.txt
368
295
  - lib/bitcoin/mnemonic/wordlist/japanese.txt
369
296
  - lib/bitcoin/mnemonic/wordlist/spanish.txt
370
- - lib/bitcoin/network.rb
371
- - lib/bitcoin/network/connection.rb
372
- - lib/bitcoin/network/message_handler.rb
373
- - lib/bitcoin/network/peer.rb
374
- - lib/bitcoin/network/peer_discovery.rb
375
- - lib/bitcoin/network/pool.rb
376
- - lib/bitcoin/node.rb
377
- - lib/bitcoin/node/cli.rb
378
- - lib/bitcoin/node/configuration.rb
379
- - lib/bitcoin/node/spv.rb
380
297
  - lib/bitcoin/opcodes.rb
381
298
  - lib/bitcoin/out_point.rb
382
299
  - lib/bitcoin/partial_tree.rb
@@ -390,8 +307,6 @@ files:
390
307
  - lib/bitcoin/psbt/tx.rb
391
308
  - lib/bitcoin/rpc.rb
392
309
  - lib/bitcoin/rpc/bitcoin_core_client.rb
393
- - lib/bitcoin/rpc/http_server.rb
394
- - lib/bitcoin/rpc/request_handler.rb
395
310
  - lib/bitcoin/script/multisig.rb
396
311
  - lib/bitcoin/script/script.rb
397
312
  - lib/bitcoin/script/script_error.rb
@@ -404,16 +319,11 @@ files:
404
319
  - lib/bitcoin/secp256k1/ruby.rb
405
320
  - lib/bitcoin/sighash_generator.rb
406
321
  - lib/bitcoin/silent_payment.rb
322
+ - lib/bitcoin/silent_payment/output.rb
407
323
  - lib/bitcoin/slip39.rb
408
324
  - lib/bitcoin/slip39/share.rb
409
325
  - lib/bitcoin/slip39/sss.rb
410
326
  - lib/bitcoin/slip39/wordlist/english.txt
411
- - lib/bitcoin/store.rb
412
- - lib/bitcoin/store/chain_entry.rb
413
- - lib/bitcoin/store/db.rb
414
- - lib/bitcoin/store/db/level_db.rb
415
- - lib/bitcoin/store/spv_chain.rb
416
- - lib/bitcoin/store/utxo_db.rb
417
327
  - lib/bitcoin/taproot.rb
418
328
  - lib/bitcoin/taproot/control_block.rb
419
329
  - lib/bitcoin/taproot/custom_depth_builder.rb
data/exe/bitcoinrb-cli DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bitcoin'
4
-
5
- Bitcoin::Node::CLI.start(ARGV)
data/exe/bitcoinrbd DELETED
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'thor'
3
- require 'bitcoin'
4
- require 'daemon_spawn'
5
-
6
- class BitcoinDaemon < DaemonSpawn::Base
7
-
8
- def start(args)
9
- puts "Bitcoinrb daemon start : #{Time.now}"
10
- conf = Bitcoin::Node::Configuration.new(network: args.first[:network])
11
- node = Bitcoin::Node::SPV.new(conf)
12
- node.run
13
- end
14
-
15
- def stop
16
- puts "Stopping Bitcoinrb daemon : #{Time.now}"
17
- node.shutdown
18
- end
19
-
20
- end
21
-
22
- class Bitcoinrbd < Thor
23
-
24
- class_option :network, aliases: '-n', default: :mainnet
25
-
26
- desc 'start', 'start bitcoinrb daemon.'
27
- def start
28
- network = options['network'] ? options['network'].to_sym : :mainnet
29
- Bitcoin.chain_params = network
30
- FileUtils.mkdir_p(Bitcoin.base_dir)
31
- execute_daemon(['start', network: network])
32
- end
33
-
34
- private
35
-
36
- def execute_daemon(cmd_args)
37
- BitcoinDaemon.spawn!({working_dir: Bitcoin.base_dir,
38
- log_file: "#{Bitcoin.base_dir}/log/bitcoinrbd.log",
39
- pid_file: "#{Bitcoin.base_dir}/bitcoinrbd.pid",
40
- sync_log: true,
41
- singleton: true}, cmd_args)
42
- end
43
-
44
- end
45
-
46
- Bitcoinrbd.start(ARGV)
@@ -1,73 +0,0 @@
1
- module Bitcoin
2
-
3
- module Network
4
-
5
- # Basic Bitcoin P2P connection class
6
- class Connection < EM::Connection
7
-
8
- include MessageHandler
9
-
10
- attr_reader :peer, :logger
11
-
12
- # remote peer version.
13
- attr_accessor :version
14
-
15
- # if true, this peer send new block announcements using a headers message rather than an inv message.
16
- attr_accessor :sendheaders
17
-
18
- # minimum fee(in satoshis per kilobyte) for relay tx
19
- attr_accessor :fee_rate
20
-
21
- def initialize(peer)
22
- @peer = peer
23
- @logger = peer.logger
24
- @sendheaders = false
25
- @attr_accessor = 0
26
- @message = ''
27
- self.pending_connect_timeout = 5.0
28
- end
29
-
30
- def post_init
31
- logger.info "connected. #{addr}"
32
- peer.conn_time = Time.now.to_i
33
- begin_handshake
34
- end
35
-
36
- # handle receiving data from remote node.
37
- def receive_data(data)
38
- handle(data)
39
- end
40
-
41
- def post_handshake
42
- peer.post_handshake
43
- end
44
-
45
- def addr
46
- peer.addr
47
- end
48
-
49
- # close network connection.
50
- def close(msg = '')
51
- logger.info "close connection with #{addr}. #{msg}"
52
- close_connection_after_writing
53
- end
54
-
55
- def handle_error(e)
56
- peer.handle_error(e)
57
- end
58
-
59
- def unbind
60
- logger.info "unbind. #{addr}"
61
- peer.unbind
62
- end
63
-
64
- private
65
-
66
- # start handshake
67
- def begin_handshake
68
- logger.info "begin handshake with #{addr}"
69
- send_message(peer.local_version)
70
- end
71
- end
72
- end
73
- end
@@ -1,243 +0,0 @@
1
- module Bitcoin
2
- module Network
3
-
4
- # P2P message handler used by peer connection class.
5
- module MessageHandler
6
-
7
- using Bitcoin::Ext::ObjectExt
8
-
9
- # handle p2p message.
10
- def handle(message)
11
- peer.last_recv = Time.now.to_i
12
- peer.bytes_recv += message.bytesize
13
- begin
14
- parse(message)
15
- rescue Bitcoin::Message::Error => e
16
- logger.error("invalid header magic. #{e.message}")
17
- close
18
- end
19
- end
20
-
21
- def parse(message)
22
- @message += message
23
- command, payload, rest = parse_header
24
- return unless command
25
-
26
- defer_handle_command(command, payload)
27
- @message = ""
28
- parse(rest) if rest && rest.bytesize > 0
29
- end
30
-
31
- def parse_header
32
- head_magic = Bitcoin.chain_params.magic_head
33
- return if @message.nil? || @message.size < MESSAGE_HEADER_SIZE
34
-
35
- magic, command, length, checksum = @message.unpack('a4A12Va4')
36
- raise Bitcoin::Message::Error, "invalid header magic. #{magic.bth}" unless magic.bth == head_magic
37
-
38
- payload = @message[MESSAGE_HEADER_SIZE...(MESSAGE_HEADER_SIZE + length)]
39
- return if payload.size < length
40
- raise Bitcoin::Message::Error, "header checksum mismatch. #{checksum.bth}" unless Bitcoin.double_sha256(payload)[0...4] == checksum
41
-
42
- rest = @message[(MESSAGE_HEADER_SIZE + length)..-1]
43
- [command, payload, rest]
44
- end
45
-
46
- # handle command with EM#defer
47
- def defer_handle_command(command, payload)
48
- operation = proc {handle_command(command, payload)}
49
- callback = proc{|result|}
50
- errback = proc{|e|
51
- logger.error("error occurred. #{e.message}")
52
- logger.error(e.backtrace)
53
- peer.handle_error(e)
54
- }
55
- EM.defer(operation, callback, errback)
56
- end
57
-
58
- def handle_command(command, payload)
59
- logger.info("[#{addr}] process command #{command}.")
60
- case command
61
- when Bitcoin::Message::Version::COMMAND
62
- on_version(Bitcoin::Message::Version.parse_from_payload(payload))
63
- when Bitcoin::Message::VerAck::COMMAND
64
- on_ver_ack
65
- when Bitcoin::Message::GetAddr::COMMAND
66
- on_get_addr
67
- when Bitcoin::Message::Addr::COMMAND
68
- on_addr(Bitcoin::Message::Addr.parse_from_payload(payload))
69
- when Bitcoin::Message::SendHeaders::COMMAND
70
- on_send_headers
71
- when Bitcoin::Message::FeeFilter::COMMAND
72
- on_fee_filter(Bitcoin::Message::FeeFilter.parse_from_payload(payload))
73
- when Bitcoin::Message::Ping::COMMAND
74
- on_ping(Bitcoin::Message::Ping.parse_from_payload(payload))
75
- when Bitcoin::Message::Pong::COMMAND
76
- on_pong(Bitcoin::Message::Pong.parse_from_payload(payload))
77
- when Bitcoin::Message::GetHeaders::COMMAND
78
- on_get_headers(Bitcoin::Message::GetHeaders.parse_from_payload(payload))
79
- when Bitcoin::Message::Headers::COMMAND
80
- on_headers(Bitcoin::Message::Headers.parse_from_payload(payload))
81
- when Bitcoin::Message::Block::COMMAND
82
- on_block(Bitcoin::Message::Block.parse_from_payload(payload))
83
- when Bitcoin::Message::Tx::COMMAND
84
- on_tx(Bitcoin::Message::Tx.parse_from_payload(payload))
85
- when Bitcoin::Message::NotFound::COMMAND
86
- on_not_found(Bitcoin::Message::NotFound.parse_from_payload(payload))
87
- when Bitcoin::Message::MemPool::COMMAND
88
- on_mem_pool
89
- when Bitcoin::Message::Reject::COMMAND
90
- on_reject(Bitcoin::Message::Reject.parse_from_payload(payload))
91
- when Bitcoin::Message::SendCmpct::COMMAND
92
- on_send_cmpct(Bitcoin::Message::SendCmpct.parse_from_payload(payload))
93
- when Bitcoin::Message::Inv::COMMAND
94
- on_inv(Bitcoin::Message::Inv.parse_from_payload(payload))
95
- when Bitcoin::Message::MerkleBlock::COMMAND
96
- on_merkle_block(Bitcoin::Message::MerkleBlock.parse_from_payload(payload))
97
- when Bitcoin::Message::CmpctBlock::COMMAND
98
- on_cmpct_block(Bitcoin::Message::CmpctBlock.parse_from_payload(payload))
99
- when Bitcoin::Message::GetData::COMMAND
100
- on_get_data(Bitcoin::Message::GetData.parse_from_payload(payload))
101
- else
102
- logger.warn("unsupported command received. command: #{command}, payload: #{payload.bth}")
103
- close("with command #{command}")
104
- end
105
- end
106
-
107
- def send_message(msg)
108
- logger.info "send message #{msg.class::COMMAND}"
109
- pkt = msg.to_pkt
110
- peer.last_send = Time.now.to_i
111
- peer.bytes_sent = pkt.bytesize
112
- send_data(pkt)
113
- end
114
-
115
- def handshake_done
116
- return unless @incomming_handshake && @outgoing_handshake
117
- logger.info 'handshake finished.'
118
- @connected = true
119
- post_handshake
120
- end
121
-
122
- def on_version(version)
123
- logger.info("receive version message. #{version.build_json}")
124
- @version = version
125
- send_message(Bitcoin::Message::VerAck.new)
126
- @incomming_handshake = true
127
- handshake_done
128
- end
129
-
130
- def on_ver_ack
131
- logger.info('receive verack message.')
132
- @outgoing_handshake = true
133
- handshake_done
134
- end
135
-
136
- def on_get_addr
137
- logger.info('receive getaddr message.')
138
- peer.send_addrs
139
- end
140
-
141
- def on_addr(addr)
142
- logger.info("receive addr message. #{addr.build_json}")
143
- # TODO
144
- end
145
-
146
- def on_send_headers
147
- logger.info('receive sendheaders message.')
148
- @sendheaders = true
149
- end
150
-
151
- def on_fee_filter(fee_filter)
152
- logger.info("receive feefilter message. #{fee_filter.build_json}")
153
- @fee_rate = fee_filter.fee_rate
154
- end
155
-
156
- def on_ping(ping)
157
- logger.info("receive ping message. #{ping.build_json}")
158
- send_message(ping.to_response)
159
- end
160
-
161
- def on_pong(pong)
162
- logger.info("receive pong message. #{pong.build_json}")
163
- if pong.nonce == peer.last_ping_nonce
164
- peer.last_ping_nonce = nil
165
- peer.last_pong = Time.now.to_i
166
- else
167
- logger.debug "The remote peer sent the wrong nonce (#{pong.nonce})."
168
- end
169
- end
170
-
171
- def on_get_headers(headers)
172
- logger.info('receive getheaders message.')
173
- # TODO
174
- end
175
-
176
- def on_headers(headers)
177
- logger.info('receive headers message.')
178
- peer.handle_headers(headers)
179
- end
180
-
181
- def on_block(block)
182
- logger.info('receive block message.')
183
- # TODO
184
- end
185
-
186
- def on_tx(tx)
187
- logger.info("receive tx message. #{tx.build_json}")
188
- peer.handle_tx(tx)
189
- end
190
-
191
- def on_not_found(not_found)
192
- logger.info("receive notfound message. #{not_found.build_json}")
193
- # TODO
194
- end
195
-
196
- def on_mem_pool
197
- logger.info('receive mempool message.')
198
- # TODO return mempool tx
199
- end
200
-
201
- def on_reject(reject)
202
- logger.warn("receive reject message. #{reject.build_json}")
203
- # TODO
204
- end
205
-
206
- def on_send_cmpct(cmpct)
207
- logger.info("receive sendcmpct message. #{cmpct.build_json}")
208
- # TODO if mode is high and version is 1, relay block with cmpctblock message
209
- end
210
-
211
- def on_inv(inv)
212
- logger.info('receive inv message.')
213
- blocks = []
214
- txs = []
215
- inv.inventories.each do |i|
216
- case i.identifier
217
- when Bitcoin::Message::Inventory::MSG_TX
218
- txs << i.hash
219
- when Bitcoin::Message::Inventory::MSG_BLOCK
220
- blocks << i.hash
221
- else
222
- logger.warn("[#{addr}] peer sent unknown inv type: #{i.identifier}")
223
- end
224
- end
225
- logger.info("receive block= #{blocks.size}, txs: #{txs.size}")
226
- peer.handle_block_inv(blocks) unless blocks.empty?
227
- end
228
-
229
- def on_merkle_block(merkle_block)
230
- logger.info("receive merkle block message. #{merkle_block.build_json}")
231
- peer.handle_merkle_block(merkle_block)
232
- end
233
-
234
- def on_cmpct_block(cmpct_block)
235
- logger.info("receive cmpct_block message. #{cmpct_block.build_json}")
236
- end
237
-
238
- def on_get_data(get_data)
239
- logger.info("receive get data message. #{get_data.build_json}")
240
- end
241
- end
242
- end
243
- end