class Peatio::Litecoin::Blockchain
TODO: Processing of unconfirmed transactions from mempool isn't supported now.
Constants
- DEFAULT_FEATURES
Public Class Methods
new(custom_features = {})
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 9 def initialize(custom_features = {}) @features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES) @settings = {} end
Public Instance Methods
configure(settings = {})
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 14 def configure(settings = {}) # Clean client state during configure. @client = nil @settings.merge!(settings.slice(*SUPPORTED_SETTINGS)) end
fetch_block!(block_number)
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 20 def fetch_block!(block_number) block_hash = client.json_rpc(:getblockhash, [block_number]) client.json_rpc(:getblock, [block_hash, 2]) .fetch('tx').each_with_object([]) do |tx, txs_array| txs = build_transaction(tx).map do |ntx| Peatio::Transaction.new(ntx.merge(block_number: block_number)) end txs_array.append(*txs) end.yield_self { |txs_array| Peatio::Block.new(block_number, txs_array) } rescue Client::Error => e raise Peatio::Blockchain::ClientError, e end
latest_block_number()
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 34 def latest_block_number client.json_rpc(:getblockcount) rescue Client::Error => e raise Peatio::Blockchain::ClientError, e end
load_balance_of_address!(address, _currency_id)
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 40 def load_balance_of_address!(address, _currency_id) address_with_balance = client.json_rpc(:listaddressgroupings) .flatten(1) .find { |addr| addr[0] == address } if address_with_balance.blank? raise Peatio::Blockchain::UnavailableAddressBalanceError, address end address_with_balance[1].to_d rescue Client::Error => e raise Peatio::Blockchain::ClientError, e end
transaction_sources(transaction)
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 54 def transaction_sources(transaction) transaction_hash = client.json_rpc(:getrawtransaction, [transaction.hash, 1]) transaction_hash['vin'].each_with_object([]) do |vin, source_addresses| next if vin['txid'].blank? vin_transaction = client.json_rpc(:getrawtransaction, [vin['txid'], 1]) source = vin_transaction['vout'].find { |hash| hash['n'] == vin['vout'] } source_addresses << source['scriptPubKey']['addresses'][0] end.compact.uniq end
Private Instance Methods
build_transaction(tx_hash)
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 67 def build_transaction(tx_hash) tx_hash.fetch('vout') .select do |entry| entry.fetch('value').to_d > 0 && entry['scriptPubKey'].has_key?('addresses') end .each_with_object([]) do |entry, formatted_txs| no_currency_tx = { hash: tx_hash['txid'], txout: entry['n'], to_address: entry['scriptPubKey']['addresses'][0], amount: entry.fetch('value').to_d, status: 'success' } # Build transaction for each currency belonging to blockchain. settings_fetch(:currencies).pluck(:id).each do |currency_id| formatted_txs << no_currency_tx.merge(currency_id: currency_id) end end end
client()
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 87 def client @client ||= Client.new(settings_fetch(:server)) end
settings_fetch(key)
click to toggle source
# File lib/peatio/litecoin/blockchain.rb, line 91 def settings_fetch(key) @settings.fetch(key) { raise Peatio::Blockchain::MissingSettingError, key.to_s } end