lib/peatio/goldcash/blockchain.rb in peatio-goldcash-2.6.6 vs lib/peatio/goldcash/blockchain.rb in peatio-goldcash-2.6.7
- old
+ new
@@ -1,33 +1,36 @@
+# frozen_string_literal: true
+
module Peatio
module Goldcash
# TODO: Processing of unconfirmed transactions from mempool isn't supported now.
class Blockchain < Peatio::Blockchain::Abstract
-
DEFAULT_FEATURES = {case_sensitive: true, cash_addr_format: false}.freeze
- def initialize(custom_features = {})
+ def initialize(custom_features={})
@features = DEFAULT_FEATURES.merge(custom_features).slice(*SUPPORTED_FEATURES)
@settings = {}
end
- def configure(settings = {})
+ def configure(settings={})
# Clean client state during configure.
@client = nil
@settings.merge!(settings.slice(*SUPPORTED_SETTINGS))
end
def fetch_block!(block_number)
block_hash = client.json_rpc(:getblockhash, [block_number])
- client.json_rpc(:getblock, [block_hash])
- .fetch('tx').each_with_object([]) do |tx, txs_array|
+ block_txs = client.json_rpc(:getblock, [block_hash])
+ .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) }
+ end
+
+ Peatio::Block.new(block_number, block_txs)
rescue Client::Error => e
raise Peatio::Blockchain::ClientError, e
end
def latest_block_number
@@ -36,35 +39,33 @@
raise Peatio::Blockchain::ClientError, e
end
def load_balance_of_address!(address, _currency_id)
address_with_balance = client.json_rpc(:listaddressgroupings)
- .flatten(1)
- .find { |addr| addr[0] == address }
+ .flatten(1)
+ .find {|addr| addr[0] == address }
- if address_with_balance.blank?
- raise Peatio::Blockchain::UnavailableAddressBalanceError, address
- end
+ raise Peatio::Blockchain::UnavailableAddressBalanceError, address if address_with_balance.blank?
address_with_balance[1].to_d
rescue Client::Error => e
raise Peatio::Blockchain::ClientError, e
end
private
- def build_transaction(tx_hash)
- tx_hash.fetch('vout')
- .select do |entry|
- entry.fetch('value').to_d > 0 &&
- entry['scriptPubKey'].has_key?('addresses')
+ def filter_vout(tx_hash)
+ tx_hash.fetch("vout").select do |entry|
+ entry.fetch("value").to_d.positive? && 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' }
+ end
+
+ def build_transaction(tx_hash)
+ filter_vout(tx_hash).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