class Krkt::Client
classe para processar dados no kraken
Attributes
aky[R]
@return [String] API key
asc[R]
@return [String] API secret
pru[R]
@return [String] API private url
pth[R]
@return [String] API private path
puu[R]
@return [String] API public url
Public Class Methods
new(pky: ENV['KRAKEN_API_KEY'], psc: ENV['KRAKEN_API_SECRET'], options: {})
click to toggle source
@param [String] pky API key @param [String] psc API secret @return [Client] API kraken base
# File lib/krkt/client.rb, line 26 def initialize(pky: ENV['KRAKEN_API_KEY'], psc: ENV['KRAKEN_API_SECRET'], options: {}) b = options.fetch(:base_uri, 'https://api.kraken.com') v = options.fetch(:version, 0) @aky = pky @asc = psc @puu = "#{b}/#{v}/public/" @pru = "#{b}/#{v}/private/" @pth = "/#{v}/private/" end
Public Instance Methods
balance()
click to toggle source
@return [Hash] saldos no kraken @example
{ 'ZEUR' => '0.0000', 'XXBT' => '0.0000000000', 'XETH' => '1.1806988100', 'XETC' => '0.0000000000', 'EOS' => '0.0000001700', 'BCH' => '0.0000000000' }
# File lib/krkt/client.rb, line 95 def balance post_private('Balance')['result'] end
ledger()
click to toggle source
@return [Hash] resultados ultimas transacoes ledger no kraken @example
{ 'ledger' => { 'LUK3QC-QW6TA-27B7NI' => { 'refid' => 'A2BNCQS-CHCETZ-JYCER6', 'time' => 1_584_349_306.9479, 'type' => 'withdrawal', 'subtype' => '', 'aclass' => 'currency', 'asset' => 'XETH', 'amount' => '-29.2659039100', 'fee' => '0.0050000000', 'balance' => '1.1806988100' } , ... }, 'count' => 373 }
# File lib/krkt/client.rb, line 81 def ledger post_private('Ledgers')['result'] end
server_time()
click to toggle source
@return [Hash] data hora kraken @example
{ 'unixtime' => 1_598_956_727, 'rfc1123' => 'Tue, 1 Sep 20 10:38:47 +0000' }
# File lib/krkt/client.rb, line 105 def server_time get_public('Time')['result'] end
trades_history()
click to toggle source
@return [Hash] resultados ultimas transacoes trades no kraken @example
{ 'trades' => { 'TLADFV-QIUTN-QDNCBR' => { 'ordertxid' => 'O2CRFG-5PCJA-EMX7VC', 'pair' => 'XETHXXBT', 'time' => 1_463_422_494.7069, 'type' => 'buy', 'ordertype' => 'market', 'price' => '0.024400', 'cost' => '1.358424', 'fee' => '0.003532', 'vol' => '55.67311475', 'margin' => '0.000000', 'misc' => '' }, ... }, 'count' => 156 }
# File lib/krkt/client.rb, line 57 def trades_history post_private('TradesHistory')['result'] end
Private Instance Methods
authenticate(method, nonce, params)
click to toggle source
# File lib/krkt/client.rb, line 129 def authenticate(method, nonce, params) raise(ArgumentError, 'API Key is not set') unless aky raise(ArgumentError, 'API Secret is not set') unless asc Base64.strict_encode64(OpenSSL::HMAC.digest( 'sha512', Base64.decode64(asc), "#{pth}#{method}#{Digest::SHA256.digest("#{nonce}#{params}")}" )) end
get_public(method, **opts)
click to toggle source
HTTP GET request for public API queries.
# File lib/krkt/client.rb, line 112 def get_public(method, **opts) parse_response(Curl.get("#{puu}#{method}", opts)) end
parse_response(http)
click to toggle source
# File lib/krkt/client.rb, line 140 def parse_response(http) # HTTP_SUCCESS = 200 http.response_code == 200 ? JSON.parse(http.body) : http.status rescue JSON::ParserError, EOFError, Errno::ECONNRESET, Errno::EINVAL, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError, Timeout::Error => e "Erro da API #{e.inspect}" end
post_private(method, **opts)
click to toggle source
HTTP POST request for private API queries involving user credentials.
# File lib/krkt/client.rb, line 117 def post_private(method, **opts) # Generate a continually-increasing unsigned 51-bit integer nonce from the current Unix Time. opts.merge!({ nonce: Integer(Time.now) * 1_000_000 }) parse_response(Curl.post("#{pru}#{method}", opts) do |r| r.headers = { 'api-key': aky, 'api-sign': authenticate(method, opts[:nonce], opts.map { |p| p.join('=') }.join('&')) } end) end