class Ubea::Exchange::BtcEBase
Public Instance Methods
balance()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 32 def balance balance = post_private("getInfo") OpenStruct.new( fiat: Money.new(balance["funds"][fiat_currency.downcase].to_s, fiat_currency), xbt: BigDecimal.new(balance["funds"]["btc"].to_s), ).freeze end
exchange_settings()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 14 def exchange_settings raise NotImplementedError end
fiat_currency()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 6 def fiat_currency raise NotImplementedError end
name()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 10 def name "BTC-E (#{fiat_currency})" end
open_orders()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 54 def open_orders post_private("ActiveOrders", {}, false) end
open_orders?()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 58 def open_orders? open_orders["error"] != "no orders" end
refresh_order_book!()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 22 def refresh_order_book! json = get_json("https://btc-e.com/api/2/btc_#{fiat_currency.downcase}/depth") or return asks = format_asks_bids(json["asks"]) bids = format_asks_bids(json["bids"]) mark_as_refreshed @order_book = OrderBook.new(asks: asks, bids: bids) end
trade!(args)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 41 def trade!(args) params = { pair: "btc_#{fiat_currency.downcase}", type: args.fetch(:type), rate: args.fetch(:price), amount: args.fetch(:volume), } Log.debug params trade = post_private("Trade", params) Log.info trade end
trade_fee()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 18 def trade_fee BigDecimal.new("0.002").freeze # 0.2% end
Private Instance Methods
encode_params(params)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 119 def encode_params(params) uri = Addressable::URI.new uri.query_values = params uri.query end
format_asks_bids(json)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 64 def format_asks_bids(json) json.map do |price, volume| Offer.new( price: Money.new(price.to_s, fiat_currency), volume: volume.to_s ).freeze end end
generate_hmac(key, message)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 115 def generate_hmac(key, message) OpenSSL::HMAC.hexdigest('sha512', key, message) end
generate_message(params)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 111 def generate_message(params) encode_params(params) end
generate_signature(params)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 105 def generate_signature(params) key = exchange_settings[:api_secret] message = generate_message(params) generate_hmac(key, message) end
nonce()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 94 def nonce now = Time.now.to_i + 2 if now >= (@nonce || 0) - 2 sleep 1 now = Time.now.to_i + 2 end @nonce = now end
post_private(method, params = {}, validate = true)
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 73 def post_private(method, params = {}, validate = true) params['method'] = method params['nonce'] = nonce response = retryable_http_request do http_adapter("https://btc-e.com").post(url_path, params) do |request| request.headers['Key'] = exchange_settings[:api_key] request.headers['Sign'] = generate_signature(params) end end json = JSON.parse(response.body) return json unless validate unless json["success"] == 1 p json raise "OOPS" end json["return"] end
url_path()
click to toggle source
# File lib/ubea/exchanges/btc_e_base.rb, line 125 def url_path "/tapi" end