ccxt 4.4.96 → 4.4.98

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 (79) hide show
  1. package/README.md +15 -15
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +2 -1
  4. package/dist/cjs/src/base/Exchange.js +63 -15
  5. package/dist/cjs/src/base/errors.js +8 -1
  6. package/dist/cjs/src/base/functions/number.js +30 -9
  7. package/dist/cjs/src/binance.js +95 -34
  8. package/dist/cjs/src/binancecoinm.js +5 -1
  9. package/dist/cjs/src/binanceus.js +3 -1
  10. package/dist/cjs/src/binanceusdm.js +3 -1
  11. package/dist/cjs/src/bingx.js +1 -1
  12. package/dist/cjs/src/bitget.js +18 -2
  13. package/dist/cjs/src/coinmetro.js +2 -3
  14. package/dist/cjs/src/cryptocom.js +77 -1
  15. package/dist/cjs/src/exmo.js +1 -1
  16. package/dist/cjs/src/foxbit.js +1 -1
  17. package/dist/cjs/src/gate.js +1 -2
  18. package/dist/cjs/src/hashkey.js +39 -0
  19. package/dist/cjs/src/hyperliquid.js +42 -27
  20. package/dist/cjs/src/independentreserve.js +35 -0
  21. package/dist/cjs/src/indodax.js +34 -0
  22. package/dist/cjs/src/kucoin.js +2 -1
  23. package/dist/cjs/src/latoken.js +42 -0
  24. package/dist/cjs/src/luno.js +36 -0
  25. package/dist/cjs/src/mercado.js +34 -0
  26. package/dist/cjs/src/mexc.js +3 -25
  27. package/dist/cjs/src/ndax.js +8 -0
  28. package/dist/cjs/src/okx.js +1 -0
  29. package/dist/cjs/src/phemex.js +36 -31
  30. package/dist/cjs/src/pro/binancecoinm.js +3 -1
  31. package/dist/cjs/src/pro/binanceus.js +3 -1
  32. package/dist/cjs/src/pro/binanceusdm.js +3 -1
  33. package/dist/cjs/src/pro/bybit.js +33 -0
  34. package/js/ccxt.d.ts +3 -3
  35. package/js/ccxt.js +3 -3
  36. package/js/src/abstract/binance.d.ts +3 -0
  37. package/js/src/abstract/binancecoinm.d.ts +3 -0
  38. package/js/src/abstract/binanceus.d.ts +3 -0
  39. package/js/src/abstract/binanceusdm.d.ts +3 -0
  40. package/js/src/abstract/phemex.d.ts +1 -0
  41. package/js/src/base/Exchange.d.ts +11 -3
  42. package/js/src/base/Exchange.js +63 -15
  43. package/js/src/base/errorHierarchy.d.ts +1 -0
  44. package/js/src/base/errorHierarchy.js +1 -0
  45. package/js/src/base/errors.d.ts +5 -1
  46. package/js/src/base/errors.js +8 -2
  47. package/js/src/base/functions/number.js +30 -9
  48. package/js/src/binance.d.ts +1 -0
  49. package/js/src/binance.js +95 -34
  50. package/js/src/binancecoinm.js +5 -1
  51. package/js/src/binanceus.js +3 -1
  52. package/js/src/binanceusdm.js +3 -1
  53. package/js/src/bingx.js +1 -1
  54. package/js/src/bitget.js +18 -2
  55. package/js/src/coinmetro.js +2 -3
  56. package/js/src/cryptocom.d.ts +12 -1
  57. package/js/src/cryptocom.js +77 -1
  58. package/js/src/exmo.js +1 -1
  59. package/js/src/foxbit.js +1 -1
  60. package/js/src/gate.js +1 -2
  61. package/js/src/hashkey.js +39 -0
  62. package/js/src/hyperliquid.js +42 -27
  63. package/js/src/independentreserve.js +35 -0
  64. package/js/src/indodax.js +34 -0
  65. package/js/src/kucoin.js +2 -1
  66. package/js/src/latoken.js +42 -0
  67. package/js/src/luno.js +36 -0
  68. package/js/src/mercado.js +34 -0
  69. package/js/src/mexc.d.ts +0 -1
  70. package/js/src/mexc.js +3 -25
  71. package/js/src/ndax.js +8 -0
  72. package/js/src/okx.js +2 -1
  73. package/js/src/phemex.js +36 -31
  74. package/js/src/pro/binancecoinm.js +3 -1
  75. package/js/src/pro/binanceus.js +3 -1
  76. package/js/src/pro/binanceusdm.js +3 -1
  77. package/js/src/pro/bybit.d.ts +11 -1
  78. package/js/src/pro/bybit.js +33 -0
  79. package/package.json +1 -2
package/js/src/latoken.js CHANGED
@@ -29,6 +29,10 @@ export default class latoken extends Exchange {
29
29
  'swap': false,
30
30
  'future': false,
31
31
  'option': false,
32
+ 'addMargin': false,
33
+ 'borrowCrossMargin': false,
34
+ 'borrowIsolatedMargin': false,
35
+ 'borrowMargin': false,
32
36
  'cancelAllOrders': true,
33
37
  'cancelOrder': true,
34
38
  'closeAllPositions': false,
@@ -38,9 +42,14 @@ export default class latoken extends Exchange {
38
42
  'createStopLimitOrder': true,
39
43
  'createStopMarketOrder': false,
40
44
  'createStopOrder': true,
45
+ 'fetchAllGreeks': false,
41
46
  'fetchBalance': true,
47
+ 'fetchBorrowInterest': false,
48
+ 'fetchBorrowRate': false,
42
49
  'fetchBorrowRateHistories': false,
43
50
  'fetchBorrowRateHistory': false,
51
+ 'fetchBorrowRates': false,
52
+ 'fetchBorrowRatesPerSymbol': false,
44
53
  'fetchCrossBorrowRate': false,
45
54
  'fetchCrossBorrowRates': false,
46
55
  'fetchCurrencies': true,
@@ -55,12 +64,34 @@ export default class latoken extends Exchange {
55
64
  'fetchFundingRate': false,
56
65
  'fetchFundingRateHistory': false,
57
66
  'fetchFundingRates': false,
67
+ 'fetchGreeks': false,
68
+ 'fetchIndexOHLCV': false,
58
69
  'fetchIsolatedBorrowRate': false,
59
70
  'fetchIsolatedBorrowRates': false,
71
+ 'fetchIsolatedPositions': false,
72
+ 'fetchLeverage': false,
73
+ 'fetchLeverages': false,
74
+ 'fetchLeverageTiers': false,
75
+ 'fetchLiquidations': false,
76
+ 'fetchLongShortRatio': false,
77
+ 'fetchLongShortRatioHistory': false,
78
+ 'fetchMarginAdjustmentHistory': false,
60
79
  'fetchMarginMode': false,
80
+ 'fetchMarginModes': false,
81
+ 'fetchMarketLeverageTiers': false,
61
82
  'fetchMarkets': true,
83
+ 'fetchMarkOHLCV': false,
84
+ 'fetchMarkPrice': false,
85
+ 'fetchMarkPrices': false,
86
+ 'fetchMyLiquidations': false,
87
+ 'fetchMySettlementHistory': false,
62
88
  'fetchMyTrades': true,
89
+ 'fetchOpenInterest': false,
90
+ 'fetchOpenInterestHistory': false,
91
+ 'fetchOpenInterests': false,
63
92
  'fetchOpenOrders': true,
93
+ 'fetchOption': false,
94
+ 'fetchOptionChain': false,
64
95
  'fetchOrder': true,
65
96
  'fetchOrderBook': true,
66
97
  'fetchOrders': true,
@@ -71,6 +102,8 @@ export default class latoken extends Exchange {
71
102
  'fetchPositionsForSymbol': false,
72
103
  'fetchPositionsHistory': false,
73
104
  'fetchPositionsRisk': false,
105
+ 'fetchPremiumIndexOHLCV': false,
106
+ 'fetchSettlementHistory': false,
74
107
  'fetchTicker': true,
75
108
  'fetchTickers': true,
76
109
  'fetchTime': true,
@@ -80,6 +113,15 @@ export default class latoken extends Exchange {
80
113
  'fetchTransactions': 'emulated',
81
114
  'fetchTransfer': false,
82
115
  'fetchTransfers': true,
116
+ 'fetchUnderlyingAssets': false,
117
+ 'fetchVolatilityHistory': false,
118
+ 'reduceMargin': false,
119
+ 'repayCrossMargin': false,
120
+ 'repayIsolatedMargin': false,
121
+ 'setLeverage': false,
122
+ 'setMargin': false,
123
+ 'setMarginMode': false,
124
+ 'setPositionMode': false,
83
125
  'transfer': true,
84
126
  },
85
127
  'urls': {
package/js/src/luno.js CHANGED
@@ -32,6 +32,9 @@ export default class luno extends Exchange {
32
32
  'future': false,
33
33
  'option': false,
34
34
  'addMargin': false,
35
+ 'borrowCrossMargin': false,
36
+ 'borrowIsolatedMargin': false,
37
+ 'borrowMargin': false,
35
38
  'cancelOrder': true,
36
39
  'closeAllPositions': false,
37
40
  'closePosition': false,
@@ -39,48 +42,81 @@ export default class luno extends Exchange {
39
42
  'createOrder': true,
40
43
  'createReduceOnlyOrder': false,
41
44
  'fetchAccounts': true,
45
+ 'fetchAllGreeks': false,
42
46
  'fetchBalance': true,
47
+ 'fetchBorrowInterest': false,
48
+ 'fetchBorrowRate': false,
49
+ 'fetchBorrowRateHistories': false,
43
50
  'fetchBorrowRateHistory': false,
51
+ 'fetchBorrowRates': false,
52
+ 'fetchBorrowRatesPerSymbol': false,
44
53
  'fetchClosedOrders': true,
45
54
  'fetchCrossBorrowRate': false,
46
55
  'fetchCrossBorrowRates': false,
47
56
  'fetchCurrencies': true,
48
57
  'fetchDepositAddress': true,
49
58
  'fetchFundingHistory': false,
59
+ 'fetchFundingInterval': false,
60
+ 'fetchFundingIntervals': false,
50
61
  'fetchFundingRate': false,
51
62
  'fetchFundingRateHistory': false,
52
63
  'fetchFundingRates': false,
64
+ 'fetchGreeks': false,
53
65
  'fetchIndexOHLCV': false,
54
66
  'fetchIsolatedBorrowRate': false,
55
67
  'fetchIsolatedBorrowRates': false,
68
+ 'fetchIsolatedPositions': false,
56
69
  'fetchLedger': true,
57
70
  'fetchLeverage': false,
71
+ 'fetchLeverages': false,
58
72
  'fetchLeverageTiers': false,
73
+ 'fetchLiquidations': false,
74
+ 'fetchLongShortRatio': false,
75
+ 'fetchLongShortRatioHistory': false,
76
+ 'fetchMarginAdjustmentHistory': false,
59
77
  'fetchMarginMode': false,
78
+ 'fetchMarginModes': false,
79
+ 'fetchMarketLeverageTiers': false,
60
80
  'fetchMarkets': true,
61
81
  'fetchMarkOHLCV': false,
82
+ 'fetchMarkPrice': false,
83
+ 'fetchMarkPrices': false,
84
+ 'fetchMyLiquidations': false,
85
+ 'fetchMySettlementHistory': false,
62
86
  'fetchMyTrades': true,
63
87
  'fetchOHLCV': true,
88
+ 'fetchOpenInterest': false,
64
89
  'fetchOpenInterestHistory': false,
90
+ 'fetchOpenInterests': false,
65
91
  'fetchOpenOrders': true,
92
+ 'fetchOption': false,
93
+ 'fetchOptionChain': false,
66
94
  'fetchOrder': true,
67
95
  'fetchOrderBook': true,
68
96
  'fetchOrders': true,
69
97
  'fetchPosition': false,
98
+ 'fetchPositionForSymbolWs': false,
70
99
  'fetchPositionHistory': false,
71
100
  'fetchPositionMode': false,
72
101
  'fetchPositions': false,
73
102
  'fetchPositionsForSymbol': false,
103
+ 'fetchPositionsForSymbolWs': false,
74
104
  'fetchPositionsHistory': false,
75
105
  'fetchPositionsRisk': false,
76
106
  'fetchPremiumIndexOHLCV': false,
107
+ 'fetchSettlementHistory': false,
77
108
  'fetchTicker': true,
78
109
  'fetchTickers': true,
79
110
  'fetchTrades': true,
80
111
  'fetchTradingFee': true,
81
112
  'fetchTradingFees': false,
113
+ 'fetchUnderlyingAssets': false,
114
+ 'fetchVolatilityHistory': false,
82
115
  'reduceMargin': false,
116
+ 'repayCrossMargin': false,
117
+ 'repayIsolatedMargin': false,
83
118
  'setLeverage': false,
119
+ 'setMargin': false,
84
120
  'setMarginMode': false,
85
121
  'setPositionMode': false,
86
122
  },
package/js/src/mercado.js CHANGED
@@ -31,6 +31,9 @@ export default class mercado extends Exchange {
31
31
  'future': false,
32
32
  'option': false,
33
33
  'addMargin': false,
34
+ 'borrowCrossMargin': false,
35
+ 'borrowIsolatedMargin': false,
36
+ 'borrowMargin': false,
34
37
  'cancelOrder': true,
35
38
  'closeAllPositions': false,
36
39
  'closePosition': false,
@@ -40,29 +43,54 @@ export default class mercado extends Exchange {
40
43
  'createStopLimitOrder': false,
41
44
  'createStopMarketOrder': false,
42
45
  'createStopOrder': false,
46
+ 'fetchAllGreeks': false,
43
47
  'fetchBalance': true,
48
+ 'fetchBorrowInterest': false,
49
+ 'fetchBorrowRate': false,
50
+ 'fetchBorrowRateHistories': false,
44
51
  'fetchBorrowRateHistory': false,
52
+ 'fetchBorrowRates': false,
53
+ 'fetchBorrowRatesPerSymbol': false,
45
54
  'fetchCrossBorrowRate': false,
46
55
  'fetchCrossBorrowRates': false,
47
56
  'fetchDepositAddress': false,
48
57
  'fetchDepositAddresses': false,
49
58
  'fetchDepositAddressesByNetwork': false,
50
59
  'fetchFundingHistory': false,
60
+ 'fetchFundingInterval': false,
61
+ 'fetchFundingIntervals': false,
51
62
  'fetchFundingRate': false,
52
63
  'fetchFundingRateHistory': false,
53
64
  'fetchFundingRates': false,
65
+ 'fetchGreeks': false,
54
66
  'fetchIndexOHLCV': false,
55
67
  'fetchIsolatedBorrowRate': false,
56
68
  'fetchIsolatedBorrowRates': false,
69
+ 'fetchIsolatedPositions': false,
57
70
  'fetchLeverage': false,
71
+ 'fetchLeverages': false,
58
72
  'fetchLeverageTiers': false,
73
+ 'fetchLiquidations': false,
74
+ 'fetchLongShortRatio': false,
75
+ 'fetchLongShortRatioHistory': false,
76
+ 'fetchMarginAdjustmentHistory': false,
59
77
  'fetchMarginMode': false,
78
+ 'fetchMarginModes': false,
79
+ 'fetchMarketLeverageTiers': false,
60
80
  'fetchMarkets': true,
61
81
  'fetchMarkOHLCV': false,
82
+ 'fetchMarkPrice': false,
83
+ 'fetchMarkPrices': false,
84
+ 'fetchMyLiquidations': false,
85
+ 'fetchMySettlementHistory': false,
62
86
  'fetchMyTrades': 'emulated',
63
87
  'fetchOHLCV': true,
88
+ 'fetchOpenInterest': false,
64
89
  'fetchOpenInterestHistory': false,
90
+ 'fetchOpenInterests': false,
65
91
  'fetchOpenOrders': true,
92
+ 'fetchOption': false,
93
+ 'fetchOptionChain': false,
66
94
  'fetchOrder': true,
67
95
  'fetchOrderBook': true,
68
96
  'fetchOrders': true,
@@ -74,13 +102,19 @@ export default class mercado extends Exchange {
74
102
  'fetchPositionsHistory': false,
75
103
  'fetchPositionsRisk': false,
76
104
  'fetchPremiumIndexOHLCV': false,
105
+ 'fetchSettlementHistory': false,
77
106
  'fetchTicker': true,
78
107
  'fetchTickers': false,
79
108
  'fetchTrades': true,
80
109
  'fetchTradingFee': false,
81
110
  'fetchTradingFees': false,
111
+ 'fetchUnderlyingAssets': false,
112
+ 'fetchVolatilityHistory': false,
82
113
  'reduceMargin': false,
114
+ 'repayCrossMargin': false,
115
+ 'repayIsolatedMargin': false,
83
116
  'setLeverage': false,
117
+ 'setMargin': false,
84
118
  'setMarginMode': false,
85
119
  'setPositionMode': false,
86
120
  'withdraw': true,
package/js/src/mexc.d.ts CHANGED
@@ -100,7 +100,6 @@ export default class mexc extends Exchange {
100
100
  */
101
101
  fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
102
102
  parseTrade(trade: Dict, market?: Market): Trade;
103
- syntheticTradeId(market?: any, timestamp?: any, side?: any, amount?: any, price?: any, orderType?: any, takerOrMaker?: any): string;
104
103
  /**
105
104
  * @method
106
105
  * @name mexc#fetchOHLCV
package/js/src/mexc.js CHANGED
@@ -437,6 +437,7 @@ export default class mexc extends Exchange {
437
437
  },
438
438
  },
439
439
  },
440
+ 'useCcxtTradeId': true,
440
441
  'timeframes': {
441
442
  'spot': {
442
443
  '1m': '1m',
@@ -1717,8 +1718,8 @@ export default class mexc extends Exchange {
1717
1718
  }
1718
1719
  }
1719
1720
  }
1720
- if (id === undefined) {
1721
- id = this.syntheticTradeId(market, timestamp, side, amountString, priceString, type, takerOrMaker);
1721
+ if (id === undefined && this.safeBool(this.options, 'useCcxtTradeId', true)) {
1722
+ id = this.createCcxtTradeId(timestamp, side, amountString, priceString, takerOrMaker);
1722
1723
  }
1723
1724
  return this.safeTrade({
1724
1725
  'id': id,
@@ -1736,29 +1737,6 @@ export default class mexc extends Exchange {
1736
1737
  'info': trade,
1737
1738
  }, market);
1738
1739
  }
1739
- syntheticTradeId(market = undefined, timestamp = undefined, side = undefined, amount = undefined, price = undefined, orderType = undefined, takerOrMaker = undefined) {
1740
- // TODO: can be unified method? this approach is being used by multiple exchanges (mexc, woo-coinsbit, dydx, ...)
1741
- let id = '';
1742
- if (timestamp !== undefined) {
1743
- id = this.numberToString(timestamp) + '-' + this.safeString(market, 'id', '_');
1744
- if (side !== undefined) {
1745
- id += '-' + side;
1746
- }
1747
- if (amount !== undefined) {
1748
- id += '-' + this.numberToString(amount);
1749
- }
1750
- if (price !== undefined) {
1751
- id += '-' + this.numberToString(price);
1752
- }
1753
- if (takerOrMaker !== undefined) {
1754
- id += '-' + takerOrMaker;
1755
- }
1756
- if (orderType !== undefined) {
1757
- id += '-' + orderType;
1758
- }
1759
- }
1760
- return id;
1761
- }
1762
1740
  /**
1763
1741
  * @method
1764
1742
  * @name mexc#fetchOHLCV
package/js/src/ndax.js CHANGED
@@ -32,6 +32,9 @@ export default class ndax extends Exchange {
32
32
  'future': false,
33
33
  'option': false,
34
34
  'addMargin': false,
35
+ 'borrowCrossMargin': false,
36
+ 'borrowIsolatedMargin': false,
37
+ 'borrowMargin': false,
35
38
  'cancelAllOrders': true,
36
39
  'cancelOrder': true,
37
40
  'closeAllPositions': false,
@@ -44,6 +47,7 @@ export default class ndax extends Exchange {
44
47
  'createStopOrder': true,
45
48
  'editOrder': true,
46
49
  'fetchAccounts': true,
50
+ 'fetchAllGreeks': false,
47
51
  'fetchBalance': true,
48
52
  'fetchBorrowInterest': false,
49
53
  'fetchBorrowRate': false,
@@ -74,12 +78,15 @@ export default class ndax extends Exchange {
74
78
  'fetchLeverages': false,
75
79
  'fetchLeverageTiers': false,
76
80
  'fetchLiquidations': false,
81
+ 'fetchLongShortRatio': false,
82
+ 'fetchLongShortRatioHistory': false,
77
83
  'fetchMarginAdjustmentHistory': false,
78
84
  'fetchMarginMode': false,
79
85
  'fetchMarginModes': false,
80
86
  'fetchMarketLeverageTiers': false,
81
87
  'fetchMarkets': true,
82
88
  'fetchMarkOHLCV': false,
89
+ 'fetchMarkPrice': false,
83
90
  'fetchMarkPrices': false,
84
91
  'fetchMyLiquidations': false,
85
92
  'fetchMySettlementHistory': false,
@@ -87,6 +94,7 @@ export default class ndax extends Exchange {
87
94
  'fetchOHLCV': true,
88
95
  'fetchOpenInterest': false,
89
96
  'fetchOpenInterestHistory': false,
97
+ 'fetchOpenInterests': false,
90
98
  'fetchOpenOrders': true,
91
99
  'fetchOption': false,
92
100
  'fetchOptionChain': false,
package/js/src/okx.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/okx.js';
9
- import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable, ManualInteractionNeeded, OperationRejected } from './base/errors.js';
9
+ import { ExchangeError, ExchangeNotAvailable, OnMaintenance, ArgumentsRequired, BadRequest, AccountSuspended, InvalidAddress, DDoSProtection, PermissionDenied, InsufficientFunds, InvalidNonce, InvalidOrder, OrderNotFound, AuthenticationError, RequestTimeout, BadSymbol, RateLimitExceeded, NetworkError, CancelPending, NotSupported, AccountNotEnabled, ContractUnavailable, ManualInteractionNeeded, OperationRejected, RestrictedLocation } from './base/errors.js';
10
10
  import { Precise } from './base/Precise.js';
11
11
  import { TICK_SIZE } from './base/functions/number.js';
12
12
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
@@ -739,6 +739,7 @@ export default class okx extends Exchange {
739
739
  '51137': InvalidOrder,
740
740
  '51138': InvalidOrder,
741
741
  '51139': InvalidOrder,
742
+ '51155': RestrictedLocation,
742
743
  '51156': BadRequest,
743
744
  '51159': BadRequest,
744
745
  '51162': InvalidOrder,
package/js/src/phemex.js CHANGED
@@ -268,6 +268,7 @@ export default class phemex extends Exchange {
268
268
  // swap
269
269
  'orders/replace': 1,
270
270
  'g-orders/replace': 1,
271
+ 'g-orders/create': 1,
271
272
  'positions/leverage': 5,
272
273
  'g-positions/leverage': 5,
273
274
  'g-positions/switch-pos-mode-sync': 5,
@@ -1222,7 +1223,8 @@ export default class phemex extends Exchange {
1222
1223
  // 'id': 123456789, // optional request id
1223
1224
  };
1224
1225
  let response = undefined;
1225
- if (market['linear'] && market['settle'] === 'USDT') {
1226
+ const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
1227
+ if (market['linear'] && isStableSettled) {
1226
1228
  response = await this.v2GetMdV2Orderbook(this.extend(request, params));
1227
1229
  }
1228
1230
  else {
@@ -1366,7 +1368,8 @@ export default class phemex extends Exchange {
1366
1368
  };
1367
1369
  const until = this.safeInteger2(params, 'until', 'to');
1368
1370
  params = this.omit(params, ['until']);
1369
- const usesSpecialFromToEndpoint = ((market['linear'] || market['settle'] === 'USDT')) && ((since !== undefined) || (until !== undefined));
1371
+ const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
1372
+ const usesSpecialFromToEndpoint = ((market['linear'] || isStableSettled)) && ((since !== undefined) || (until !== undefined));
1370
1373
  let maxLimit = 1000;
1371
1374
  if (usesSpecialFromToEndpoint) {
1372
1375
  maxLimit = 2000;
@@ -1376,7 +1379,7 @@ export default class phemex extends Exchange {
1376
1379
  }
1377
1380
  request['limit'] = Math.min(limit, maxLimit);
1378
1381
  let response = undefined;
1379
- if (market['linear'] || market['settle'] === 'USDT') {
1382
+ if (market['linear'] || isStableSettled) {
1380
1383
  if ((until !== undefined) || (since !== undefined)) {
1381
1384
  const candleDuration = this.parseTimeframe(timeframe);
1382
1385
  if (since !== undefined) {
@@ -1651,7 +1654,8 @@ export default class phemex extends Exchange {
1651
1654
  // 'id': 123456789, // optional request id
1652
1655
  };
1653
1656
  let response = undefined;
1654
- if (market['linear'] && market['settle'] === 'USDT') {
1657
+ const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
1658
+ if (market['linear'] && isStableSettled) {
1655
1659
  response = await this.v2GetMdV2Trade(this.extend(request, params));
1656
1660
  }
1657
1661
  else {
@@ -1896,7 +1900,7 @@ export default class phemex extends Exchange {
1896
1900
  }
1897
1901
  id = this.safeString2(trade, 'execId', 'execID');
1898
1902
  orderId = this.safeString(trade, 'orderID');
1899
- if (market['settle'] === 'USDT') {
1903
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
1900
1904
  const sideId = this.safeStringLower(trade, 'side');
1901
1905
  if ((sideId === 'buy') || (sideId === 'sell')) {
1902
1906
  side = sideId;
@@ -2671,6 +2675,7 @@ export default class phemex extends Exchange {
2671
2675
  const stopLossDefined = (stopLoss !== undefined);
2672
2676
  const takeProfit = this.safeValue(params, 'takeProfit');
2673
2677
  const takeProfitDefined = (takeProfit !== undefined);
2678
+ const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
2674
2679
  if (clientOrderId === undefined) {
2675
2680
  const brokerId = this.safeString(this.options, 'brokerId', 'CCXT123456');
2676
2681
  if (brokerId !== undefined) {
@@ -2683,7 +2688,7 @@ export default class phemex extends Exchange {
2683
2688
  }
2684
2689
  const triggerPrice = this.safeStringN(params, ['stopPx', 'stopPrice', 'triggerPrice']);
2685
2690
  if (triggerPrice !== undefined) {
2686
- if (market['settle'] === 'USDT') {
2691
+ if (isStableSettled) {
2687
2692
  request['stopPxRp'] = this.priceToPrecision(symbol, triggerPrice);
2688
2693
  }
2689
2694
  else {
@@ -2750,7 +2755,7 @@ export default class phemex extends Exchange {
2750
2755
  }
2751
2756
  posSide = this.capitalize(posSide);
2752
2757
  request['posSide'] = posSide;
2753
- if (market['settle'] === 'USDT') {
2758
+ if (isStableSettled) {
2754
2759
  request['orderQtyRq'] = amount;
2755
2760
  }
2756
2761
  else {
@@ -2789,7 +2794,7 @@ export default class phemex extends Exchange {
2789
2794
  if (stopLossTriggerPrice === undefined) {
2790
2795
  throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order');
2791
2796
  }
2792
- if (market['settle'] === 'USDT') {
2797
+ if (isStableSettled) {
2793
2798
  request['stopLossRp'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
2794
2799
  }
2795
2800
  else {
@@ -2809,7 +2814,7 @@ export default class phemex extends Exchange {
2809
2814
  if (takeProfitTriggerPrice === undefined) {
2810
2815
  throw new InvalidOrder(this.id + ' createOrder() requires a trigger price in params["takeProfit"]["triggerPrice"] for a take profit order');
2811
2816
  }
2812
- if (market['settle'] === 'USDT') {
2817
+ if (isStableSettled) {
2813
2818
  request['takeProfitRp'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
2814
2819
  }
2815
2820
  else {
@@ -2827,7 +2832,7 @@ export default class phemex extends Exchange {
2827
2832
  }
2828
2833
  }
2829
2834
  if ((type === 'Limit') || (type === 'StopLimit') || (type === 'LimitIfTouched')) {
2830
- if (market['settle'] === 'USDT') {
2835
+ if (isStableSettled) {
2831
2836
  request['priceRp'] = this.priceToPrecision(symbol, price);
2832
2837
  }
2833
2838
  else {
@@ -2837,7 +2842,7 @@ export default class phemex extends Exchange {
2837
2842
  }
2838
2843
  const takeProfitPrice = this.safeString(params, 'takeProfitPrice');
2839
2844
  if (takeProfitPrice !== undefined) {
2840
- if (market['settle'] === 'USDT') {
2845
+ if (isStableSettled) {
2841
2846
  request['takeProfitRp'] = this.priceToPrecision(symbol, takeProfitPrice);
2842
2847
  }
2843
2848
  else {
@@ -2847,7 +2852,7 @@ export default class phemex extends Exchange {
2847
2852
  }
2848
2853
  const stopLossPrice = this.safeString(params, 'stopLossPrice');
2849
2854
  if (stopLossPrice !== undefined) {
2850
- if (market['settle'] === 'USDT') {
2855
+ if (isStableSettled) {
2851
2856
  request['stopLossRp'] = this.priceToPrecision(symbol, stopLossPrice);
2852
2857
  }
2853
2858
  else {
@@ -2856,7 +2861,7 @@ export default class phemex extends Exchange {
2856
2861
  params = this.omit(params, 'stopLossPrice');
2857
2862
  }
2858
2863
  let response = undefined;
2859
- if (market['settle'] === 'USDT') {
2864
+ if (isStableSettled) {
2860
2865
  response = await this.privatePostGOrders(this.extend(request, params));
2861
2866
  }
2862
2867
  else if (market['contract']) {
@@ -2967,7 +2972,7 @@ export default class phemex extends Exchange {
2967
2972
  };
2968
2973
  const clientOrderId = this.safeString2(params, 'clientOrderId', 'clOrdID');
2969
2974
  params = this.omit(params, ['clientOrderId', 'clOrdID']);
2970
- const isUSDTSettled = (market['settle'] === 'USDT');
2975
+ const isStableSettled = (market['settle'] === 'USDT') || (market['settle'] === 'USDC');
2971
2976
  if (clientOrderId !== undefined) {
2972
2977
  request['clOrdID'] = clientOrderId;
2973
2978
  }
@@ -2975,7 +2980,7 @@ export default class phemex extends Exchange {
2975
2980
  request['orderID'] = id;
2976
2981
  }
2977
2982
  if (price !== undefined) {
2978
- if (isUSDTSettled) {
2983
+ if (isStableSettled) {
2979
2984
  request['priceRp'] = this.priceToPrecision(market['symbol'], price);
2980
2985
  }
2981
2986
  else {
@@ -2989,7 +2994,7 @@ export default class phemex extends Exchange {
2989
2994
  request['baseQtyEV'] = finalQty;
2990
2995
  }
2991
2996
  else if (amount !== undefined) {
2992
- if (isUSDTSettled) {
2997
+ if (isStableSettled) {
2993
2998
  request['orderQtyRq'] = this.amountToPrecision(market['symbol'], amount);
2994
2999
  }
2995
3000
  else {
@@ -2998,7 +3003,7 @@ export default class phemex extends Exchange {
2998
3003
  }
2999
3004
  const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPx', 'stopPrice']);
3000
3005
  if (triggerPrice !== undefined) {
3001
- if (isUSDTSettled) {
3006
+ if (isStableSettled) {
3002
3007
  request['stopPxRp'] = this.priceToPrecision(symbol, triggerPrice);
3003
3008
  }
3004
3009
  else {
@@ -3007,7 +3012,7 @@ export default class phemex extends Exchange {
3007
3012
  }
3008
3013
  params = this.omit(params, ['triggerPrice', 'stopPx', 'stopPrice']);
3009
3014
  let response = undefined;
3010
- if (isUSDTSettled) {
3015
+ if (isStableSettled) {
3011
3016
  const posSide = this.safeString(params, 'posSide');
3012
3017
  if (posSide === undefined) {
3013
3018
  request['posSide'] = 'Merged';
@@ -3052,7 +3057,7 @@ export default class phemex extends Exchange {
3052
3057
  request['orderID'] = id;
3053
3058
  }
3054
3059
  let response = undefined;
3055
- if (market['settle'] === 'USDT') {
3060
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
3056
3061
  const posSide = this.safeString(params, 'posSide');
3057
3062
  if (posSide === undefined) {
3058
3063
  request['posSide'] = 'Merged';
@@ -3094,7 +3099,7 @@ export default class phemex extends Exchange {
3094
3099
  request['untriggerred'] = trigger;
3095
3100
  }
3096
3101
  let response = undefined;
3097
- if (market['settle'] === 'USDT') {
3102
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
3098
3103
  response = await this.privateDeleteGOrdersAll(this.extend(request, params));
3099
3104
  //
3100
3105
  // {
@@ -3160,7 +3165,7 @@ export default class phemex extends Exchange {
3160
3165
  request['orderID'] = id;
3161
3166
  }
3162
3167
  let response = undefined;
3163
- if (market['settle'] === 'USDT') {
3168
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
3164
3169
  response = await this.privateGetApiDataGFuturesOrdersByOrderId(this.extend(request, params));
3165
3170
  }
3166
3171
  else if (market['spot']) {
@@ -3216,7 +3221,7 @@ export default class phemex extends Exchange {
3216
3221
  request['limit'] = limit;
3217
3222
  }
3218
3223
  let response = undefined;
3219
- if (market['settle'] === 'USDT') {
3224
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
3220
3225
  request['currency'] = market['settle'];
3221
3226
  response = await this.privateGetExchangeOrderV2OrderList(this.extend(request, params));
3222
3227
  }
@@ -3255,7 +3260,7 @@ export default class phemex extends Exchange {
3255
3260
  };
3256
3261
  let response = undefined;
3257
3262
  try {
3258
- if (market['settle'] === 'USDT') {
3263
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
3259
3264
  response = await this.privateGetGOrdersActiveList(this.extend(request, params));
3260
3265
  }
3261
3266
  else if (market['swap']) {
@@ -4120,8 +4125,8 @@ export default class phemex extends Exchange {
4120
4125
  request['limit'] = limit;
4121
4126
  }
4122
4127
  let response = undefined;
4123
- const isUsdt = market['settle'] === 'USDT';
4124
- if (isUsdt) {
4128
+ const isStableSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
4129
+ if (isStableSettled) {
4125
4130
  response = await this.privateGetApiDataGFuturesFundingFees(this.extend(request, params));
4126
4131
  }
4127
4132
  else {
@@ -4174,8 +4179,8 @@ export default class phemex extends Exchange {
4174
4179
  return value;
4175
4180
  }
4176
4181
  // it was confirmed by phemex support, that USDT contracts use direct amounts in funding fees, while USD & INVERSE needs 'valueScale'
4177
- const isUsdt = market['settle'] === 'USDT';
4178
- if (!isUsdt) {
4182
+ const isStableSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
4183
+ if (!isStableSettled) {
4179
4184
  const currency = this.safeCurrency(currencyCode);
4180
4185
  const scale = this.safeString(currency['info'], 'valueScale');
4181
4186
  const tickPrecision = this.parsePrecision(scale);
@@ -4374,8 +4379,8 @@ export default class phemex extends Exchange {
4374
4379
  }
4375
4380
  await this.loadMarkets();
4376
4381
  const market = this.market(symbol);
4377
- if (!market['swap'] || market['settle'] === 'USDT') {
4378
- throw new BadSymbol(this.id + ' setMarginMode() supports swap (non USDT based) contracts only');
4382
+ if (!market['swap'] || market['settle'] === 'USDT' || market['settle'] === 'USDC') {
4383
+ throw new BadSymbol(this.id + ' setMarginMode() supports swap (non USDT/USDC based) contracts only');
4379
4384
  }
4380
4385
  marginMode = marginMode.toLowerCase();
4381
4386
  if (marginMode !== 'isolated' && marginMode !== 'cross') {
@@ -4631,7 +4636,7 @@ export default class phemex extends Exchange {
4631
4636
  'symbol': market['id'],
4632
4637
  };
4633
4638
  let response = undefined;
4634
- if (market['settle'] === 'USDT') {
4639
+ if (market['settle'] === 'USDT' || market['settle'] === 'USDC') {
4635
4640
  if (!isHedged && longLeverageRr === undefined && shortLeverageRr === undefined) {
4636
4641
  request['leverageRr'] = leverage;
4637
4642
  }
@@ -4873,7 +4878,7 @@ export default class phemex extends Exchange {
4873
4878
  }
4874
4879
  await this.loadMarkets();
4875
4880
  const market = this.market(symbol);
4876
- const isUsdtSettled = market['settle'] === 'USDT';
4881
+ const isUsdtSettled = market['settle'] === 'USDT' || market['settle'] === 'USDC';
4877
4882
  if (!market['swap']) {
4878
4883
  throw new BadRequest(this.id + ' fetchFundingRateHistory() supports swap contracts only');
4879
4884
  }
@@ -22,7 +22,9 @@ export default class binancecoinm extends binance {
22
22
  'doc': 'https://developers.binance.com/en',
23
23
  },
24
24
  'options': {
25
- 'fetchMarkets': ['inverse'],
25
+ 'fetchMarkets': {
26
+ 'types': ['inverse'],
27
+ },
26
28
  'defaultSubType': 'inverse',
27
29
  },
28
30
  });