kucoin 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '06881a46d3828d1c9ab08cdba0362e3b4ba9468c0b60ca202147ba179ad19acb'
4
- data.tar.gz: 4f8446da98f48191191156883dbbfccff95fbe69dc491090ebae2169b7cd4f46
3
+ metadata.gz: 8eeeda2d6f7015e9dc44aaa40a8848c1672bdc9e16c83eaf70fbb1871bf4e64c
4
+ data.tar.gz: 0d249646f09eb52cd1136ae0e1823da00726d5e63f6cf081904bba1b1b22eec6
5
5
  SHA512:
6
- metadata.gz: 39360039bfdccae95c1707c739fc046bea43bde9b636fb6c5b555a840d4215d326de8f650054130d5da3404ea55895ff6958fcce38e7a97e08da1611216f4ed4
7
- data.tar.gz: 4628d521bac0895dbb9b4727875e64fda92ab0e7998eaf7b9e0406906012f0d1a341eeae62de18fecc487cc5ebffd16162c3aa4c821283bf8299c6e3b21e0b5e
6
+ metadata.gz: babd57f307e67dfecb44562a434c6cca0ae02554345aae8773ce16335f5c35f2f24d013b7ca9b59b4d3941a40c1eed6caa92fb7e945befab9e54b5e02cc8d479
7
+ data.tar.gz: 1c5a8fdaca76c44eac278d36f018595dadd284f41f572833a5b1d89c05eb1219656ef1ec981f403f4452d9276d7cfab329036b9838a6fec8a858c7d2d1b082b3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kucoin (0.1.0)
4
+ kucoin (0.1.1)
5
5
  addressable (>= 2.5.2)
6
6
  faraday (>= 0.13)
7
7
  faraday_middleware (>= 0.12.2)
data/README.md CHANGED
@@ -42,6 +42,9 @@ client = Kucoin::Rest::Client.new
42
42
  client.ticker("HPB-ETH")
43
43
  ```
44
44
 
45
+ ## Status
46
+
47
+ Full rspec coverage suit will be added shortly. Almost all API endpoints have been implemented. Feel free to fork the repo and submit PRs for any missing endpoints!
45
48
 
46
49
  ## Development
47
50
 
@@ -27,6 +27,7 @@ require "kucoin/models/coin"
27
27
  require "kucoin/models/coin_address"
28
28
  require "kucoin/models/balance"
29
29
  require "kucoin/models/deal"
30
+ require "kucoin/models/order"
30
31
  require "kucoin/models/user"
31
32
 
32
33
  require "kucoin/rest/public/currencies"
@@ -43,6 +44,7 @@ require "kucoin/rest/private/invitations"
43
44
  require "kucoin/rest/private/transfers"
44
45
  require "kucoin/rest/private/balances"
45
46
  require "kucoin/rest/private/trading"
47
+ require "kucoin/rest/private/markets"
46
48
 
47
49
  require "kucoin/rest/errors"
48
50
  require "kucoin/rest/authentication"
@@ -6,8 +6,8 @@ module Kucoin
6
6
  order_oid: :string,
7
7
  coin_type: :string,
8
8
  coin_type_pair: :string,
9
- deal_direction: :string,
10
- direction: :string,
9
+ deal_direction: :symbol,
10
+ direction: :symbol,
11
11
  deal_price: :float,
12
12
  amount: :float,
13
13
  deal_value: :float,
@@ -0,0 +1,72 @@
1
+ module Kucoin
2
+ module Models
3
+ class Order < Base
4
+ attr_accessor :deals
5
+
6
+ MAPPING = {
7
+ id: :string,
8
+ type: :symbol,
9
+ direction: :symbol,
10
+ created_at: :time,
11
+ updated_at: :time,
12
+ price: :float,
13
+ pending_amount: :float,
14
+ deal_amount: :float,
15
+ deal_value_total: :float,
16
+ coin_type: :string,
17
+ fee_total: :float,
18
+ user_oid: :string,
19
+ coin_type_pair: :string,
20
+ deal_price_average: :float
21
+ }
22
+
23
+ INDEX_MAPPING = {
24
+ 0 => :created_at,
25
+ 1 => :type,
26
+ 2 => :price,
27
+ 3 => :pending_amount,
28
+ 4 => :deal_amount,
29
+ 5 => :id
30
+ }
31
+
32
+ def initialize(hash)
33
+ super(hash)
34
+
35
+ self.id = ::Kucoin::Utilities::Parsing.convert_value(hash.fetch("oid", hash.fetch("orderOid", nil)), :string) if self.id.to_s.empty?
36
+ self.price = ::Kucoin::Utilities::Parsing.convert_value(hash.fetch("price", hash.fetch("orderPrice", nil)), :float) if self.price.nil?
37
+
38
+ dealt = hash.dig("dealOrders", "datas")
39
+ self.deals = ::Kucoin::Models::Trade.parse(response) if dealt && dealt.is_a?(Array) && dealt.any?
40
+ end
41
+
42
+ def self.parse(response)
43
+ orders = []
44
+
45
+ response&.each do |item|
46
+ data = {}
47
+
48
+ item.each_with_index do |value, index|
49
+ data[INDEX_MAPPING[index]] = value
50
+ end
51
+
52
+ orders << ::Kucoin::Models::Order.new(data)
53
+ end
54
+
55
+ return orders
56
+ end
57
+
58
+ def self.parse_map(response)
59
+ orders = []
60
+
61
+ response&.each do |type, collection|
62
+ collection.each do |item|
63
+ orders << ::Kucoin::Models::Order.new(item)
64
+ end
65
+ end
66
+
67
+ return orders
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -3,7 +3,7 @@ module Kucoin
3
3
  class OrderBook
4
4
  attr_accessor :symbol, :timestamp, :asks, :bids
5
5
 
6
- ARRAY_MAPPING = {
6
+ INDEX_MAPPING = {
7
7
  0 => :price,
8
8
  1 => :amount,
9
9
  2 => :volume
@@ -36,7 +36,7 @@ module Kucoin
36
36
  data = {}
37
37
 
38
38
  item.each_with_index do |value, index|
39
- data[ARRAY_MAPPING[index]] = value
39
+ data[INDEX_MAPPING[index]] = value
40
40
  end
41
41
 
42
42
  case type
@@ -17,7 +17,9 @@ module Kucoin
17
17
  datetime: :time,
18
18
  vol: :float,
19
19
  low: :float,
20
- change_rate: :float
20
+ change_rate: :float,
21
+ stick: :boolean,
22
+ fav: :boolean
21
23
  }
22
24
  end
23
25
  end
@@ -1,7 +1,7 @@
1
1
  module Kucoin
2
2
  module Models
3
3
  class Trade < Base
4
- ARRAY_MAPPING = {
4
+ INDEX_MAPPING = {
5
5
  0 => "timestamp",
6
6
  1 => "order_type",
7
7
  2 => "price",
@@ -24,7 +24,7 @@ module Kucoin
24
24
  data = {}
25
25
 
26
26
  item.each_with_index do |value, index|
27
- data[ARRAY_MAPPING[index]] = value
27
+ data[INDEX_MAPPING[index]] = value
28
28
  end
29
29
 
30
30
  trades << ::Kucoin::Models::Trade.new(data)
@@ -25,6 +25,7 @@ module Kucoin
25
25
  include ::Kucoin::Rest::Private::Transfers
26
26
  include ::Kucoin::Rest::Private::Balances
27
27
  include ::Kucoin::Rest::Private::Trading
28
+ include ::Kucoin::Rest::Private::Markets
28
29
 
29
30
  def configured?
30
31
  !self.configuration.key.to_s.empty? && !self.configuration.secret.to_s.empty?
@@ -81,7 +82,7 @@ module Kucoin
81
82
  builder.adapter self.configuration.faraday.fetch(:adapter, :net_http)
82
83
  end
83
84
 
84
- case method
85
+ response = case method
85
86
  when :get
86
87
  connection.get do |request|
87
88
  request.params = params if params && !params.empty?
@@ -92,6 +93,8 @@ module Kucoin
92
93
  request.params = params if params && !params.empty?
93
94
  end&.body
94
95
  end
96
+
97
+ parse(response)
95
98
  end
96
99
 
97
100
  end
@@ -12,19 +12,19 @@ module Kucoin
12
12
  params = {type: type, status: status, limit: limit, page: page}
13
13
  params.delete_if { |key, value| value.nil? }
14
14
 
15
- parse(get("/account/#{coin}/wallet/records", params: params, options: options))&.fetch("data", {})
15
+ get("/account/#{coin}/wallet/records", params: params, options: options)&.fetch("data", {})
16
16
  end
17
17
 
18
18
  def coin_balance(coin, options: {})
19
19
  options.merge!(authenticate: true)
20
20
 
21
- response = parse(get("/account/#{coin}/balance", options: options))&.fetch("data", {})
21
+ response = get("/account/#{coin}/balance", options: options)&.fetch("data", {})
22
22
  ::Kucoin::Models::Balance.new(response) if response
23
23
  end
24
24
 
25
25
  def balance(options: {})
26
26
  options.merge!(authenticate: true)
27
- response = parse(get("/account/balance", options: options))&.fetch("data", {})
27
+ response = get("/account/balance", options: options)&.fetch("data", {})
28
28
  ::Kucoin::Models::Balance.parse(response) if response
29
29
  end
30
30
 
@@ -5,17 +5,17 @@ module Kucoin
5
5
 
6
6
  def invitation_count(options: {})
7
7
  options.merge!(authenticate: true)
8
- parse(get("/referrer/descendant/count", options: options))&.fetch("data", {})
8
+ get("/referrer/descendant/count", options: options)&.fetch("data", {})
9
9
  end
10
10
 
11
11
  def promotion_reward(options: {})
12
12
  options.merge!(authenticate: true)
13
- parse(get("/account/promotion/info", options: options))&.fetch("data", {})
13
+ get("/account/promotion/info", options: options)&.fetch("data", {})
14
14
  end
15
15
 
16
16
  def promotion_summary(options: {})
17
17
  options.merge!(authenticate: true)
18
- parse(get("/account/promotion/sum", options: options))&.fetch("data", {})
18
+ get("/account/promotion/sum", options: options)&.fetch("data", {})
19
19
  end
20
20
 
21
21
  end
@@ -0,0 +1,38 @@
1
+ module Kucoin
2
+ module Rest
3
+ module Private
4
+ module Markets
5
+
6
+ # Market: BTC, ETH, etc.
7
+ # Symbol: HPB-ETH, ITC-ETH etc.
8
+ # Filter: FAVOURITE / STICK
9
+
10
+ def user_market_symbols(market: nil, symbol: nil, filter: nil, options: {})
11
+ options.merge!(authenticate: true)
12
+
13
+ params = {
14
+ market: market.to_s.upcase,
15
+ symbol: symbol.to_s.upcase,
16
+ filter: filter.to_s.upcase
17
+ }
18
+
19
+ params.delete_if { |key, value| value.nil? || value.to_s.empty? }
20
+
21
+ response = get("/market/symbols", params: params, options: options)&.fetch("data", {})
22
+ ::Kucoin::Models::Ticker.parse(response) if response
23
+ end
24
+
25
+ def stick_symbols(options: {})
26
+ options.merge!(authenticate: true)
27
+ response = get("/market/stick-symbols", params: {}, options: options)&.fetch("data", {})
28
+ end
29
+
30
+ def favorite_symbols(options: {})
31
+ options.merge!(authenticate: true)
32
+ response = get("/market/fav-symbols", params: {}, options: options)&.fetch("data", {})
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -14,14 +14,16 @@ module Kucoin
14
14
  def create_order(symbol, type: :buy, price:, amount:, options: {})
15
15
  options.merge!(authenticate: true)
16
16
 
17
- payload = {
17
+ payload = {
18
18
  symbol: symbol.to_s.upcase,
19
19
  type: type.to_s.upcase,
20
20
  price: price,
21
21
  amount: amount
22
22
  }
23
23
 
24
- parse(post("/order", data: payload, options: options))
24
+ response = post("/order", data: payload, options: options)
25
+
26
+ return {success: response&.fetch("success", false), id: response&.dig("data", "orderOid")}
25
27
  end
26
28
 
27
29
  def cancel_order(symbol, type: :buy, order_id:, options: {})
@@ -32,10 +34,10 @@ module Kucoin
32
34
  type: type.to_s.upcase
33
35
  }
34
36
 
35
- response = parse(post("/#{symbol}/cancel-order", data: payload, options: options))
37
+ post("/#{symbol}/cancel-order", data: payload, options: options)&.fetch("success", false)
36
38
  end
37
39
 
38
- def cancel_all_orders(symbol, type: :buy, options: {})
40
+ def cancel_all_orders(symbol, type: nil, options: {})
39
41
  options.merge!(authenticate: true)
40
42
 
41
43
  payload = {
@@ -43,7 +45,9 @@ module Kucoin
43
45
  type: type.to_s.upcase
44
46
  }
45
47
 
46
- response = parse(post("/order/cancel-all", data: payload, options: options))
48
+ payload.delete_if { |key, value| value.nil? || value.to_s.empty? }
49
+
50
+ post("/order/cancel-all", data: payload, options: options)&.fetch("success", false)
47
51
  end
48
52
 
49
53
  def active_orders(symbol, type: :buy, options: {})
@@ -54,10 +58,23 @@ module Kucoin
54
58
  type: type.to_s.upcase
55
59
  }
56
60
 
57
- response = parse(get("/order/active", params: params, options: options))
61
+ response = get("/order/active", params: params, options: options)&.fetch("data", [])
62
+ ::Kucoin::Models::Order.parse(response) if response
63
+ end
64
+
65
+ def active_orders_map(symbol, type: :buy, options: {})
66
+ options.merge!(authenticate: true)
67
+
68
+ params = {
69
+ symbol: symbol.to_s.upcase,
70
+ type: type.to_s.upcase
71
+ }
72
+
73
+ response = get("/order/active-map", params: params, options: options)&.fetch("data", {})
74
+ ::Kucoin::Models::Order.parse_map(response) if response
58
75
  end
59
76
 
60
- def dealt_orders(symbol: nil, type: nil, before: nil, since: nil, limit: nil, page: nil, options: {})
77
+ def dealt_orders(symbol, type: nil, before: nil, since: nil, limit: nil, page: nil, options: {})
61
78
  options.merge!(authenticate: true)
62
79
 
63
80
  params = {
@@ -71,7 +88,7 @@ module Kucoin
71
88
 
72
89
  params.delete_if { |key, value| value.nil? }
73
90
 
74
- response = parse(get("/order/dealt", params: params, options: options))&.dig("data", "datas")
91
+ response = get("/order/dealt", params: params, options: options)&.dig("data", "datas")
75
92
  ::Kucoin::Models::Deal.parse(response) if response
76
93
  end
77
94
 
@@ -87,7 +104,7 @@ module Kucoin
87
104
 
88
105
  params.delete_if { |key, value| value.nil? }
89
106
 
90
- response = parse(get("/deal-orders", params: params, options: options))&.dig("data", "datas")
107
+ response = get("/deal-orders", params: params, options: options)&.dig("data", "datas")
91
108
  ::Kucoin::Models::Deal.parse(response) if response
92
109
  end
93
110
 
@@ -104,7 +121,8 @@ module Kucoin
104
121
 
105
122
  params.delete_if { |key, value| value.nil? }
106
123
 
107
- response = parse(get("/order/detail", params: params, options: options))&.fetch("data", {})
124
+ response = get("/order/detail", params: params, options: options)&.fetch("data", {})
125
+ ::Kucoin::Models::Order.new(response) if response
108
126
  end
109
127
 
110
128
  end
@@ -5,18 +5,18 @@ module Kucoin
5
5
 
6
6
  def get_coin_address(coin, options: {})
7
7
  options.merge!(authenticate: true)
8
- response = parse(get("/account/#{coin}/wallet/address", options: options))&.fetch("data", {})
8
+ response = get("/account/#{coin}/wallet/address", options: options)&.fetch("data", {})
9
9
  ::Kucoin::Models::CoinAddress.new(response) if response
10
10
  end
11
11
 
12
12
  def create_withdrawal(coin, amount:, address:, options: {})
13
13
  options.merge!(authenticate: true)
14
- parse(post("/account/#{coin}/withdraw/apply", data: {coin: coin, amount: amount, address: address}, options: options))
14
+ post("/account/#{coin}/withdraw/apply", data: {coin: coin, amount: amount, address: address}, options: options)
15
15
  end
16
16
 
17
17
  def cancel_withdrawal(coin, transaction_id:, options: {})
18
18
  options.merge!(authenticate: true)
19
- parse(post("/account/#{coin}/withdraw/cancel", data: {txOid: transaction_id}, options: options))
19
+ post("/account/#{coin}/withdraw/cancel", data: {txOid: transaction_id}, options: options)
20
20
  end
21
21
 
22
22
  end
@@ -5,7 +5,7 @@ module Kucoin
5
5
 
6
6
  def user_info(options: {})
7
7
  options.merge!(authenticate: true)
8
- response = parse(get("/user/info", options: options))&.fetch("data", {})
8
+ response = get("/user/info", options: options)&.fetch("data", {})
9
9
  ::Kucoin::Models::User.new(response) if response
10
10
  end
11
11
 
@@ -4,7 +4,7 @@ module Kucoin
4
4
  module Currencies
5
5
 
6
6
  def exchange_rates(options: {})
7
- parse(get("/open/currencies", options: options))&.dig("data", "rates")
7
+ get("/open/currencies", options: options)&.dig("data", "rates")
8
8
  end
9
9
 
10
10
  end
@@ -22,18 +22,18 @@ module Kucoin
22
22
 
23
23
  params.delete_if { |key, value| value.nil? }
24
24
 
25
- response = parse(get("/open/kline", params: params, options: options))&.fetch("data", {})
25
+ response = get("/open/kline", params: params, options: options)&.fetch("data", {})
26
26
  end
27
27
 
28
28
  #
29
29
  # TradingView related endpoints:
30
30
  #
31
31
  def kline_config(options: {})
32
- parse(get("/open/chart/config", options: options))
32
+ get("/open/chart/config", options: options)
33
33
  end
34
34
 
35
35
  def chart_symbol(symbol, options: {})
36
- response = parse(get("/open/chart/symbols", params: {symbol: symbol}, options: options))
36
+ response = get("/open/chart/symbols", params: {symbol: symbol}, options: options)
37
37
  end
38
38
 
39
39
  def chart_kline_data(symbol, resolution: :one_hour, from: nil, to: nil, options: {})
@@ -53,7 +53,7 @@ module Kucoin
53
53
 
54
54
  params.delete_if { |key, value| value.nil? }
55
55
 
56
- response = parse(get("/open/chart/history", params: params, options: options))
56
+ response = get("/open/chart/history", params: params, options: options)
57
57
  ::Kucoin::Models::OHLCV.parse(response) if response
58
58
  end
59
59
 
@@ -4,7 +4,7 @@ module Kucoin
4
4
  module Languages
5
5
 
6
6
  def languages(options: {})
7
- parse(get("/open/lang-list", options: options))&.fetch("data", [])
7
+ get("/open/lang-list", options: options)&.fetch("data", [])
8
8
  end
9
9
 
10
10
  end
@@ -4,26 +4,37 @@ module Kucoin
4
4
  module Markets
5
5
 
6
6
  def markets(options: {})
7
- parse(get("/open/markets", options: options))&.fetch("data", {})
7
+ get("/open/markets", options: options)&.fetch("data", {})
8
8
  end
9
9
 
10
- # /market/open/symbols is also available, seems to be the same endpoint
11
- def market_symbols(market, options: {})
12
- response = parse(get("/open/symbols", params: {market: market}, options: options))&.fetch("data", {})
10
+ def market_symbols(market: nil, options: {})
11
+ params = {
12
+ market: market.to_s.upcase,
13
+ }
14
+
15
+ params.delete_if { |key, value| value.nil? || value.to_s.empty? }
16
+
17
+ response = get("/market/open/symbols", params: params, options: options)&.fetch("data", {})
13
18
  ::Kucoin::Models::Ticker.parse(response) if response
14
19
  end
15
20
 
16
- def trending_symbols(market, options: {})
17
- response = parse(get("/market/open/coins-trending", params: {market: market}, options: options))&.fetch("data", {})
21
+ def trending_symbols(market: nil, options: {})
22
+ params = {
23
+ market: market.to_s.upcase,
24
+ }
25
+
26
+ params.delete_if { |key, value| value.nil? || value.to_s.empty? }
27
+
28
+ response = get("/market/open/coins-trending", params: params, options: options)&.fetch("data", {})
18
29
  end
19
30
 
20
31
  def coins(options: {})
21
- response = parse(get("/market/open/coins", options: options))&.fetch("data", {})
32
+ response = get("/market/open/coins", options: options)&.fetch("data", {})
22
33
  ::Kucoin::Models::Coin.parse(response) if response
23
34
  end
24
35
 
25
36
  def coin_info(coin, options: {})
26
- response = parse(get("/market/open/coin-info", params: {coin: coin}, options: options))&.fetch("data", {})
37
+ response = get("/market/open/coin-info", params: {coin: coin}, options: options)&.fetch("data", {})
27
38
  ::Kucoin::Models::Coin.new(response) if response
28
39
  end
29
40
 
@@ -17,7 +17,7 @@ module Kucoin
17
17
 
18
18
  private
19
19
  def get_orders(symbol:, endpoint:, params: {}, type: nil, options: {})
20
- response = parse(get(endpoint, params: params, options: options))&.merge("symbol" => symbol)
20
+ response = get(endpoint, params: params, options: options)&.merge("symbol" => symbol)
21
21
  ::Kucoin::Models::OrderBook.new(response, type: type) if response
22
22
  end
23
23
 
@@ -4,7 +4,7 @@ module Kucoin
4
4
  module Ticker
5
5
 
6
6
  def ticker(symbol, options: {})
7
- response = parse(get("/open/tick", params: {symbol: symbol}, options: options))&.fetch("data", {})
7
+ response = get("/open/tick", params: {symbol: symbol}, options: options)&.fetch("data", {})
8
8
  ::Kucoin::Models::Ticker.new(response) if response
9
9
  end
10
10
 
@@ -12,7 +12,7 @@ module Kucoin
12
12
 
13
13
  params.delete_if { |key, value| value.nil? }
14
14
 
15
- response = parse(get("/open/deal-orders", params: params, options: options))&.fetch("data", {})
15
+ response = get("/open/deal-orders", params: params, options: options)&.fetch("data", {})
16
16
  ::Kucoin::Models::Trade.parse(response) if response
17
17
  end
18
18
 
@@ -8,6 +8,8 @@ module Kucoin
8
8
  return case type
9
9
  when :string
10
10
  value.to_s
11
+ when :symbol
12
+ value.to_s.underscore.downcase.to_sym
11
13
  when :integer
12
14
  value.to_i
13
15
  when :float
@@ -1,3 +1,3 @@
1
1
  module Kucoin
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kucoin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-20 00:00:00.000000000 Z
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -168,6 +168,7 @@ files:
168
168
  - lib/kucoin/models/coin_address.rb
169
169
  - lib/kucoin/models/deal.rb
170
170
  - lib/kucoin/models/ohlcv.rb
171
+ - lib/kucoin/models/order.rb
171
172
  - lib/kucoin/models/order_book.rb
172
173
  - lib/kucoin/models/ticker.rb
173
174
  - lib/kucoin/models/trade.rb
@@ -178,6 +179,7 @@ files:
178
179
  - lib/kucoin/rest/private/balances.rb
179
180
  - lib/kucoin/rest/private/invitations.rb
180
181
  - lib/kucoin/rest/private/languages.rb
182
+ - lib/kucoin/rest/private/markets.rb
181
183
  - lib/kucoin/rest/private/trading.rb
182
184
  - lib/kucoin/rest/private/transfers.rb
183
185
  - lib/kucoin/rest/private/user.rb