Class: Bitcoin::Grpc::Server
- Inherits:
-
Blockchain::Service
- Object
- Blockchain::Service
- Bitcoin::Grpc::Server
- Defined in:
- lib/bitcoin/grpc/server.rb
Instance Attribute Summary collapse
-
#asset_handler ⇒ Object
readonly
Returns the value of attribute asset_handler.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#publisher ⇒ Object
readonly
Returns the value of attribute publisher.
-
#spv ⇒ Object
readonly
Returns the value of attribute spv.
-
#utxo_handler ⇒ Object
readonly
Returns the value of attribute utxo_handler.
Class Method Summary collapse
Instance Method Summary collapse
- #events(requests) ⇒ Object
- #get_blockchain_info(request, call) ⇒ Object
-
#initialize(spv, publisher, utxo_handler, asset_handler) ⇒ Server
constructor
A new instance of Server.
- #watch_token(request, call) ⇒ Object
- #watch_tx_confirmed(request, call) ⇒ Object
- #watch_utxo(request, call) ⇒ Object
- #watch_utxo_spent(request, call) ⇒ Object
Constructor Details
#initialize(spv, publisher, utxo_handler, asset_handler) ⇒ Server
Returns a new instance of Server.
14 15 16 17 18 19 20 |
# File 'lib/bitcoin/grpc/server.rb', line 14 def initialize(spv, publisher, utxo_handler, asset_handler) @spv = spv @publisher = publisher @utxo_handler = utxo_handler @asset_handler = asset_handler @logger = Bitcoin::Logger.create(:debug) end |
Instance Attribute Details
#asset_handler ⇒ Object (readonly)
Returns the value of attribute asset_handler.
12 13 14 |
# File 'lib/bitcoin/grpc/server.rb', line 12 def asset_handler @asset_handler end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
12 13 14 |
# File 'lib/bitcoin/grpc/server.rb', line 12 def logger @logger end |
#publisher ⇒ Object (readonly)
Returns the value of attribute publisher.
12 13 14 |
# File 'lib/bitcoin/grpc/server.rb', line 12 def publisher @publisher end |
#spv ⇒ Object (readonly)
Returns the value of attribute spv.
12 13 14 |
# File 'lib/bitcoin/grpc/server.rb', line 12 def spv @spv end |
#utxo_handler ⇒ Object (readonly)
Returns the value of attribute utxo_handler.
12 13 14 |
# File 'lib/bitcoin/grpc/server.rb', line 12 def utxo_handler @utxo_handler end |
Class Method Details
.run(spv, publisher, utxo_handler, asset_handler) ⇒ Object
4 5 6 7 8 9 10 |
# File 'lib/bitcoin/grpc/server.rb', line 4 def self.run(spv, publisher, utxo_handler, asset_handler) addr = "0.0.0.0:8080" s = GRPC::RpcServer.new s.add_http2_port(addr, :this_port_is_insecure) s.handle(new(spv, publisher, utxo_handler, asset_handler)) s.run_till_terminated end |
Instance Method Details
#events(requests) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/bitcoin/grpc/server.rb', line 84 def events(requests) logger.info("events: #{requests}") events = [] receiver = EventsReceiver.spawn(:receiver, events, publisher) requests.each do |request| receiver << request end logger.info("events: end") EventsResponseEnum.new(events).each rescue => e logger.error("events: #{e.message}") logger.error("events: #{e.backtrace}") end |
#get_blockchain_info(request, call) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/bitcoin/grpc/server.rb', line 22 def get_blockchain_info(request, call) best_block = spv.chain.latest_block GetBlockchainInfoResponse.new( chain: Bitcoin.chain_params.network.to_s, headers: best_block.height, bestblockhash: best_block.header.block_id, chainwork: best_block.header.work, mediantime: spv.chain.mtp(best_block.block_hash) ) rescue => e logger.info("get_blockchain_info: #{e.message}") logger.info("get_blockchain_info: #{e.backtrace}") end |
#watch_token(request, call) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/bitcoin/grpc/server.rb', line 72 def watch_token(request, call) logger.info("watch_token: #{request}") asset_handler << request response = [] Receiver.spawn(:receiver, request, response, publisher, [Bitcoin::Grpc::EventTokenIssued, Bitcoin::Grpc::EventTokenTransfered]) logger.info("watch_token: end") ResponseEnum.new(request, response, WatchTokenResponseBuilder).each rescue => e logger.info("watch_token: #{e.message}") logger.info("watch_token: #{e.backtrace}") end |
#watch_tx_confirmed(request, call) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/bitcoin/grpc/server.rb', line 36 def watch_tx_confirmed(request, call) logger.info("watch_tx_confirmed: #{request}") utxo_handler << request response = [] Receiver.spawn(:receiver, request, response, publisher, [Bitcoin::Grpc::EventTxConfirmed]) logger.info("watch_tx_confirmed: end") ResponseEnum.new(request, response, WatchTxConfirmedResponseBuilder).each rescue => e logger.info("watch_tx_confirmed: #{e.message}") logger.info("watch_tx_confirmed: #{e.backtrace}") end |
#watch_utxo(request, call) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/bitcoin/grpc/server.rb', line 48 def watch_utxo(request, call) logger.info("watch_utxo: #{request}") utxo_handler << request response = [] Receiver.spawn(:receiver, request, response, publisher, [Bitcoin::Grpc::EventUtxoRegistered, Bitcoin::Grpc::EventUtxoSpent]) logger.info("watch_utxo: end") ResponseEnum.new(request, response, WatchUtxoResponseBuilder).each rescue => e logger.info("watch_utxo: #{e.message}") logger.info("watch_utxo: #{e.backtrace}") end |
#watch_utxo_spent(request, call) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/bitcoin/grpc/server.rb', line 60 def watch_utxo_spent(request, call) logger.info("watch_utxo_spent: #{request}") utxo_handler << request response = [] Receiver.spawn(:receiver, request, response, publisher, [Bitcoin::Grpc::EventUtxoSpent]) logger.info("watch_utxo_spent: end") ResponseEnum.new(request, response, WatchUtxoSpentResponseBuilder).each rescue => e logger.info("watch_utxo_spent: #{e.message}") logger.info("watch_utxo_spent: #{e.backtrace}") end |