class Straight::Blockchain::InsightAdapter

Public Class Methods

mainnet_adapter(main_url:, test_url: nil) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 8
def self.mainnet_adapter(main_url:, test_url: nil)
  @@test_url = test_url
  new(main_url)
end
new(host_url) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 18
def initialize(host_url)
  @base_url = host_url
end
testnet_adapter() click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 13
def self.testnet_adapter
  raise "Testnet not implemented" unless @@test_url
  new(@@test_url)
end

Public Instance Methods

fetch_balance_for(address) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 33
def fetch_balance_for(address)
  res = api_request("/addr/", address)
  res["balanceSat"].to_i
end
fetch_transaction(tid, address: nil) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 22
def fetch_transaction(tid, address: nil)
  res = api_request("/tx/", tid)
  straighten_transaction(res, address: address)
end
fetch_transactions_for(address) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 27
def fetch_transactions_for(address)
  res = api_request("/addr/", address)
  return [] if res["transactions"].empty?
  [fetch_transaction(res["transactions"].first, address: address)]
end

Private Instance Methods

api_request(place, val) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 40
def api_request(place, val)
  req_url = @base_url + place + val
  conn = Faraday.new(url: req_url, ssl: { verify: false }) do |faraday|
    faraday.adapter Faraday.default_adapter
  end
  result = conn.get do |req|
    req.headers['Content-Type'] = 'application/json'
  end
  JSON.parse(result.body)
rescue JSON::ParserError => e
  raise BitcoinAddressInvalid, message: "address in question: #{val}" if e.message.include?("Invalid address")
  raise RequestError, YAML::dump(e)
rescue => e
  raise RequestError, YAML::dump(e)
end
straighten_transaction(transaction, address: nil) click to toggle source
# File lib/straight/blockchain_adapters/insight_adapter.rb, line 56
def straighten_transaction(transaction, address: nil)
  total_amount = 0
  tid = transaction["txid"]
  transaction["vout"].each do |o|
    total_amount += Satoshi.new(o["value"]) if address.nil? || address == o["scriptPubKey"]["addresses"].first
  end
  confirmations = transaction["confirmations"] 
  outs = transaction["vout"].map { |o| {amount: Satoshi.new(o["value"]).to_i, receiving_address: o["scriptPubKey"]["addresses"].first} }

  {
    tid:           tid,
    total_amount:  total_amount,
    confirmations: confirmations || 0,
    outs:          outs || []
  }
end