ccxt 4.2.88 → 4.2.90

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 (164) hide show
  1. package/README.md +3 -3
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +1062 -241
  4. package/dist/ccxt.browser.min.js +6 -4
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/ascendex.js +3 -0
  7. package/dist/cjs/src/base/Exchange.js +53 -7
  8. package/dist/cjs/src/base/functions/crypto.js +37 -0
  9. package/dist/cjs/src/base/functions/rsa.js +19 -4
  10. package/dist/cjs/src/binance.js +92 -9
  11. package/dist/cjs/src/bingx.js +101 -1
  12. package/dist/cjs/src/bitfinex2.js +1 -0
  13. package/dist/cjs/src/bitflyer.js +2 -0
  14. package/dist/cjs/src/bitget.js +9 -1
  15. package/dist/cjs/src/bitmart.js +2 -0
  16. package/dist/cjs/src/bitmex.js +1 -0
  17. package/dist/cjs/src/bitrue.js +1 -0
  18. package/dist/cjs/src/bitstamp.js +83 -99
  19. package/dist/cjs/src/blofin.js +2 -0
  20. package/dist/cjs/src/bybit.js +63 -0
  21. package/dist/cjs/src/coinbase.js +48 -24
  22. package/dist/cjs/src/coinbaseinternational.js +1 -0
  23. package/dist/cjs/src/coinex.js +102 -8
  24. package/dist/cjs/src/coinsph.js +2 -0
  25. package/dist/cjs/src/cryptocom.js +1 -0
  26. package/dist/cjs/src/delta.js +1 -0
  27. package/dist/cjs/src/digifinex.js +3 -0
  28. package/dist/cjs/src/exmo.js +1 -0
  29. package/dist/cjs/src/gate.js +4 -0
  30. package/dist/cjs/src/gemini.js +10 -9
  31. package/dist/cjs/src/hitbtc.js +3 -0
  32. package/dist/cjs/src/htx.js +3 -0
  33. package/dist/cjs/src/hyperliquid.js +1 -0
  34. package/dist/cjs/src/kucoin.js +40 -15
  35. package/dist/cjs/src/kucoinfutures.js +34 -3
  36. package/dist/cjs/src/latoken.js +4 -0
  37. package/dist/cjs/src/lbank.js +3 -1
  38. package/dist/cjs/src/luno.js +2 -0
  39. package/dist/cjs/src/mexc.js +55 -6
  40. package/dist/cjs/src/okx.js +159 -8
  41. package/dist/cjs/src/phemex.js +1 -0
  42. package/dist/cjs/src/pro/bitget.js +2 -0
  43. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +48 -0
  44. package/dist/cjs/src/timex.js +2 -0
  45. package/dist/cjs/src/woo.js +1 -0
  46. package/js/ccxt.d.ts +1 -1
  47. package/js/ccxt.js +1 -1
  48. package/js/src/abstract/bingx.d.ts +2 -0
  49. package/js/src/abstract/bybit.d.ts +2 -0
  50. package/js/src/ascendex.d.ts +3 -3
  51. package/js/src/ascendex.js +3 -0
  52. package/js/src/base/Exchange.d.ts +13 -8
  53. package/js/src/base/Exchange.js +53 -7
  54. package/js/src/base/functions/crypto.js +37 -0
  55. package/js/src/base/functions/rsa.d.ts +1 -1
  56. package/js/src/base/functions/rsa.js +21 -5
  57. package/js/src/base/types.d.ts +35 -1
  58. package/js/src/bigone.d.ts +2 -2
  59. package/js/src/binance.d.ts +6 -15
  60. package/js/src/binance.js +92 -9
  61. package/js/src/bingx.d.ts +3 -2
  62. package/js/src/bingx.js +101 -1
  63. package/js/src/bit2c.d.ts +2 -2
  64. package/js/src/bitbank.d.ts +2 -2
  65. package/js/src/bitfinex.d.ts +2 -2
  66. package/js/src/bitfinex2.d.ts +3 -3
  67. package/js/src/bitfinex2.js +1 -0
  68. package/js/src/bitflyer.d.ts +2 -7
  69. package/js/src/bitflyer.js +2 -0
  70. package/js/src/bitget.d.ts +6 -9
  71. package/js/src/bitget.js +9 -1
  72. package/js/src/bitmart.d.ts +4 -14
  73. package/js/src/bitmart.js +2 -0
  74. package/js/src/bitmex.d.ts +2 -2
  75. package/js/src/bitmex.js +1 -0
  76. package/js/src/bitopro.d.ts +3 -3
  77. package/js/src/bitrue.d.ts +2 -2
  78. package/js/src/bitrue.js +1 -0
  79. package/js/src/bitso.d.ts +2 -2
  80. package/js/src/bitstamp.d.ts +7 -19
  81. package/js/src/bitstamp.js +83 -99
  82. package/js/src/bitteam.d.ts +2 -2
  83. package/js/src/bitvavo.d.ts +3 -3
  84. package/js/src/bl3p.d.ts +2 -2
  85. package/js/src/blockchaincom.d.ts +2 -2
  86. package/js/src/blofin.d.ts +2 -7
  87. package/js/src/blofin.js +2 -0
  88. package/js/src/bybit.d.ts +7 -15
  89. package/js/src/bybit.js +63 -0
  90. package/js/src/cex.d.ts +3 -3
  91. package/js/src/coinbase.d.ts +2 -2
  92. package/js/src/coinbase.js +48 -24
  93. package/js/src/coinbaseinternational.d.ts +2 -2
  94. package/js/src/coinbaseinternational.js +1 -0
  95. package/js/src/coinbasepro.d.ts +3 -3
  96. package/js/src/coincheck.d.ts +2 -2
  97. package/js/src/coinex.d.ts +7 -19
  98. package/js/src/coinex.js +102 -8
  99. package/js/src/coinlist.d.ts +3 -3
  100. package/js/src/coinmate.d.ts +2 -9
  101. package/js/src/coinmetro.d.ts +2 -2
  102. package/js/src/coinone.d.ts +2 -2
  103. package/js/src/coinsph.d.ts +4 -14
  104. package/js/src/coinsph.js +2 -0
  105. package/js/src/cryptocom.js +1 -0
  106. package/js/src/currencycom.d.ts +3 -3
  107. package/js/src/delta.d.ts +2 -2
  108. package/js/src/delta.js +1 -0
  109. package/js/src/deribit.d.ts +3 -3
  110. package/js/src/digifinex.d.ts +4 -14
  111. package/js/src/digifinex.js +3 -0
  112. package/js/src/exmo.d.ts +3 -3
  113. package/js/src/exmo.js +1 -0
  114. package/js/src/gate.d.ts +6 -9
  115. package/js/src/gate.js +4 -0
  116. package/js/src/gemini.d.ts +3 -3
  117. package/js/src/gemini.js +10 -9
  118. package/js/src/hitbtc.d.ts +5 -15
  119. package/js/src/hitbtc.js +3 -0
  120. package/js/src/hollaex.d.ts +3 -3
  121. package/js/src/htx.d.ts +4 -14
  122. package/js/src/htx.js +3 -0
  123. package/js/src/huobijp.d.ts +2 -2
  124. package/js/src/hyperliquid.d.ts +2 -2
  125. package/js/src/hyperliquid.js +1 -0
  126. package/js/src/idex.d.ts +3 -3
  127. package/js/src/independentreserve.d.ts +2 -2
  128. package/js/src/kraken.d.ts +3 -10
  129. package/js/src/kucoin.d.ts +3 -10
  130. package/js/src/kucoin.js +40 -15
  131. package/js/src/kucoinfutures.d.ts +2 -9
  132. package/js/src/kucoinfutures.js +34 -3
  133. package/js/src/kuna.d.ts +2 -2
  134. package/js/src/latoken.d.ts +7 -8
  135. package/js/src/latoken.js +4 -0
  136. package/js/src/lbank.d.ts +4 -9
  137. package/js/src/lbank.js +3 -1
  138. package/js/src/luno.d.ts +2 -7
  139. package/js/src/luno.js +2 -0
  140. package/js/src/lykke.d.ts +2 -2
  141. package/js/src/mexc.d.ts +3 -3
  142. package/js/src/mexc.js +55 -6
  143. package/js/src/ndax.d.ts +2 -2
  144. package/js/src/oceanex.d.ts +2 -2
  145. package/js/src/okcoin.d.ts +2 -2
  146. package/js/src/okx.d.ts +5 -14
  147. package/js/src/okx.js +159 -8
  148. package/js/src/onetrading.d.ts +3 -3
  149. package/js/src/phemex.d.ts +2 -2
  150. package/js/src/phemex.js +1 -0
  151. package/js/src/poloniex.d.ts +3 -3
  152. package/js/src/pro/bitget.js +2 -0
  153. package/js/src/pro/bitvavo.d.ts +2 -2
  154. package/js/src/probit.d.ts +2 -2
  155. package/js/src/timex.d.ts +4 -14
  156. package/js/src/timex.js +2 -0
  157. package/js/src/upbit.d.ts +2 -9
  158. package/js/src/wazirx.d.ts +2 -2
  159. package/js/src/whitebit.d.ts +3 -3
  160. package/js/src/woo.d.ts +3 -3
  161. package/js/src/woo.js +1 -0
  162. package/js/src/yobit.d.ts +2 -2
  163. package/package.json +1 -1
  164. package/skip-tests.json +6 -1
@@ -3366,6 +3366,8 @@ class digifinex extends digifinex$1 {
3366
3366
  'symbol': symbol,
3367
3367
  'maker': this.safeNumber(fee, 'maker_fee_rate'),
3368
3368
  'taker': this.safeNumber(fee, 'taker_fee_rate'),
3369
+ 'percentage': undefined,
3370
+ 'tierBased': undefined,
3369
3371
  };
3370
3372
  }
3371
3373
  async fetchPositions(symbols = undefined, params = {}) {
@@ -4133,6 +4135,7 @@ class digifinex extends digifinex$1 {
4133
4135
  'info': data,
4134
4136
  'symbol': this.safeSymbol(marketId, market, undefined, 'swap'),
4135
4137
  'type': (rawType === 1) ? 'add' : 'reduce',
4138
+ 'marginMode': 'isolated',
4136
4139
  'amount': this.safeNumber(data, 'amount'),
4137
4140
  'total': undefined,
4138
4141
  'code': market['settle'],
@@ -264,6 +264,7 @@ class exmo extends exmo$1 {
264
264
  'info': data,
265
265
  'symbol': this.safeSymbol(undefined, market),
266
266
  'type': undefined,
267
+ 'marginMode': 'isolated',
267
268
  'amount': undefined,
268
269
  'total': undefined,
269
270
  'code': this.safeValue(market, 'quote'),
@@ -120,6 +120,7 @@ class gate extends gate$1 {
120
120
  'fetchLeverages': true,
121
121
  'fetchLeverageTiers': true,
122
122
  'fetchLiquidations': true,
123
+ 'fetchMarginAdjustmentHistory': false,
123
124
  'fetchMarginMode': false,
124
125
  'fetchMarketLeverageTiers': true,
125
126
  'fetchMarkets': true,
@@ -2071,6 +2072,8 @@ class gate extends gate$1 {
2071
2072
  'symbol': this.safeString(market, 'symbol'),
2072
2073
  'maker': this.safeNumber(info, makerKey),
2073
2074
  'taker': this.safeNumber(info, takerKey),
2075
+ 'percentage': undefined,
2076
+ 'tierBased': undefined,
2074
2077
  };
2075
2078
  }
2076
2079
  async fetchTransactionFees(codes = undefined, params = {}) {
@@ -6117,6 +6120,7 @@ class gate extends gate$1 {
6117
6120
  'info': data,
6118
6121
  'symbol': market['symbol'],
6119
6122
  'type': undefined,
6123
+ 'marginMode': 'isolated',
6120
6124
  'amount': undefined,
6121
6125
  'total': total,
6122
6126
  'code': this.safeValue(market, 'quote'),
@@ -107,6 +107,7 @@ class gemini extends gemini$1 {
107
107
  // https://github.com/ccxt/ccxt/issues/7874
108
108
  // https://github.com/ccxt/ccxt/issues/7894
109
109
  'web': 'https://docs.gemini.com',
110
+ 'webExchange': 'https://exchange.gemini.com',
110
111
  },
111
112
  'fees': [
112
113
  'https://gemini.com/api-fee-schedule',
@@ -644,7 +645,7 @@ class gemini extends gemini$1 {
644
645
  let quoteId = undefined;
645
646
  let settleId = undefined;
646
647
  let tickSize = undefined;
647
- let increment = undefined;
648
+ let amountPrecision = undefined;
648
649
  let minSize = undefined;
649
650
  let status = undefined;
650
651
  let swap = false;
@@ -655,9 +656,9 @@ class gemini extends gemini$1 {
655
656
  const isArray = (Array.isArray(response));
656
657
  if (!isString && !isArray) {
657
658
  marketId = this.safeStringLower(response, 'symbol');
659
+ amountPrecision = this.safeNumber(response, 'tick_size'); // right, exchange has an imperfect naming and this turns out to be an amount-precision
660
+ tickSize = this.safeNumber(response, 'quote_increment'); // this is tick-size actually
658
661
  minSize = this.safeNumber(response, 'min_order_size');
659
- tickSize = this.safeNumber(response, 'tick_size');
660
- increment = this.safeNumber(response, 'quote_increment');
661
662
  status = this.parseMarketActive(this.safeString(response, 'status'));
662
663
  baseId = this.safeString(response, 'base_currency');
663
664
  quoteId = this.safeString(response, 'quote_currency');
@@ -670,9 +671,9 @@ class gemini extends gemini$1 {
670
671
  }
671
672
  else {
672
673
  marketId = this.safeStringLower(response, 0);
673
- minSize = this.safeNumber(response, 3);
674
- tickSize = this.parseNumber(this.parsePrecision(this.safeString(response, 1)));
675
- increment = this.parseNumber(this.parsePrecision(this.safeString(response, 2)));
674
+ tickSize = this.parseNumber(this.parsePrecision(this.safeString(response, 1))); // priceTickDecimalPlaces
675
+ amountPrecision = this.parseNumber(this.parsePrecision(this.safeString(response, 2))); // quantityTickDecimalPlaces
676
+ minSize = this.safeNumber(response, 3); // quantityMinimum
676
677
  }
677
678
  const marketIdUpper = marketId.toUpperCase();
678
679
  const isPerp = (marketIdUpper.indexOf('PERP') >= 0);
@@ -727,8 +728,8 @@ class gemini extends gemini$1 {
727
728
  'strike': undefined,
728
729
  'optionType': undefined,
729
730
  'precision': {
730
- 'price': increment,
731
- 'amount': tickSize,
731
+ 'price': tickSize,
732
+ 'amount': amountPrecision,
732
733
  },
733
734
  'limits': {
734
735
  'leverage': {
@@ -1802,7 +1803,7 @@ class gemini extends gemini$1 {
1802
1803
  if (apiKey.indexOf('account') < 0) {
1803
1804
  throw new errors.AuthenticationError(this.id + ' sign() requires an account-key, master-keys are not-supported');
1804
1805
  }
1805
- const nonce = this.nonce();
1806
+ const nonce = this.nonce().toString();
1806
1807
  const request = this.extend({
1807
1808
  'request': url,
1808
1809
  'nonce': nonce,
@@ -1625,6 +1625,8 @@ class hitbtc extends hitbtc$1 {
1625
1625
  'symbol': symbol,
1626
1626
  'taker': taker,
1627
1627
  'maker': maker,
1628
+ 'percentage': undefined,
1629
+ 'tierBased': undefined,
1628
1630
  };
1629
1631
  }
1630
1632
  async fetchTradingFee(symbol, params = {}) {
@@ -3319,6 +3321,7 @@ class hitbtc extends hitbtc$1 {
3319
3321
  'info': data,
3320
3322
  'symbol': market['symbol'],
3321
3323
  'type': undefined,
3324
+ 'marginMode': 'isolated',
3322
3325
  'amount': undefined,
3323
3326
  'total': undefined,
3324
3327
  'code': this.safeString(currencyInfo, 'code'),
@@ -84,6 +84,7 @@ class htx extends htx$1 {
84
84
  'fetchLeverage': false,
85
85
  'fetchLeverageTiers': true,
86
86
  'fetchLiquidations': true,
87
+ 'fetchMarginAdjustmentHistory': false,
87
88
  'fetchMarketLeverageTiers': true,
88
89
  'fetchMarkets': true,
89
90
  'fetchMarkOHLCV': true,
@@ -1500,6 +1501,8 @@ class htx extends htx$1 {
1500
1501
  'symbol': this.safeSymbol(marketId, market),
1501
1502
  'maker': this.safeNumber(fee, 'actualMakerRate'),
1502
1503
  'taker': this.safeNumber(fee, 'actualTakerRate'),
1504
+ 'percentage': undefined,
1505
+ 'tierBased': undefined,
1503
1506
  };
1504
1507
  }
1505
1508
  async fetchTradingFee(symbol, params = {}) {
@@ -2137,6 +2137,7 @@ class hyperliquid extends hyperliquid$1 {
2137
2137
  'info': data,
2138
2138
  'symbol': this.safeSymbol(undefined, market),
2139
2139
  'type': undefined,
2140
+ 'marginMode': 'isolated',
2140
2141
  'amount': undefined,
2141
2142
  'total': undefined,
2142
2143
  'code': this.safeString(market, 'settle'),
@@ -73,6 +73,7 @@ class kucoin extends kucoin$1 {
73
73
  'fetchL3OrderBook': true,
74
74
  'fetchLedger': true,
75
75
  'fetchLeverageTiers': false,
76
+ 'fetchMarginAdjustmentHistory': false,
76
77
  'fetchMarginMode': false,
77
78
  'fetchMarketLeverageTiers': false,
78
79
  'fetchMarkets': true,
@@ -3524,9 +3525,9 @@ class kucoin extends kucoin$1 {
3524
3525
  }
3525
3526
  parseBalanceHelper(entry) {
3526
3527
  const account = this.account();
3527
- account['used'] = this.safeString(entry, 'holdBalance');
3528
- account['free'] = this.safeString(entry, 'availableBalance');
3529
- account['total'] = this.safeString(entry, 'totalBalance');
3528
+ account['used'] = this.safeString2(entry, 'holdBalance', 'hold');
3529
+ account['free'] = this.safeString2(entry, 'availableBalance', 'available');
3530
+ account['total'] = this.safeString2(entry, 'totalBalance', 'total');
3530
3531
  const debt = this.safeString(entry, 'liability');
3531
3532
  const interest = this.safeString(entry, 'interest');
3532
3533
  account['debt'] = Precise["default"].stringAdd(debt, interest);
@@ -3584,7 +3585,7 @@ class kucoin extends kucoin$1 {
3584
3585
  response = await this.privateGetAccounts(this.extend(request, query));
3585
3586
  }
3586
3587
  //
3587
- // Spot and Cross
3588
+ // Spot
3588
3589
  //
3589
3590
  // {
3590
3591
  // "code": "200000",
@@ -3600,35 +3601,59 @@ class kucoin extends kucoin$1 {
3600
3601
  // ]
3601
3602
  // }
3602
3603
  //
3604
+ // Cross
3605
+ //
3606
+ // {
3607
+ // "code": "200000",
3608
+ // "data": {
3609
+ // "debtRatio": "0",
3610
+ // "accounts": [
3611
+ // {
3612
+ // "currency": "USDT",
3613
+ // "totalBalance": "5",
3614
+ // "availableBalance": "5",
3615
+ // "holdBalance": "0",
3616
+ // "liability": "0",
3617
+ // "maxBorrowSize": "20"
3618
+ // },
3619
+ // ]
3620
+ // }
3621
+ // }
3622
+ //
3603
3623
  // Isolated
3604
3624
  //
3605
3625
  // {
3606
3626
  // "code": "200000",
3607
3627
  // "data": {
3608
- // "totalConversionBalance": "0",
3609
- // "liabilityConversionBalance": "0",
3628
+ // "totalAssetOfQuoteCurrency": "0",
3629
+ // "totalLiabilityOfQuoteCurrency": "0",
3630
+ // "timestamp": 1712085661155,
3610
3631
  // "assets": [
3611
3632
  // {
3612
3633
  // "symbol": "MANA-USDT",
3613
- // "status": "CLEAR",
3634
+ // "status": "EFFECTIVE",
3614
3635
  // "debtRatio": "0",
3615
3636
  // "baseAsset": {
3616
3637
  // "currency": "MANA",
3617
- // "totalBalance": "0",
3618
- // "holdBalance": "0",
3619
- // "availableBalance": "0",
3638
+ // "borrowEnabled": true,
3639
+ // "transferInEnabled": true,
3640
+ // "total": "0",
3641
+ // "hold": "0",
3642
+ // "available": "0",
3620
3643
  // "liability": "0",
3621
3644
  // "interest": "0",
3622
- // "borrowableAmount": "0"
3645
+ // "maxBorrowSize": "0"
3623
3646
  // },
3624
3647
  // "quoteAsset": {
3625
3648
  // "currency": "USDT",
3626
- // "totalBalance": "0",
3627
- // "holdBalance": "0",
3628
- // "availableBalance": "0",
3649
+ // "borrowEnabled": true,
3650
+ // "transferInEnabled": true,
3651
+ // "total": "0",
3652
+ // "hold": "0",
3653
+ // "available": "0",
3629
3654
  // "liability": "0",
3630
3655
  // "interest": "0",
3631
- // "borrowableAmount": "0"
3656
+ // "maxBorrowSize": "0"
3632
3657
  // }
3633
3658
  // },
3634
3659
  // ...
@@ -67,6 +67,7 @@ class kucoinfutures extends kucoinfutures$1 {
67
67
  'fetchL3OrderBook': true,
68
68
  'fetchLedger': true,
69
69
  'fetchLeverageTiers': false,
70
+ 'fetchMarginAdjustmentHistory': false,
70
71
  'fetchMarginMode': false,
71
72
  'fetchMarketLeverageTiers': true,
72
73
  'fetchMarkets': true,
@@ -1613,14 +1614,18 @@ class kucoinfutures extends kucoinfutures$1 {
1613
1614
  const crossMode = this.safeValue(info, 'crossMode');
1614
1615
  const mode = crossMode ? 'cross' : 'isolated';
1615
1616
  const marketId = this.safeString(market, 'symbol');
1617
+ const timestamp = this.safeInteger(info, 'currentTimestamp');
1616
1618
  return {
1617
1619
  'info': info,
1618
- 'direction': undefined,
1619
- 'mode': mode,
1620
+ 'symbol': this.safeSymbol(marketId, market),
1621
+ 'type': undefined,
1622
+ 'marginMode': mode,
1620
1623
  'amount': undefined,
1624
+ 'total': undefined,
1621
1625
  'code': this.safeCurrencyCode(currencyId),
1622
- 'symbol': this.safeSymbol(marketId, market),
1623
1626
  'status': undefined,
1627
+ 'timestamp': timestamp,
1628
+ 'datetime': this.iso8601(timestamp),
1624
1629
  };
1625
1630
  }
1626
1631
  async fetchOrdersByStatus(status, symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1761,6 +1766,32 @@ class kucoinfutures extends kucoinfutures$1 {
1761
1766
  }
1762
1767
  return await this.fetchOrdersByStatus('done', symbol, since, limit, params);
1763
1768
  }
1769
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1770
+ /**
1771
+ * @method
1772
+ * @name kucoinfutures#fetchOpenOrders
1773
+ * @description fetches information on multiple open orders made by the user
1774
+ * @see https://docs.kucoin.com/futures/#get-order-list
1775
+ * @see https://docs.kucoin.com/futures/#get-untriggered-stop-order-list
1776
+ * @param {string} symbol unified market symbol of the market orders were made in
1777
+ * @param {int} [since] the earliest time in ms to fetch orders for
1778
+ * @param {int} [limit] the maximum number of order structures to retrieve
1779
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1780
+ * @param {int} [params.till] end time in ms
1781
+ * @param {string} [params.side] buy or sell
1782
+ * @param {string} [params.type] limit, or market
1783
+ * @param {boolean} [params.trigger] set to true to retrieve untriggered stop orders
1784
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1785
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1786
+ */
1787
+ await this.loadMarkets();
1788
+ let paginate = false;
1789
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
1790
+ if (paginate) {
1791
+ return await this.fetchPaginatedCallDynamic('fetchOpenOrders', symbol, since, limit, params);
1792
+ }
1793
+ return await this.fetchOrdersByStatus('open', symbol, since, limit, params);
1794
+ }
1764
1795
  async fetchOrder(id = undefined, symbol = undefined, params = {}) {
1765
1796
  /**
1766
1797
  * @method
@@ -875,6 +875,8 @@ class latoken extends latoken$1 {
875
875
  'symbol': market['symbol'],
876
876
  'maker': this.safeNumber(response, 'makerFee'),
877
877
  'taker': this.safeNumber(response, 'takerFee'),
878
+ 'percentage': undefined,
879
+ 'tierBased': undefined,
878
880
  };
879
881
  }
880
882
  async fetchPrivateTradingFee(symbol, params = {}) {
@@ -898,6 +900,8 @@ class latoken extends latoken$1 {
898
900
  'symbol': market['symbol'],
899
901
  'maker': this.safeNumber(response, 'makerFee'),
900
902
  'taker': this.safeNumber(response, 'takerFee'),
903
+ 'percentage': undefined,
904
+ 'tierBased': undefined,
901
905
  };
902
906
  }
903
907
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1241,6 +1241,8 @@ class lbank extends lbank$1 {
1241
1241
  'symbol': symbol,
1242
1242
  'maker': this.safeNumber(fee, 'makerCommission'),
1243
1243
  'taker': this.safeNumber(fee, 'takerCommission'),
1244
+ 'percentage': undefined,
1245
+ 'tierBased': undefined,
1244
1246
  };
1245
1247
  }
1246
1248
  async fetchTradingFee(symbol, params = {}) {
@@ -1255,7 +1257,7 @@ class lbank extends lbank$1 {
1255
1257
  */
1256
1258
  const market = this.market(symbol);
1257
1259
  const result = await this.fetchTradingFees(this.extend(params, { 'category': market['id'] }));
1258
- return result;
1260
+ return this.safeDict(result, symbol);
1259
1261
  }
1260
1262
  async fetchTradingFees(params = {}) {
1261
1263
  /**
@@ -894,6 +894,8 @@ class luno extends luno$1 {
894
894
  'symbol': symbol,
895
895
  'maker': this.safeNumber(response, 'maker_fee'),
896
896
  'taker': this.safeNumber(response, 'taker_fee'),
897
+ 'percentage': undefined,
898
+ 'tierBased': undefined,
897
899
  };
898
900
  }
899
901
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
@@ -75,6 +75,7 @@ class mexc extends mexc$1 {
75
75
  'fetchLeverage': true,
76
76
  'fetchLeverages': false,
77
77
  'fetchLeverageTiers': true,
78
+ 'fetchMarginAdjustmentHistory': false,
78
79
  'fetchMarginMode': false,
79
80
  'fetchMarketLeverageTiers': undefined,
80
81
  'fetchMarkets': true,
@@ -4299,8 +4300,9 @@ class mexc extends mexc$1 {
4299
4300
  /**
4300
4301
  * @method
4301
4302
  * @name mexc#fetchLeverageTiers
4302
- * @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
4303
- * @param {string[]|undefined} symbols list of unified market symbols
4303
+ * @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes, if a market has a leverage tier of 0, then the leverage tiers cannot be obtained for this market
4304
+ * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-the-contract-information
4305
+ * @param {string[]} [symbols] list of unified market symbols
4304
4306
  * @param {object} [params] extra parameters specific to the exchange API endpoint
4305
4307
  * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
4306
4308
  */
@@ -4356,10 +4358,44 @@ class mexc extends mexc$1 {
4356
4358
  return this.parseLeverageTiers(data, symbols, 'symbol');
4357
4359
  }
4358
4360
  parseMarketLeverageTiers(info, market = undefined) {
4359
- /**
4360
- @param info {object} Exchange response for 1 market
4361
- @param market {object} CCXT market
4362
- */
4361
+ //
4362
+ // {
4363
+ // "symbol": "BTC_USDT",
4364
+ // "displayName": "BTC_USDT永续",
4365
+ // "displayNameEn": "BTC_USDT SWAP",
4366
+ // "positionOpenType": 3,
4367
+ // "baseCoin": "BTC",
4368
+ // "quoteCoin": "USDT",
4369
+ // "settleCoin": "USDT",
4370
+ // "contractSize": 0.0001,
4371
+ // "minLeverage": 1,
4372
+ // "maxLeverage": 125,
4373
+ // "priceScale": 2,
4374
+ // "volScale": 0,
4375
+ // "amountScale": 4,
4376
+ // "priceUnit": 0.5,
4377
+ // "volUnit": 1,
4378
+ // "minVol": 1,
4379
+ // "maxVol": 1000000,
4380
+ // "bidLimitPriceRate": 0.1,
4381
+ // "askLimitPriceRate": 0.1,
4382
+ // "takerFeeRate": 0.0006,
4383
+ // "makerFeeRate": 0.0002,
4384
+ // "maintenanceMarginRate": 0.004,
4385
+ // "initialMarginRate": 0.008,
4386
+ // "riskBaseVol": 10000,
4387
+ // "riskIncrVol": 200000,
4388
+ // "riskIncrMmr": 0.004,
4389
+ // "riskIncrImr": 0.004,
4390
+ // "riskLevelLimit": 5,
4391
+ // "priceCoefficientVariation": 0.1,
4392
+ // "indexOrigin": ["BINANCE","GATEIO","HUOBI","MXC"],
4393
+ // "state": 0, // 0 enabled, 1 delivery, 2 completed, 3 offline, 4 pause
4394
+ // "isNew": false,
4395
+ // "isHot": true,
4396
+ // "isHidden": false
4397
+ // }
4398
+ //
4363
4399
  let maintenanceMarginRate = this.safeString(info, 'maintenanceMarginRate');
4364
4400
  let initialMarginRate = this.safeString(info, 'initialMarginRate');
4365
4401
  const maxVol = this.safeString(info, 'maxVol');
@@ -4369,6 +4405,19 @@ class mexc extends mexc$1 {
4369
4405
  let floor = '0';
4370
4406
  const tiers = [];
4371
4407
  const quoteId = this.safeString(info, 'quoteCoin');
4408
+ if (riskIncrVol === '0') {
4409
+ return [
4410
+ {
4411
+ 'tier': 0,
4412
+ 'currency': this.safeCurrencyCode(quoteId),
4413
+ 'notionalFloor': undefined,
4414
+ 'notionalCap': undefined,
4415
+ 'maintenanceMarginRate': undefined,
4416
+ 'maxLeverage': this.safeNumber(info, 'maxLeverage'),
4417
+ 'info': info,
4418
+ },
4419
+ ];
4420
+ }
4372
4421
  while (Precise["default"].stringLt(floor, maxVol)) {
4373
4422
  const cap = Precise["default"].stringAdd(floor, riskIncrVol);
4374
4423
  tiers.push({