ccxt 4.3.84 → 4.3.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +7 -5
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/src/abstract/hashkey.js +9 -0
  5. package/dist/cjs/src/base/Exchange.js +1 -1
  6. package/dist/cjs/src/base/errors.js +8 -1
  7. package/dist/cjs/src/binance.js +4 -2
  8. package/dist/cjs/src/bitfinex.js +2 -2
  9. package/dist/cjs/src/bitmex.js +4 -0
  10. package/dist/cjs/src/bybit.js +15 -14
  11. package/dist/cjs/src/cryptocom.js +117 -2
  12. package/dist/cjs/src/hashkey.js +4328 -0
  13. package/dist/cjs/src/hyperliquid.js +85 -65
  14. package/dist/cjs/src/indodax.js +37 -9
  15. package/dist/cjs/src/kraken.js +29 -1
  16. package/dist/cjs/src/krakenfutures.js +12 -10
  17. package/dist/cjs/src/kucoinfutures.js +5 -0
  18. package/dist/cjs/src/mexc.js +2 -2
  19. package/dist/cjs/src/pro/ascendex.js +45 -5
  20. package/dist/cjs/src/pro/binance.js +1 -1
  21. package/dist/cjs/src/pro/bingx.js +13 -12
  22. package/dist/cjs/src/pro/bitget.js +113 -4
  23. package/dist/cjs/src/pro/hashkey.js +839 -0
  24. package/dist/cjs/src/pro/hyperliquid.js +123 -0
  25. package/dist/cjs/src/pro/mexc.js +13 -7
  26. package/dist/cjs/src/pro/okx.js +25 -4
  27. package/dist/cjs/src/pro/woo.js +1 -0
  28. package/dist/cjs/src/pro/woofipro.js +1 -0
  29. package/dist/cjs/src/pro/xt.js +1 -0
  30. package/js/ccxt.d.ts +9 -3
  31. package/js/ccxt.js +7 -3
  32. package/js/src/abstract/cryptocom.d.ts +2 -0
  33. package/js/src/abstract/hashkey.d.ts +70 -0
  34. package/js/src/abstract/hashkey.js +11 -0
  35. package/js/src/abstract/kucoinfutures.d.ts +2 -0
  36. package/js/src/base/Exchange.js +1 -1
  37. package/js/src/base/errorHierarchy.d.ts +1 -0
  38. package/js/src/base/errorHierarchy.js +1 -0
  39. package/js/src/base/errors.d.ts +5 -1
  40. package/js/src/base/errors.js +8 -2
  41. package/js/src/binance.js +4 -2
  42. package/js/src/bitfinex.js +2 -2
  43. package/js/src/bitmex.js +4 -0
  44. package/js/src/bybit.js +16 -15
  45. package/js/src/cryptocom.d.ts +5 -1
  46. package/js/src/cryptocom.js +117 -2
  47. package/js/src/hashkey.d.ts +178 -0
  48. package/js/src/hashkey.js +4329 -0
  49. package/js/src/hyperliquid.d.ts +3 -0
  50. package/js/src/hyperliquid.js +85 -65
  51. package/js/src/indodax.js +37 -9
  52. package/js/src/kraken.js +29 -1
  53. package/js/src/krakenfutures.js +12 -10
  54. package/js/src/kucoinfutures.js +5 -0
  55. package/js/src/mexc.js +2 -2
  56. package/js/src/pro/ascendex.d.ts +2 -0
  57. package/js/src/pro/ascendex.js +45 -5
  58. package/js/src/pro/binance.js +1 -1
  59. package/js/src/pro/bingx.js +13 -12
  60. package/js/src/pro/bitget.d.ts +4 -0
  61. package/js/src/pro/bitget.js +113 -4
  62. package/js/src/pro/hashkey.d.ts +34 -0
  63. package/js/src/pro/hashkey.js +840 -0
  64. package/js/src/pro/hyperliquid.d.ts +7 -1
  65. package/js/src/pro/hyperliquid.js +123 -0
  66. package/js/src/pro/mexc.js +13 -7
  67. package/js/src/pro/okx.js +25 -4
  68. package/js/src/pro/woo.js +1 -0
  69. package/js/src/pro/woofipro.js +1 -0
  70. package/js/src/pro/xt.js +1 -0
  71. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -72,6 +72,7 @@ var fmfwio = require('./src/fmfwio.js');
72
72
  var gate = require('./src/gate.js');
73
73
  var gateio = require('./src/gateio.js');
74
74
  var gemini = require('./src/gemini.js');
75
+ var hashkey = require('./src/hashkey.js');
75
76
  var hitbtc = require('./src/hitbtc.js');
76
77
  var hitbtc3 = require('./src/hitbtc3.js');
77
78
  var hollaex = require('./src/hollaex.js');
@@ -158,6 +159,7 @@ var exmo$1 = require('./src/pro/exmo.js');
158
159
  var gate$1 = require('./src/pro/gate.js');
159
160
  var gateio$1 = require('./src/pro/gateio.js');
160
161
  var gemini$1 = require('./src/pro/gemini.js');
162
+ var hashkey$1 = require('./src/pro/hashkey.js');
161
163
  var hitbtc$1 = require('./src/pro/hitbtc.js');
162
164
  var hollaex$1 = require('./src/pro/hollaex.js');
163
165
  var htx$1 = require('./src/pro/htx.js');
@@ -194,7 +196,7 @@ var xt$1 = require('./src/pro/xt.js');
194
196
 
195
197
  //-----------------------------------------------------------------------------
196
198
  // this is updated by vss.js when building
197
- const version = '4.3.84';
199
+ const version = '4.3.86';
198
200
  Exchange["default"].ccxtVersion = version;
199
201
  const exchanges = {
200
202
  'ace': ace,
@@ -257,6 +259,7 @@ const exchanges = {
257
259
  'gate': gate,
258
260
  'gateio': gateio,
259
261
  'gemini': gemini,
262
+ 'hashkey': hashkey,
260
263
  'hitbtc': hitbtc,
261
264
  'hitbtc3': hitbtc3,
262
265
  'hollaex': hollaex,
@@ -345,6 +348,7 @@ const pro = {
345
348
  'gate': gate$1,
346
349
  'gateio': gateio$1,
347
350
  'gemini': gemini$1,
351
+ 'hashkey': hashkey$1,
348
352
  'hitbtc': hitbtc$1,
349
353
  'hollaex': hollaex$1,
350
354
  'htx': htx$1,
@@ -410,6 +414,7 @@ exports.InvalidAddress = errors.InvalidAddress;
410
414
  exports.InvalidNonce = errors.InvalidNonce;
411
415
  exports.InvalidOrder = errors.InvalidOrder;
412
416
  exports.InvalidProxySettings = errors.InvalidProxySettings;
417
+ exports.ManualInteractionNeeded = errors.ManualInteractionNeeded;
413
418
  exports.MarginModeAlreadySet = errors.MarginModeAlreadySet;
414
419
  exports.MarketClosed = errors.MarketClosed;
415
420
  exports.NetworkError = errors.NetworkError;
@@ -487,6 +492,7 @@ exports.fmfwio = fmfwio;
487
492
  exports.gate = gate;
488
493
  exports.gateio = gateio;
489
494
  exports.gemini = gemini;
495
+ exports.hashkey = hashkey;
490
496
  exports.hitbtc = hitbtc;
491
497
  exports.hitbtc3 = hitbtc3;
492
498
  exports.hollaex = hollaex;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var Exchange$1 = require('../base/Exchange.js');
4
+
5
+ // -------------------------------------------------------------------------------
6
+ class Exchange extends Exchange$1["default"] {
7
+ }
8
+
9
+ module.exports = Exchange;
@@ -6104,7 +6104,7 @@ class Exchange {
6104
6104
  if (method === 'fetchAccounts') {
6105
6105
  response = await this[method](params);
6106
6106
  }
6107
- else if (method === 'getLeverageTiersPaginated') {
6107
+ else if (method === 'getLeverageTiersPaginated' || method === 'fetchPositions') {
6108
6108
  response = await this[method](symbol, params);
6109
6109
  }
6110
6110
  else {
@@ -81,6 +81,12 @@ class MarketClosed extends OperationRejected {
81
81
  this.name = 'MarketClosed';
82
82
  }
83
83
  }
84
+ class ManualInteractionNeeded extends OperationRejected {
85
+ constructor(message) {
86
+ super(message);
87
+ this.name = 'ManualInteractionNeeded';
88
+ }
89
+ }
84
90
  class InsufficientFunds extends ExchangeError {
85
91
  constructor(message) {
86
92
  super(message);
@@ -231,7 +237,7 @@ class CancelPending extends OperationFailed {
231
237
  this.name = 'CancelPending';
232
238
  }
233
239
  }
234
- var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
240
+ var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
235
241
 
236
242
  exports.AccountNotEnabled = AccountNotEnabled;
237
243
  exports.AccountSuspended = AccountSuspended;
@@ -255,6 +261,7 @@ exports.InvalidAddress = InvalidAddress;
255
261
  exports.InvalidNonce = InvalidNonce;
256
262
  exports.InvalidOrder = InvalidOrder;
257
263
  exports.InvalidProxySettings = InvalidProxySettings;
264
+ exports.ManualInteractionNeeded = ManualInteractionNeeded;
258
265
  exports.MarginModeAlreadySet = MarginModeAlreadySet;
259
266
  exports.MarketClosed = MarketClosed;
260
267
  exports.NetworkError = NetworkError;
@@ -3852,12 +3852,14 @@ class binance extends binance$1 {
3852
3852
  const marketId = this.safeString(ticker, 'symbol');
3853
3853
  const symbol = this.safeSymbol(marketId, market, undefined, marketType);
3854
3854
  const last = this.safeString(ticker, 'lastPrice');
3855
+ const wAvg = this.safeString(ticker, 'weightedAvgPrice');
3855
3856
  const isCoinm = ('baseVolume' in ticker);
3856
3857
  let baseVolume = undefined;
3857
3858
  let quoteVolume = undefined;
3858
3859
  if (isCoinm) {
3859
3860
  baseVolume = this.safeString(ticker, 'baseVolume');
3860
- quoteVolume = this.safeString(ticker, 'volume');
3861
+ // 'volume' field in inverse markets is not quoteVolume, but traded amount (per contracts)
3862
+ quoteVolume = Precise["default"].stringMul(baseVolume, wAvg);
3861
3863
  }
3862
3864
  else {
3863
3865
  baseVolume = this.safeString(ticker, 'volume');
@@ -3873,7 +3875,7 @@ class binance extends binance$1 {
3873
3875
  'bidVolume': this.safeString(ticker, 'bidQty'),
3874
3876
  'ask': this.safeString(ticker, 'askPrice'),
3875
3877
  'askVolume': this.safeString(ticker, 'askQty'),
3876
- 'vwap': this.safeString(ticker, 'weightedAvgPrice'),
3878
+ 'vwap': wAvg,
3877
3879
  'open': this.safeString2(ticker, 'openPrice', 'open'),
3878
3880
  'close': last,
3879
3881
  'last': last,
@@ -851,7 +851,7 @@ class bitfinex extends bitfinex$1 {
851
851
  * @method
852
852
  * @name bitfinex#fetchTickers
853
853
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
854
- * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
854
+ * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
855
855
  * @param {object} [params] extra parameters specific to the exchange API endpoint
856
856
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
857
857
  */
@@ -860,7 +860,7 @@ class bitfinex extends bitfinex$1 {
860
860
  const response = await this.publicGetTickers(params);
861
861
  const result = {};
862
862
  for (let i = 0; i < response.length; i++) {
863
- const ticker = this.parseTicker({ 'result': response[i] });
863
+ const ticker = this.parseTicker(response[i]);
864
864
  const symbol = ticker['symbol'];
865
865
  result[symbol] = ticker;
866
866
  }
@@ -5,6 +5,7 @@ var number = require('./base/functions/number.js');
5
5
  var errors = require('./base/errors.js');
6
6
  var Precise = require('./base/Precise.js');
7
7
  var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
8
+ var totp = require('./base/functions/totp.js');
8
9
 
9
10
  // ---------------------------------------------------------------------------
10
11
  // ---------------------------------------------------------------------------
@@ -2455,6 +2456,9 @@ class bitmex extends bitmex$1 {
2455
2456
  // 'otpToken': '123456', // requires if two-factor auth (OTP) is enabled
2456
2457
  // 'fee': 0.001, // bitcoin network fee
2457
2458
  };
2459
+ if (this.twofa !== undefined) {
2460
+ request['otpToken'] = totp.totp(this.twofa);
2461
+ }
2458
2462
  const response = await this.privatePostUserRequestWithdrawal(this.extend(request, params));
2459
2463
  //
2460
2464
  // {
@@ -753,8 +753,11 @@ class bybit extends bybit$1 {
753
753
  '140069': errors.PermissionDenied,
754
754
  '140070': errors.InvalidOrder,
755
755
  '170001': errors.ExchangeError,
756
- '170007': errors.RequestTimeout,
757
756
  '170005': errors.InvalidOrder,
757
+ '170007': errors.RequestTimeout,
758
+ '170010': errors.InvalidOrder,
759
+ '170011': errors.InvalidOrder,
760
+ '170019': errors.InvalidOrder,
758
761
  '170031': errors.ExchangeError,
759
762
  '170032': errors.ExchangeError,
760
763
  '170033': errors.InsufficientFunds,
@@ -767,6 +770,7 @@ class bybit extends bybit$1 {
767
770
  '170116': errors.InvalidOrder,
768
771
  '170117': errors.InvalidOrder,
769
772
  '170121': errors.InvalidOrder,
773
+ '170124': errors.InvalidOrder,
770
774
  '170130': errors.BadRequest,
771
775
  '170131': errors.InsufficientFunds,
772
776
  '170132': errors.InvalidOrder,
@@ -777,7 +781,6 @@ class bybit extends bybit$1 {
777
781
  '170137': errors.InvalidOrder,
778
782
  '170139': errors.InvalidOrder,
779
783
  '170140': errors.InvalidOrder,
780
- '170124': errors.InvalidOrder,
781
784
  '170141': errors.InvalidOrder,
782
785
  '170142': errors.InvalidOrder,
783
786
  '170143': errors.InvalidOrder,
@@ -802,6 +805,15 @@ class bybit extends bybit$1 {
802
805
  '170198': errors.InvalidOrder,
803
806
  '170199': errors.InvalidOrder,
804
807
  '170200': errors.InvalidOrder,
808
+ '170201': errors.PermissionDenied,
809
+ '170202': errors.InvalidOrder,
810
+ '170203': errors.InvalidOrder,
811
+ '170204': errors.InvalidOrder,
812
+ '170206': errors.InvalidOrder,
813
+ '170210': errors.InvalidOrder,
814
+ '170213': errors.OrderNotFound,
815
+ '170217': errors.InvalidOrder,
816
+ '170218': errors.InvalidOrder,
805
817
  '170221': errors.BadRequest,
806
818
  '170222': errors.RateLimitExceeded,
807
819
  '170223': errors.InsufficientFunds,
@@ -811,18 +823,7 @@ class bybit extends bybit$1 {
811
823
  '170228': errors.InvalidOrder,
812
824
  '170229': errors.InvalidOrder,
813
825
  '170234': errors.ExchangeError,
814
- '170210': errors.InvalidOrder,
815
- '170213': errors.OrderNotFound,
816
- '170217': errors.InvalidOrder,
817
- '170218': errors.InvalidOrder,
818
- '170010': errors.InvalidOrder,
819
- '170011': errors.InvalidOrder,
820
- '170019': errors.InvalidOrder,
821
- '170201': errors.PermissionDenied,
822
- '170202': errors.InvalidOrder,
823
- '170203': errors.InvalidOrder,
824
- '170204': errors.InvalidOrder,
825
- '170206': errors.InvalidOrder,
826
+ '170241': errors.ManualInteractionNeeded,
826
827
  '175000': errors.InvalidOrder,
827
828
  '175001': errors.InvalidOrder,
828
829
  '175002': errors.InvalidOrder,
@@ -91,8 +91,8 @@ class cryptocom extends cryptocom$1 {
91
91
  'fetchTickers': true,
92
92
  'fetchTime': false,
93
93
  'fetchTrades': true,
94
- 'fetchTradingFee': false,
95
- 'fetchTradingFees': false,
94
+ 'fetchTradingFee': true,
95
+ 'fetchTradingFees': true,
96
96
  'fetchTransactionFees': false,
97
97
  'fetchTransactions': false,
98
98
  'fetchTransfers': false,
@@ -193,6 +193,8 @@ class cryptocom extends cryptocom$1 {
193
193
  'private/get-accounts': 10 / 3,
194
194
  'private/get-withdrawal-history': 10 / 3,
195
195
  'private/get-deposit-history': 10 / 3,
196
+ 'private/get-fee-rate': 2,
197
+ 'private/get-instrument-fee-rate': 2,
196
198
  'private/staking/stake': 2,
197
199
  'private/staking/unstake': 2,
198
200
  'private/staking/get-staking-position': 2,
@@ -3019,6 +3021,119 @@ class cryptocom extends cryptocom$1 {
3019
3021
  const result = this.safeDict(response, 'result');
3020
3022
  return this.parseOrder(result, market);
3021
3023
  }
3024
+ async fetchTradingFee(symbol, params = {}) {
3025
+ /**
3026
+ * @method
3027
+ * @name cryptocom#fetchTradingFee
3028
+ * @description fetch the trading fees for a market
3029
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-instrument-fee-rate
3030
+ * @param {string} symbol unified market symbol
3031
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3032
+ * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
3033
+ */
3034
+ await this.loadMarkets();
3035
+ const market = this.market(symbol);
3036
+ const request = {
3037
+ 'instrument_name': market['id'],
3038
+ };
3039
+ const response = await this.v1PrivatePostPrivateGetInstrumentFeeRate(this.extend(request, params));
3040
+ //
3041
+ // {
3042
+ // "id": 1,
3043
+ // "code": 0,
3044
+ // "method": "private/staking/unstake",
3045
+ // "result": {
3046
+ // "staking_id": "1",
3047
+ // "instrument_name": "SOL.staked",
3048
+ // "status": "NEW",
3049
+ // "quantity": "1",
3050
+ // "underlying_inst_name": "SOL",
3051
+ // "reason": "NO_ERROR"
3052
+ // }
3053
+ // }
3054
+ //
3055
+ const data = this.safeDict(response, 'result', {});
3056
+ return this.parseTradingFee(data, market);
3057
+ }
3058
+ async fetchTradingFees(params = {}) {
3059
+ /**
3060
+ * @method
3061
+ * @name cryptocom#fetchTradingFees
3062
+ * @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-fee-rate
3063
+ * @description fetch the trading fees for multiple markets
3064
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3065
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
3066
+ */
3067
+ await this.loadMarkets();
3068
+ const response = await this.v1PrivatePostPrivateGetFeeRate(params);
3069
+ //
3070
+ // {
3071
+ // "id": 1,
3072
+ // "method": "/private/get-fee-rate",
3073
+ // "code": 0,
3074
+ // "result": {
3075
+ // "spot_tier": "3",
3076
+ // "deriv_tier": "3",
3077
+ // "effective_spot_maker_rate_bps": "6.5",
3078
+ // "effective_spot_taker_rate_bps": "6.9",
3079
+ // "effective_deriv_maker_rate_bps": "1.1",
3080
+ // "effective_deriv_taker_rate_bps": "3"
3081
+ // }
3082
+ // }
3083
+ //
3084
+ const result = this.safeDict(response, 'result', {});
3085
+ return this.parseTradingFees(result);
3086
+ }
3087
+ parseTradingFees(response) {
3088
+ //
3089
+ // {
3090
+ // "spot_tier": "3",
3091
+ // "deriv_tier": "3",
3092
+ // "effective_spot_maker_rate_bps": "6.5",
3093
+ // "effective_spot_taker_rate_bps": "6.9",
3094
+ // "effective_deriv_maker_rate_bps": "1.1",
3095
+ // "effective_deriv_taker_rate_bps": "3"
3096
+ // }
3097
+ //
3098
+ const result = {};
3099
+ result['info'] = response;
3100
+ for (let i = 0; i < this.symbols.length; i++) {
3101
+ const symbol = this.symbols[i];
3102
+ const market = this.market(symbol);
3103
+ const isSwap = market['swap'];
3104
+ const takerFeeKey = isSwap ? 'effective_deriv_taker_rate_bps' : 'effective_spot_taker_rate_bps';
3105
+ const makerFeeKey = isSwap ? 'effective_deriv_maker_rate_bps' : 'effective_spot_maker_rate_bps';
3106
+ const tradingFee = {
3107
+ 'info': response,
3108
+ 'symbol': symbol,
3109
+ 'maker': this.parseNumber(Precise["default"].stringDiv(this.safeString(response, makerFeeKey), '10000')),
3110
+ 'taker': this.parseNumber(Precise["default"].stringDiv(this.safeString(response, takerFeeKey), '10000')),
3111
+ 'percentage': undefined,
3112
+ 'tierBased': undefined,
3113
+ };
3114
+ result[symbol] = tradingFee;
3115
+ }
3116
+ return result;
3117
+ }
3118
+ parseTradingFee(fee, market = undefined) {
3119
+ //
3120
+ // {
3121
+ // "instrument_name": "BTC_USD",
3122
+ // "effective_maker_rate_bps": "6.5",
3123
+ // "effective_taker_rate_bps": "6.9"
3124
+ // }
3125
+ //
3126
+ const marketId = this.safeString(fee, 'instrument_name');
3127
+ const symbol = this.safeSymbol(marketId, market);
3128
+ return {
3129
+ 'info': fee,
3130
+ 'symbol': symbol,
3131
+ 'maker': this.parseNumber(Precise["default"].stringDiv(this.safeString(fee, 'effective_maker_rate_bps'), '10000')),
3132
+ 'taker': this.parseNumber(Precise["default"].stringDiv(this.safeString(fee, 'effective_taker_rate_bps'), '10000')),
3133
+ 'percentage': undefined,
3134
+ 'tierBased': undefined,
3135
+ };
3136
+ }
3022
3137
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3023
3138
  const type = this.safeString(api, 0);
3024
3139
  const access = this.safeString(api, 1);