Class: Bitstamp::Client

Constant Summary collapse

BASE_URI =
'https://www.bitstamp.net/api'
CONNECTTIMEOUT =
1
TIMEOUT =
10

Class Method Summary collapse

Instance Method Summary collapse

Methods included from HTTP::Transactions

transactions

Methods included from HTTP::TradingPairs

trading_pair_info

Methods included from HTTP::Ticker

hourly_ticker, ticker

Methods included from HTTP::OrderBook

order_book

Methods included from HTTP::ConversionRates

eur_usd_conversion_rate

Methods included from Handler

handle_body

Methods included from HTTP::Withdrawal

#bitcoin_withdrawal, #withdrawal_requests

Methods included from HTTP::UserTransactions

#user_transactions

Methods included from HTTP::SubaccountTransfer

#transfer_from_main, #transfer_to_main

Methods included from HTTP::Orders

#buy_limit_order, #buy_market_order, #cancel_all_orders, #cancel_order, #open_orders, #order_status, #sell_limit_order, #sell_market_order

Methods included from HTTP::Deposit

#bitcoin_deposit_address, #unconfirmed_bitcoin_deposits

Methods included from HTTP::AccountBalance

#account_balance

Constructor Details

#initialize(customer_id:, api_key:, secret:) ⇒ Client

Returns a new instance of Client.



19
20
21
22
23
# File 'lib/bitstamp/client.rb', line 19

def initialize(customer_id:, api_key:, secret:)
  @customer_id    = customer_id
  @api_key        = api_key
  @secret         = secret
end

Class Method Details

.call(request_uri, method, body) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/bitstamp/client.rb', line 44

def call(request_uri, method, body)
  request_hash = {
    method:  method,
    body:    body,
    headers: {
      'User-Agent' => "Bitstamp::Client Ruby v#{::Bitstamp::VERSION}"
    },
    connecttimeout: CONNECTTIMEOUT,
    timeout:        TIMEOUT
  }

  request = ::Typhoeus::Request.new(request_uri, request_hash)
  response = request.run

  return handle_body(response.body)
end

.request_uri(*parts) ⇒ Object



33
34
35
36
37
38
39
40
41
42
# File 'lib/bitstamp/client.rb', line 33

def request_uri(*parts)
  uri = BASE_URI

  parts.each do |part|
    uri += "/"
    uri += part
  end

  return uri + "/"
end

Instance Method Details

#build_signature(nonce) ⇒ Object



88
89
90
91
92
# File 'lib/bitstamp/client.rb', line 88

def build_signature(nonce)
  message = nonce + @customer_id + @api_key

  return OpenSSL::HMAC.hexdigest("SHA256", @secret, message).upcase
end

#call(request_uri, method, body) ⇒ Object



71
72
73
74
75
# File 'lib/bitstamp/client.rb', line 71

def call(request_uri, method, body)
  body = params_with_signature(body)

  ::Bitstamp::Client.call(request_uri, method, body)
end

#params_with_signature(params = {}) ⇒ Object



77
78
79
80
81
82
83
84
85
86
# File 'lib/bitstamp/client.rb', line 77

def params_with_signature(params = {})
  if params[:nonce] == nil
    params[:nonce] = (Time.now.to_f * 1000000).to_i.to_s # Microseconds
  end

  params[:key]       = @api_key
  params[:signature] = build_signature(params[:nonce])

  return params
end