Issue
In this snippet (from line 19 of https://github.com/bitfinexcom/bitfinex-api-rb/blob/master/lib/bitfinex/connection.rb - this is also the source for the class containing the check_params method definition.)
if (params.keys - allowed_params).empty?
params.keys is an array, and allowed_params is an array. Why does the subtraction fail the .empty test?
To set it up to repeat this:
$gem install bitfinex-rb pry
Ruby source
#!/opt/local/bin/ruby
# Annoying!
# Stuff is installed to $GEMPATH/bitfinex-rb-0.0.11
# But you have to invoke it as below.
require 'pry'
require 'bitfinex'
Bitfinex::Client.configure do |conf|
  conf.secret = ENV["BFX_API_SECRET"]
  conf.api_key = ENV["BFX_API_KEY"]
end
client = Bitfinex::Client.new
history_req = {
      'since' => 1444277602,
      'until' => 0,
      'limit' => 500,
      'wallet' => "exchange"
}
puts
print history_req.keys
puts
puts history_req.keys
client.history(
   currency = "USD",
   history_req
)
script output (with extra help from pry)
$ pry wtf.rb {"account"=>{"read"=>true, "write"=>false}, "history"=>{"read"=>true, "write"=>false}, "orders"=>{"read"=>true, "write"=>true}, "positions"=>{"read"=>true, "write"=>false}, "funding"=>{"read"=>true, "write"=>true}, "wallets"=>{"read"=>true, "write"=>false}, "withdraw"=>{"read"=>false, "write"=>false}}
["since", "until", "limit", "wallet"] since until limit wallet
Exception: Bitfinex::ParamsError: Bitfinex::ParamsError -- From: /opt/local/lib/ruby2.4/gems/2.4.0/gems/bitfinex-rb-0.0.11/lib/bitfinex/connection.rb @ line 23 @ level: 0 of backtrace (of 22).
18: # Make sure parameters are allowed for the HTTP call 19: def check_params(params, allowed_params) 20: if (params.keys - allowed_params).empty? 21: return params 22: else 23: raise Bitfinex::ParamsError 24: end 25: end 26: 27: def rest_connection 28: @conn ||= new_rest_connection ...exception encountered, going interactive! [71] pry(main)>
Source for the Bitfinex gem on github:
https://github.com/bitfinexcom/bitfinex-api-rb
Solution
Let's a peek at the docs for the history method:
Parameters:
currency(string) (defaults to: "usd") — (optional) Specify the currency, default “USD”params(defaults to:{}) — :since [time] (optional) Return only the history after this timestamp.params(defaults to:{}) — :until [time] (optional) Return only the history before this timestamp.params(defaults to:{}) — :limit [int] (optional) Limit the number of entries to return. Default is 500.params(defaults to:{}) — :wallet [string] (optional) Return only entries that took place in this wallet. Accepted inputs are: “trading”, “exchange”, “deposit”
So the allowed keys in params are :since, :until, :limit, and :wallet.
The keys in your params are 'since', 'until', 'limit', and 'wallet'.
allowed_params = [:since, :until, :limit, :wallet]
params = {
  'since' => 1444277602,
  'until' => 0,
  'limit' => 500,
  'wallet' => "exchange"
}
params.keys - allowed_params
# => [:since, :until, :limit, :wallet]
(params.keys - allowed_params).empty?
# => false
The solution is to change your definition of history_req to use Symbol keys instead of Strings.
history_req = {
  since: 1444277602,
  until: 0,
  limit: 500,
  wallet: "exchange"
}
You can see where allowed_params comes from in the history method's source:
def history(currency="usd", params = {})
  check_params(params, %i{since until limit wallet})
  # ...
end
The construct %i{...} (note the i) produces an array of Symbols, ergo [:since, :until, :limit, :wallet].
Answered By - Jordan Running Answer Checked By - Clifford M. (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.