class ViaBTC::HTTP::Client

Public Class Methods

new(url: nil, http_response: nil, http_adapter: nil) click to toggle source
# File lib/viabtc/http.rb, line 8
def initialize(url: nil, http_response: nil, http_adapter: nil)
  if ViaBTC.configuration
    url           ||= ViaBTC.configuration.http_base_url
    http_response ||= ViaBTC.configuration.http_response
    http_adapter  ||= ViaBTC.configuration.http_adapter
  end

  @connection ||= connection(url, http_response, http_adapter)
end

Public Instance Methods

asset_list() click to toggle source
# File lib/viabtc/http.rb, line 48
def asset_list
  request(method: 'asset.list', params: [])
end
asset_summary() click to toggle source
# File lib/viabtc/http.rb, line 52
def asset_summary
  request(method: 'asset.summary', params: [])
end
balance(user_id:, id: 0) click to toggle source

Asset API

# File lib/viabtc/http.rb, line 20
def balance(user_id:, id: 0)
  request(id: id, method: 'balance.query', params: [user_id])
end
balance_history(user_id:, asset:, business: '', start_time: 0, end_time: 0, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 44
def balance_history(user_id:, asset:, business: '', start_time: 0, end_time: 0, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'balance.history', params: [user_id, asset, business, start_time, end_time, offset, limit])
end
buy_orders(market:, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 116
def buy_orders(market:, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'order.book', params: [market, 2, offset, limit])
end
cancel_order(user_id:, market:, order_id:, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 104
def cancel_order(user_id:, market:, order_id:, id: 0)
  request(id: id, method: 'order.cancel', params: [user_id, market, order_id])
end
deposit(user_id:, asset:, deposit_id:, amount:, source: 'web', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 34
def deposit(user_id:, asset:, deposit_id:, amount:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)

  request(
    id: id,
    method: 'balance.update',
    params: [user_id, asset, 'deposit', deposit_id, amount, { source: source }]
  )
end
finished_buy_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 2, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 140
def finished_buy_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 2, id: 0)
  request(id: id, method: 'order.finished', params: [user_id, market, start_time, end_time, offset, limit, side])
end
finished_order_detail(order_id:, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 144
def finished_order_detail(order_id:, id: 0)
  request(id: id, method: 'order.finished_detail', params: [order_id])
end
finished_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 0, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 132
def finished_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 0, id: 0)
  request(id: id, method: 'order.finished', params: [user_id, market, start_time, end_time, offset, limit, side])
end
finished_sell_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 1, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 136
def finished_sell_orders(user_id:, market:, start_time: 0, end_time: 0, offset: 0, limit: 100, side: 1, id: 0)
  request(id: id, method: 'order.finished', params: [user_id, market, start_time, end_time, offset, limit, side])
end
limit_buy(user_id:, market:, amount:, price:, taker_fee_rate:, maker_fee_rate:, source: 'web', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 70
def limit_buy(user_id:, market:, amount:, price:, taker_fee_rate:, maker_fee_rate:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{taker_fee_rate}" unless fee_rate_valid?(taker_fee_rate)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{maker_fee_rate}" unless fee_rate_valid?(maker_fee_rate)

  request(
    id: id,
    method: 'order.put_limit',
    params: [user_id, market, 2, amount, price, taker_fee_rate, maker_fee_rate, source]
  )
end
limit_sell(user_id:, market:, amount:, price:, taker_fee_rate:, maker_fee_rate:, source: 'web', id: 0) click to toggle source

Trade API

# File lib/viabtc/http.rb, line 58
def limit_sell(user_id:, market:, amount:, price:, taker_fee_rate:, maker_fee_rate:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{taker_fee_rate}" unless fee_rate_valid?(taker_fee_rate)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{maker_fee_rate}" unless fee_rate_valid?(maker_fee_rate)

  request(
    id: id,
    method: 'order.put_limit',
    params: [user_id, market, 1, amount, price, taker_fee_rate, maker_fee_rate, source]
  )
end
market_buy(user_id:, market:, amount:, taker_fee_rate:, source: 'web', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 93
def market_buy(user_id:, market:, amount:, taker_fee_rate:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{taker_fee_rate}" unless fee_rate_valid?(taker_fee_rate)

  request(
    id: id,
    method: 'order.put_market',
    params: [user_id, market, 2, amount, taker_fee_rate.to_s, source]
  )
end
market_deals(market:, limit: 10_000, last_id: 0, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 154
def market_deals(market:, limit: 10_000, last_id: 0, id: 0)
  request(id: id, method: 'market.deals', params: [market, limit, last_id])
end
market_kline(market:, start_time: now - 86_400, end_time: now, interval: 3600, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 162
def market_kline(market:, start_time: now - 86_400, end_time: now, interval: 3600, id: 0)
  request(id: id, method: 'market.kline', params: [market, start_time, end_time, interval])
end
market_last(market:, id: 0) click to toggle source

Market API

# File lib/viabtc/http.rb, line 150
def market_last(market:, id: 0)
  request(id: id, method: 'market.last', params: [market])
end
market_list(id: 0) click to toggle source
# File lib/viabtc/http.rb, line 174
def market_list(id: 0)
  request(id: id, method: 'market.list', params: [])
end
market_sell(user_id:, market:, amount:, taker_fee_rate:, source: 'web', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 82
def market_sell(user_id:, market:, amount:, taker_fee_rate:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)
  raise ViaBTC::Error::InvalidParameter, "invalid fee rate #{taker_fee_rate}" unless fee_rate_valid?(taker_fee_rate)

  request(
    id: id,
    method: 'order.put_market',
    params: [user_id, market, 1, amount, taker_fee_rate.to_s, source]
  )
end
market_status(market:, period: 86_400, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 166
def market_status(market:, period: 86_400, id: 0)
  request(id: id, method: 'market.status', params: [market, period])
end
market_status_today(market:, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 170
def market_status_today(market:, id: 0)
  market_status(market: market, period: 86_400, id: id)
end
market_summary(id: 0) click to toggle source
# File lib/viabtc/http.rb, line 178
def market_summary(id: 0)
  request(id: id, method: 'market.summary', params: [])
end
order_deals(order_id:, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 108
def order_deals(order_id:, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'order.deals', params: [order_id, offset, limit])
end
order_depth(market:, limit: 100, interval: '0', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 120
def order_depth(market:, limit: 100, interval: '0', id: 0)
  request(id: id, method: 'order.depth', params: [market, limit, interval])
end
pending_order_details(order_id:, market:, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 128
def pending_order_details(order_id:, market:, id: 0)
  request(id: id, method: 'order.pending_detail', params: [market, order_id])
end
pending_orders(user_id:, market:, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 124
def pending_orders(user_id:, market:, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'order.pending', params: [user_id, market, offset, limit])
end
sell_orders(market:, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 112
def sell_orders(market:, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'order.book', params: [market, 1, offset, limit])
end
user_executed_orders(user_id:, market:, offset: 0, limit: 100, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 158
def user_executed_orders(user_id:, market:, offset: 0, limit: 100, id: 0)
  request(id: id, method: 'market.user_deals', params: [user_id, market, offset, limit])
end
withdraw(user_id:, asset:, withdraw_id:, amount:, source: 'web', id: 0) click to toggle source
# File lib/viabtc/http.rb, line 24
def withdraw(user_id:, asset:, withdraw_id:, amount:, source: 'web', id: 0)
  raise ViaBTC::Error::InvalidParameter, "invalid amount: #{amount}" unless amount_valid?(amount)

  request(
    id: id,
    method: 'balance.update',
    params: [user_id, asset, 'withdraw', withdraw_id, amount, { source: source }]
  )
end

Private Instance Methods

connection(url, http_response, http_adapter) click to toggle source
# File lib/viabtc/http.rb, line 184
def connection(url, http_response, http_adapter)
  raise ViaBTC::Error::Configuration, 'required: url' unless url

  http_response ||= :logger
  http_adapter  ||= :net_http

  Faraday.new(url) do |conn|
    conn.response http_response
    conn.adapter http_adapter
    conn.headers['Content-Type'] = ['application/json']
  end
end
request(method:, params:, id: 0) click to toggle source
# File lib/viabtc/http.rb, line 197
def request(method:, params:, id: 0)
  response = @connection.post do |req|
    req.body = {
      'id' => id,
      'method' => method,
      'params' => params
    }.to_json
  end
  response = JSON.parse(response.body)
  raise_exchange_error(response) if response_invalid?(response)
  response
end