module CurrencyRate class KrakenAdapter < Adapter SUPPORTED_CURRENCIES = %w( ADA BCH BSV BTC DAI DASH EOS ETC ETH GNO LTC MLN NMC QTUM REP USDC XDG XLM XMR XRP XTZ ZEC ) ASSET_MAP = { "XXBTZ" => "BTC", "XETCX" => "ETC", "XETHX" => "ETH", "XLTCX" => "LTC", "XREPX" => "REP", "XXLMX" => "XLM", "XXMRX" => "XMR", "XXRPX" => "XRP", "XZECX" => "ZEC", "XZUSD" => "USD", "BTC" => "XBT", } ANCHOR_CURRENCY = "BTC" FETCH_URL = "https://api.kraken.com/0/public/Ticker?pair=#{ %w(ADAXBT BCHXBT BSVXBT DASHXBT EOSXBT GNOXBT QTUMXBT XTZXBT XETCXXBT XETHXXBT XLTCXXBT XREPXXBT XXLMXXBT XXMRXXBT XXRPXXBT XZECXXBT XXBTZUSD XBTDAI XBTUSDC).join(",") }" def normalize(data) return nil unless super data["result"].reduce({ "anchor" => ANCHOR_CURRENCY }) do |result, (pair, value)| key = ta(pair.sub(ta(ANCHOR_CURRENCY), "")) if %w(USD DAI USDC).include?(key) result[key] = BigDecimal(value["c"].first.to_s) else result[key] = 1 / BigDecimal(value["c"].first.to_s) end result end end def translate_asset(asset) ASSET_MAP[asset] || asset end alias_method :ta, :translate_asset end end