Class: Straight::Blockchain::BlockchainInfoAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/straight/blockchain_adapters/blockchain_info_adapter.rb

Constant Summary

Constants inherited from Adapter

Adapter::MAX_TRIES

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.mainnet_adapterObject



6
7
8
9
10
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 6

def self.mainnet_adapter
  instance = self.instance
  instance._initialize("https://blockchain.info")
  instance
end

.testnet_adapterObject



12
13
14
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 12

def self.testnet_adapter
  raise "Not Supported Yet"
end

Instance Method Details

#_initialize(base_url) ⇒ Object



16
17
18
19
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 16

def _initialize(base_url)
  @latest_block = { cache_timestamp: nil, block: nil }
  @base_url = base_url
end

#fetch_balance_for(address) ⇒ Object

Returns the current balance of the address



33
34
35
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 33

def fetch_balance_for(address)
  api_request("/rawaddr/#{address}")['final_balance']
end

#fetch_transaction(tid, address: nil) ⇒ Object

Returns transaction info for the tid



22
23
24
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 22

def fetch_transaction(tid, address: nil)
  straighten_transaction(api_request("/rawtx/#{tid}"), address: address)
end

#fetch_transactions_for(address) ⇒ Object

Returns all transactions for the address



27
28
29
30
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 27

def fetch_transactions_for(address)
  transactions = api_request("/rawaddr/#{address}")['txs']
  transactions.map { |t| straighten_transaction(t, address: address) }
end

#latest_block(force_reload: false) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/straight/blockchain_adapters/blockchain_info_adapter.rb', line 37

def latest_block(force_reload: false)
  # If we checked Blockchain.info latest block data
  # more than a minute ago, check again. Otherwise, use cached version.
  if @latest_block[:cache_timestamp].nil?              ||
     @latest_block[:cache_timestamp] < (Time.now - 60) ||
     force_reload
    @latest_block = {
      cache_timestamp: Time.now,
      block: api_request("/latestblock")
    }
  else
    @latest_block
  end
end