Class: TxCatcher::Server
- Inherits:
-
Goliath::API
- Object
- Goliath::API
- TxCatcher::Server
- Defined in:
- lib/txcatcher/server.rb
Instance Method Summary collapse
- #address(path) ⇒ Object
- #broadcast_tx(txhex) ⇒ Object
- #response(env) ⇒ Object
- #route_for(path) ⇒ Object
- #utxo(path) ⇒ Object
Instance Method Details
#address(path) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/txcatcher/server.rb', line 25 def address(path) path = path.split("/").delete_if { |i| i.empty? } addr = path.last model = Address.where(address: addr).eager(deposits: :transactions).first if model transactions_ids = model.deposits.map { |d| d.transaction.txid } deposits = model.deposits.map do |d| t = d.transaction { txid: t.txid, amount: d.amount_in_btc, satoshis: d.amount, confirmations: 0 } end [200, {}, { address: model.address, received: model.received, deposits: deposits }.to_json] else [200, {}, { address: addr, received: 0, deposits: [] }.to_json] end end |
#broadcast_tx(txhex) ⇒ Object
66 67 68 69 70 |
# File 'lib/txcatcher/server.rb', line 66 def broadcast_tx(txhex) TxCatcher.rpc_node.sendrawtransaction(txhex) tx = TxCatcher.rpc_node.decoderawtransaction(txhex) [200, {}, tx.to_json] end |
#response(env) ⇒ Object
7 8 9 10 |
# File 'lib/txcatcher/server.rb', line 7 def response(env) uri = env["REQUEST_URI"] return route_for(uri) end |
#route_for(path) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/txcatcher/server.rb', line 12 def route_for(path) puts "[REQUEST: #{path}]" if path =~ /\A\/addr\/[0-9a-zA-Z]+\/utxo/ utxo(path) elsif path.start_with? "/addr/" address(path) elsif path.start_with? "/tx/send" broadcast_tx(params["rawtx"]) else [404, {}, { error: "404, not found" }.to_json] end end |
#utxo(path) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/txcatcher/server.rb', line 47 def utxo(path) path = path.split("/").delete_if { |i| i.empty? } path.pop addr = path.last model = Address.where(address: addr).eager(deposits: :transactions).first transactions = model.deposits.map { |d| d.transaction } utxos = transactions.map do |t| outs = t.tx_hash["vout"].select { |out| out["scriptPubKey"]["addresses"] == [addr] } outs.map! do |out| out["confirmations"] = t.confirmations || 0 out["txid"] = t.txid out end outs end.flatten [200, {}, utxos.to_json] end |