ccxt 4.4.69 → 4.4.71

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 (80) hide show
  1. package/README.md +5 -8
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +1 -6
  4. package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +22 -1
  6. package/dist/cjs/src/binance.js +107 -102
  7. package/dist/cjs/src/bingx.js +64 -42
  8. package/dist/cjs/src/bitget.js +50 -340
  9. package/dist/cjs/src/bitmart.js +15 -1
  10. package/dist/cjs/src/bitopro.js +1 -0
  11. package/dist/cjs/src/bitrue.js +1 -0
  12. package/dist/cjs/src/bybit.js +7 -0
  13. package/dist/cjs/src/cex.js +1 -0
  14. package/dist/cjs/src/coinbase.js +24 -4
  15. package/dist/cjs/src/coinbaseexchange.js +1 -0
  16. package/dist/cjs/src/deribit.js +1 -0
  17. package/dist/cjs/src/hashkey.js +4 -2
  18. package/dist/cjs/src/hyperliquid.js +18 -7
  19. package/dist/cjs/src/kraken.js +83 -6
  20. package/dist/cjs/src/kucoin.js +4 -2
  21. package/dist/cjs/src/mexc.js +8 -4
  22. package/dist/cjs/src/okx.js +62 -46
  23. package/dist/cjs/src/poloniex.js +1311 -81
  24. package/dist/cjs/src/poloniexfutures.js +1 -1
  25. package/dist/cjs/src/pro/binance.js +94 -94
  26. package/dist/cjs/src/pro/bingx.js +63 -52
  27. package/dist/cjs/src/pro/bitget.js +40 -7
  28. package/dist/cjs/src/pro/bybit.js +86 -38
  29. package/dist/cjs/src/pro/poloniexfutures.js +1 -1
  30. package/dist/cjs/src/tradeogre.js +22 -4
  31. package/dist/cjs/src/whitebit.js +4 -2
  32. package/js/ccxt.d.ts +3 -9
  33. package/js/ccxt.js +2 -6
  34. package/js/src/abstract/bingx.d.ts +1 -0
  35. package/js/src/abstract/bitmart.d.ts +1 -0
  36. package/js/src/abstract/bybit.d.ts +4 -0
  37. package/js/src/abstract/myokx.d.ts +3 -0
  38. package/js/src/abstract/okx.d.ts +3 -0
  39. package/js/src/abstract/poloniex.d.ts +36 -0
  40. package/js/src/abstract/poloniexfutures.js +6 -0
  41. package/js/src/abstract/tradeogre.d.ts +1 -1
  42. package/js/src/base/Exchange.d.ts +11 -2
  43. package/js/src/base/Exchange.js +22 -1
  44. package/js/src/base/types.d.ts +33 -2
  45. package/js/src/binance.d.ts +98 -97
  46. package/js/src/binance.js +107 -102
  47. package/js/src/bingx.js +64 -42
  48. package/js/src/bitget.d.ts +0 -1
  49. package/js/src/bitget.js +50 -340
  50. package/js/src/bitmart.d.ts +1 -0
  51. package/js/src/bitmart.js +15 -1
  52. package/js/src/bitopro.js +1 -0
  53. package/js/src/bitrue.js +1 -0
  54. package/js/src/bybit.js +7 -0
  55. package/js/src/cex.js +1 -0
  56. package/js/src/coinbase.js +24 -4
  57. package/js/src/coinbaseexchange.js +1 -0
  58. package/js/src/deribit.js +1 -0
  59. package/js/src/hashkey.js +4 -2
  60. package/js/src/hyperliquid.js +18 -7
  61. package/js/src/kraken.d.ts +1 -0
  62. package/js/src/kraken.js +83 -6
  63. package/js/src/kucoin.js +4 -2
  64. package/js/src/mexc.js +8 -4
  65. package/js/src/okx.d.ts +1 -0
  66. package/js/src/okx.js +62 -46
  67. package/js/src/poloniex.d.ts +109 -1
  68. package/js/src/poloniex.js +1311 -81
  69. package/js/src/poloniexfutures.js +6 -0
  70. package/js/src/pro/binance.d.ts +94 -94
  71. package/js/src/pro/binance.js +94 -94
  72. package/js/src/pro/bingx.js +63 -52
  73. package/js/src/pro/bitget.js +40 -7
  74. package/js/src/pro/bybit.d.ts +1 -0
  75. package/js/src/pro/bybit.js +86 -38
  76. package/js/src/pro/poloniexfutures.js +6 -0
  77. package/js/src/tradeogre.d.ts +1 -0
  78. package/js/src/tradeogre.js +22 -4
  79. package/js/src/whitebit.js +4 -2
  80. package/package.json +1 -1
package/js/src/bitmart.js CHANGED
@@ -39,6 +39,7 @@ export default class bitmart extends Exchange {
39
39
  'createOrder': true,
40
40
  'createOrders': true,
41
41
  'createPostOnlyOrder': true,
42
+ 'createReduceOnlyOrder': true,
42
43
  'createStopLimitOrder': false,
43
44
  'createStopMarketOrder': false,
44
45
  'createStopOrder': false,
@@ -256,6 +257,7 @@ export default class bitmart extends Exchange {
256
257
  'contract/private/submit-tp-sl-order': 2.5,
257
258
  'contract/private/modify-plan-order': 2.5,
258
259
  'contract/private/modify-preset-plan-order': 2.5,
260
+ 'contract/private/modify-limit-order': 2.5,
259
261
  'contract/private/modify-tp-sl-order': 2.5,
260
262
  'contract/private/submit-trail-order': 2.5,
261
263
  'contract/private/cancel-trail-order': 1.5, // weight is not provided by the exchange, is set as ordinary order
@@ -5116,6 +5118,7 @@ export default class bitmart extends Exchange {
5116
5118
  * @see https://developer-pro.bitmart.com/en/futuresv2/#modify-plan-order-signed
5117
5119
  * @see https://developer-pro.bitmart.com/en/futuresv2/#modify-tp-sl-order-signed
5118
5120
  * @see https://developer-pro.bitmart.com/en/futuresv2/#modify-preset-plan-order-signed
5121
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#modify-limit-order-signed
5119
5122
  * @param {string} id order id
5120
5123
  * @param {string} symbol unified symbol of the market to edit an order in
5121
5124
  * @param {string} type 'market' or 'limit'
@@ -5151,6 +5154,7 @@ export default class bitmart extends Exchange {
5151
5154
  const isTakeProfit = takeProfitPrice !== undefined;
5152
5155
  const isPresetStopLoss = presetStopLoss !== undefined;
5153
5156
  const isPresetTakeProfit = presetTakeProfit !== undefined;
5157
+ const isLimitOrder = (type === 'limit');
5154
5158
  const request = {
5155
5159
  'symbol': market['id'],
5156
5160
  };
@@ -5226,8 +5230,18 @@ export default class bitmart extends Exchange {
5226
5230
  // }
5227
5231
  //
5228
5232
  }
5233
+ else if (isLimitOrder) {
5234
+ request['order_id'] = this.parseToInt(id); // reparse id as int this endpoint is the only one requiring it
5235
+ if (amount !== undefined) {
5236
+ request['size'] = this.amountToPrecision(symbol, amount);
5237
+ }
5238
+ if (price !== undefined) {
5239
+ request['price'] = this.priceToPrecision(symbol, price);
5240
+ }
5241
+ response = await this.privatePostContractPrivateModifyLimitOrder(this.extend(request, params));
5242
+ }
5229
5243
  else {
5230
- throw new NotSupported(this.id + ' editOrder() only supports trigger, stop loss and take profit orders');
5244
+ throw new NotSupported(this.id + ' editOrder() only supports limit, trigger, stop loss and take profit orders');
5231
5245
  }
5232
5246
  const data = this.safeDict(response, 'data', {});
5233
5247
  return this.parseOrder(data, market);
package/js/src/bitopro.js CHANGED
@@ -31,6 +31,7 @@ export default class bitopro extends Exchange {
31
31
  'closeAllPositions': false,
32
32
  'closePosition': false,
33
33
  'createOrder': true,
34
+ 'createReduceOnlyOrder': false,
34
35
  'createStopOrder': true,
35
36
  'createTriggerOrder': true,
36
37
  'editOrder': false,
package/js/src/bitrue.js CHANGED
@@ -33,6 +33,7 @@ export default class bitrue extends Exchange {
33
33
  'createMarketOrderWithCost': false,
34
34
  'createMarketSellOrderWithCost': false,
35
35
  'createOrder': true,
36
+ 'createReduceOnlyOrder': true,
36
37
  'createStopLimitOrder': true,
37
38
  'createStopMarketOrder': true,
38
39
  'createStopOrder': true,
package/js/src/bybit.js CHANGED
@@ -246,6 +246,8 @@ export default class bybit extends Exchange {
246
246
  // institutional lending
247
247
  'v5/ins-loan/product-infos': 5,
248
248
  'v5/ins-loan/ensure-tokens-convert': 5,
249
+ // earn
250
+ 'v5/earn/product': 5,
249
251
  },
250
252
  },
251
253
  'private': {
@@ -404,6 +406,9 @@ export default class bybit extends Exchange {
404
406
  'v5/broker/earnings-info': 5,
405
407
  'v5/broker/account-info': 5,
406
408
  'v5/broker/asset/query-sub-member-deposit-record': 10,
409
+ // earn
410
+ 'v5/earn/order': 5,
411
+ 'v5/earn/position': 5,
407
412
  },
408
413
  'post': {
409
414
  // spot
@@ -539,6 +544,8 @@ export default class bybit extends Exchange {
539
544
  'v5/broker/award/info': 5,
540
545
  'v5/broker/award/distribute-award': 5,
541
546
  'v5/broker/award/distribution-record': 5,
547
+ // earn
548
+ 'v5/earn/place-order': 5,
542
549
  },
543
550
  },
544
551
  },
package/js/src/cex.js CHANGED
@@ -27,6 +27,7 @@ export default class cex extends Exchange {
27
27
  'cancelAllOrders': true,
28
28
  'cancelOrder': true,
29
29
  'createOrder': true,
30
+ 'createReduceOnlyOrder': false,
30
31
  'createStopOrder': true,
31
32
  'createTriggerOrder': true,
32
33
  'fetchAccounts': true,
@@ -322,6 +322,7 @@ export default class coinbase extends Exchange {
322
322
  'INSUFFICIENT_FUND': BadRequest,
323
323
  'PERMISSION_DENIED': PermissionDenied,
324
324
  'INVALID_ARGUMENT': BadRequest,
325
+ 'PREVIEW_STOP_PRICE_ABOVE_LAST_TRADE_PRICE': InvalidOrder,
325
326
  },
326
327
  'broad': {
327
328
  'request timestamp expired': InvalidNonce,
@@ -5080,20 +5081,39 @@ export default class coinbase extends Exchange {
5080
5081
  // ]
5081
5082
  // }
5082
5083
  // or
5083
- // {
5084
+ // {
5085
+ // "success": false,
5086
+ // "error_response": {
5084
5087
  // "error": "UNKNOWN_FAILURE_REASON",
5085
5088
  // "message": "",
5086
5089
  // "error_details": "",
5087
- // "preview_failure_reason": "PREVIEW_STOP_PRICE_BELOW_LAST_TRADE_PRICE"
5088
- // }
5090
+ // "preview_failure_reason": "PREVIEW_STOP_PRICE_ABOVE_LAST_TRADE_PRICE"
5091
+ // },
5092
+ // "order_configuration": {
5093
+ // "stop_limit_stop_limit_gtc": {
5094
+ // "base_size": "0.0001",
5095
+ // "limit_price": "2000",
5096
+ // "stop_price": "2005",
5097
+ // "stop_direction": "STOP_DIRECTION_STOP_DOWN",
5098
+ // "reduce_only": false
5099
+ // }
5100
+ // }
5101
+ // }
5089
5102
  //
5090
5103
  let errorCode = this.safeString(response, 'error');
5091
5104
  if (errorCode !== undefined) {
5092
- const errorMessage = this.safeString2(response, 'error_description', 'preview_failure_reason');
5105
+ const errorMessage = this.safeString2(response, 'error_description', 'error');
5093
5106
  this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
5094
5107
  this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessage, feedback);
5095
5108
  throw new ExchangeError(feedback);
5096
5109
  }
5110
+ const errorResponse = this.safeDict(response, 'error_response');
5111
+ if (errorResponse !== undefined) {
5112
+ const errorMessageInner = this.safeString2(errorResponse, 'preview_failure_reason', 'preview_failure_reason');
5113
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorMessageInner, feedback);
5114
+ this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessageInner, feedback);
5115
+ throw new ExchangeError(feedback);
5116
+ }
5097
5117
  const errors = this.safeList(response, 'errors');
5098
5118
  if (errors !== undefined) {
5099
5119
  if (Array.isArray(errors)) {
@@ -29,6 +29,7 @@ export default class coinbaseexchange extends Exchange {
29
29
  'cancelOrder': true,
30
30
  'createDepositAddress': true,
31
31
  'createOrder': true,
32
+ 'createReduceOnlyOrder': false,
32
33
  'createStopLimitOrder': true,
33
34
  'createStopMarketOrder': true,
34
35
  'createStopOrder': true,
package/js/src/deribit.js CHANGED
@@ -34,6 +34,7 @@ export default class deribit extends Exchange {
34
34
  'cancelOrders': false,
35
35
  'createDepositAddress': true,
36
36
  'createOrder': true,
37
+ 'createReduceOnlyOrder': true,
37
38
  'createStopLimitOrder': true,
38
39
  'createStopMarketOrder': true,
39
40
  'createStopOrder': true,
package/js/src/hashkey.js CHANGED
@@ -2441,8 +2441,10 @@ export default class hashkey extends Exchange {
2441
2441
  if (!market['spot']) {
2442
2442
  throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() is supported for spot markets only');
2443
2443
  }
2444
- params['cost'] = cost;
2445
- return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
2444
+ const req = {
2445
+ 'cost': cost,
2446
+ };
2447
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, this.extend(req, params));
2446
2448
  }
2447
2449
  /**
2448
2450
  * @method
@@ -1807,12 +1807,13 @@ export default class hyperliquid extends Exchange {
1807
1807
  const isTrigger = (stopLossPrice || takeProfitPrice);
1808
1808
  const reduceOnly = this.safeBool(orderParams, 'reduceOnly', false);
1809
1809
  orderParams = this.omit(orderParams, ['slippage', 'timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice', 'clientOrderId', 'client_id', 'postOnly', 'reduceOnly']);
1810
- let px = price.toString();
1810
+ let px = this.numberToString(price);
1811
1811
  if (isMarket) {
1812
- px = (isBuy) ? Precise.stringMul(price.toString(), Precise.stringAdd('1', slippage)) : Precise.stringMul(price.toString(), Precise.stringSub('1', slippage));
1812
+ px = (isBuy) ? Precise.stringMul(px, Precise.stringAdd('1', slippage)) : Precise.stringMul(px, Precise.stringSub('1', slippage));
1813
+ px = this.priceToPrecision(symbol, px);
1813
1814
  }
1814
1815
  else {
1815
- px = this.priceToPrecision(symbol, price.toString());
1816
+ px = this.priceToPrecision(symbol, px);
1816
1817
  }
1817
1818
  const sz = this.amountToPrecision(symbol, amount);
1818
1819
  const orderType = {};
@@ -2324,6 +2325,11 @@ export default class hyperliquid extends Exchange {
2324
2325
  }
2325
2326
  const totalAmount = this.safeString2(entry, 'origSz', 'totalSz');
2326
2327
  const remaining = this.safeString(entry, 'sz');
2328
+ const tif = this.safeStringUpper(entry, 'tif');
2329
+ let postOnly = undefined;
2330
+ if (tif !== undefined) {
2331
+ postOnly = (tif === 'ALO');
2332
+ }
2327
2333
  return this.safeOrder({
2328
2334
  'info': order,
2329
2335
  'id': this.safeString(entry, 'oid'),
@@ -2334,8 +2340,8 @@ export default class hyperliquid extends Exchange {
2334
2340
  'lastUpdateTimestamp': this.safeInteger(order, 'statusTimestamp'),
2335
2341
  'symbol': symbol,
2336
2342
  'type': this.parseOrderType(this.safeStringLower(entry, 'orderType')),
2337
- 'timeInForce': this.safeStringUpper(entry, 'tif'),
2338
- 'postOnly': undefined,
2343
+ 'timeInForce': tif,
2344
+ 'postOnly': postOnly,
2339
2345
  'reduceOnly': this.safeBool(entry, 'reduceOnly'),
2340
2346
  'side': side,
2341
2347
  'price': this.safeString(entry, 'limitPx'),
@@ -2457,6 +2463,11 @@ export default class hyperliquid extends Exchange {
2457
2463
  side = (side === 'A') ? 'sell' : 'buy';
2458
2464
  }
2459
2465
  const fee = this.safeString(trade, 'fee');
2466
+ let takerOrMaker = undefined;
2467
+ const crossed = this.safeBool(trade, 'crossed');
2468
+ if (crossed !== undefined) {
2469
+ takerOrMaker = crossed ? 'taker' : 'maker';
2470
+ }
2460
2471
  return this.safeTrade({
2461
2472
  'info': trade,
2462
2473
  'timestamp': timestamp,
@@ -2466,7 +2477,7 @@ export default class hyperliquid extends Exchange {
2466
2477
  'order': this.safeString(trade, 'oid'),
2467
2478
  'type': undefined,
2468
2479
  'side': side,
2469
- 'takerOrMaker': undefined,
2480
+ 'takerOrMaker': takerOrMaker,
2470
2481
  'price': price,
2471
2482
  'amount': amount,
2472
2483
  'cost': undefined,
@@ -3040,7 +3051,7 @@ export default class hyperliquid extends Exchange {
3040
3051
  'tagTo': undefined,
3041
3052
  'tagFrom': undefined,
3042
3053
  'type': undefined,
3043
- 'amount': this.safeInteger(delta, 'usdc'),
3054
+ 'amount': this.safeNumber(delta, 'usdc'),
3044
3055
  'currency': undefined,
3045
3056
  'status': this.safeString(transaction, 'status'),
3046
3057
  'updated': undefined,
@@ -43,6 +43,7 @@ export default class kraken extends Exchange {
43
43
  * @returns {object} an associative dictionary of currencies
44
44
  */
45
45
  fetchCurrencies(params?: {}): Promise<Currencies>;
46
+ safeCurrencyCode(currencyId: Str, currency?: Currency): Str;
46
47
  /**
47
48
  * @method
48
49
  * @name kraken#fetchTradingFee
package/js/src/kraken.js CHANGED
@@ -222,13 +222,13 @@ export default class kraken extends Exchange {
222
222
  },
223
223
  },
224
224
  'commonCurrencies': {
225
+ // about X & Z prefixes and .S & .M suffixes, see comment under fetchCurrencies
225
226
  'LUNA': 'LUNC',
226
227
  'LUNA2': 'LUNA',
227
228
  'REPV2': 'REP',
228
229
  'REP': 'REPV1',
229
230
  'UST': 'USTC',
230
231
  'XBT': 'BTC',
231
- 'XBT.M': 'BTC.M',
232
232
  'XDG': 'DOGE',
233
233
  },
234
234
  'options': {
@@ -768,9 +768,48 @@ export default class kraken extends Exchange {
768
768
  // {
769
769
  // "error": [],
770
770
  // "result": {
771
- // "BCH": {
771
+ // "ATOM": {
772
772
  // "aclass": "currency",
773
- // "altname": "BCH",
773
+ // "altname": "ATOM",
774
+ // "collateral_value": "0.7",
775
+ // "decimals": 8,
776
+ // "display_decimals": 6,
777
+ // "margin_rate": 0.02,
778
+ // "status": "enabled",
779
+ // },
780
+ // "ATOM.S": {
781
+ // "aclass": "currency",
782
+ // "altname": "ATOM.S",
783
+ // "decimals": 8,
784
+ // "display_decimals": 6,
785
+ // "status": "enabled",
786
+ // },
787
+ // "XXBT": {
788
+ // "aclass": "currency",
789
+ // "altname": "XBT",
790
+ // "decimals": 10,
791
+ // "display_decimals": 5,
792
+ // "margin_rate": 0.01,
793
+ // "status": "enabled",
794
+ // },
795
+ // "XETH": {
796
+ // "aclass": "currency",
797
+ // "altname": "ETH",
798
+ // "decimals": 10,
799
+ // "display_decimals": 5
800
+ // "margin_rate": 0.02,
801
+ // "status": "enabled",
802
+ // },
803
+ // "XBT.M": {
804
+ // "aclass": "currency",
805
+ // "altname": "XBT.M",
806
+ // "decimals": 10,
807
+ // "display_decimals": 5
808
+ // "status": "enabled",
809
+ // },
810
+ // "ETH.M": {
811
+ // "aclass": "currency",
812
+ // "altname": "ETH.M",
774
813
  // "decimals": 10,
775
814
  // "display_decimals": 5
776
815
  // "status": "enabled",
@@ -789,7 +828,30 @@ export default class kraken extends Exchange {
789
828
  // see: https://support.kraken.com/hc/en-us/articles/201893608-What-are-the-withdrawal-fees-
790
829
  // to add support for multiple withdrawal/deposit methods and
791
830
  // differentiated fees for each particular method
792
- const code = this.safeCurrencyCode(id);
831
+ //
832
+ // Notes about abbreviations:
833
+ // Z and X prefixes: https://support.kraken.com/hc/en-us/articles/360001206766-Bitcoin-currency-code-XBT-vs-BTC
834
+ // S and M suffixes: https://support.kraken.com/hc/en-us/articles/360039879471-What-is-Asset-S-and-Asset-M-
835
+ //
836
+ let code = this.safeCurrencyCode(id);
837
+ // the below can not be reliable done in `safeCurrencyCode`, so we have to do it here
838
+ if (id.indexOf('.') < 0) {
839
+ const altName = this.safeString(currency, 'altname');
840
+ // handle cases like below:
841
+ //
842
+ // id | altname
843
+ // ---------------
844
+ // XXBT | XBT
845
+ // ZUSD | USD
846
+ if (id !== altName && (id.startsWith('X') || id.startsWith('Z'))) {
847
+ code = this.safeCurrencyCode(altName);
848
+ // also, add map in commonCurrencies:
849
+ this.commonCurrencies[id] = code;
850
+ }
851
+ else {
852
+ code = this.safeCurrencyCode(id);
853
+ }
854
+ }
793
855
  const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals')));
794
856
  // assumes all currencies are active except those listed above
795
857
  const active = this.safeString(currency, 'status') === 'enabled';
@@ -818,6 +880,19 @@ export default class kraken extends Exchange {
818
880
  }
819
881
  return result;
820
882
  }
883
+ safeCurrencyCode(currencyId, currency = undefined) {
884
+ if (currencyId === undefined) {
885
+ return currencyId;
886
+ }
887
+ if (currencyId.indexOf('.') > 0) {
888
+ // if ID contains .M, .S or .F, then it can't contain X or Z prefix. in such case, ID equals to ALTNAME
889
+ const parts = currencyId.split('.');
890
+ const firstPart = this.safeString(parts, 0);
891
+ const secondPart = this.safeString(parts, 1);
892
+ return super.safeCurrencyCode(firstPart, currency) + '.' + secondPart;
893
+ }
894
+ return super.safeCurrencyCode(currencyId, currency);
895
+ }
821
896
  /**
822
897
  * @method
823
898
  * @name kraken#fetchTradingFee
@@ -1514,8 +1589,10 @@ export default class kraken extends Exchange {
1514
1589
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
1515
1590
  await this.loadMarkets();
1516
1591
  // only buy orders are supported by the endpoint
1517
- params['cost'] = cost;
1518
- return await this.createOrder(symbol, 'market', side, cost, undefined, params);
1592
+ const req = {
1593
+ 'cost': cost,
1594
+ };
1595
+ return await this.createOrder(symbol, 'market', side, cost, undefined, this.extend(req, params));
1519
1596
  }
1520
1597
  /**
1521
1598
  * @method
package/js/src/kucoin.js CHANGED
@@ -2296,8 +2296,10 @@ export default class kucoin extends Exchange {
2296
2296
  */
2297
2297
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
2298
2298
  await this.loadMarkets();
2299
- params['cost'] = cost;
2300
- return await this.createOrder(symbol, 'market', side, cost, undefined, params);
2299
+ const req = {
2300
+ 'cost': cost,
2301
+ };
2302
+ return await this.createOrder(symbol, 'market', side, cost, undefined, this.extend(req, params));
2301
2303
  }
2302
2304
  /**
2303
2305
  * @method
package/js/src/mexc.js CHANGED
@@ -2254,8 +2254,10 @@ export default class mexc extends Exchange {
2254
2254
  if (!market['spot']) {
2255
2255
  throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
2256
2256
  }
2257
- params['cost'] = cost;
2258
- return await this.createOrder(symbol, 'market', 'buy', 0, undefined, params);
2257
+ const req = {
2258
+ 'cost': cost,
2259
+ };
2260
+ return await this.createOrder(symbol, 'market', 'buy', 0, undefined, this.extend(req, params));
2259
2261
  }
2260
2262
  /**
2261
2263
  * @method
@@ -2273,8 +2275,10 @@ export default class mexc extends Exchange {
2273
2275
  if (!market['spot']) {
2274
2276
  throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
2275
2277
  }
2276
- params['cost'] = cost;
2277
- return await this.createOrder(symbol, 'market', 'sell', 0, undefined, params);
2278
+ const req = {
2279
+ 'cost': cost,
2280
+ };
2281
+ return await this.createOrder(symbol, 'market', 'sell', 0, undefined, this.extend(req, params));
2278
2282
  }
2279
2283
  /**
2280
2284
  * @method
package/js/src/okx.d.ts CHANGED
@@ -237,6 +237,7 @@ export default class okx extends Exchange {
237
237
  * @param {string} [params.trailingPercent] the percent to trail away from the current market price
238
238
  * @param {string} [params.tpOrdKind] 'condition' or 'limit', the default is 'condition'
239
239
  * @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode
240
+ * @param {string} [params.marginMode] 'cross' or 'isolated', the default is 'cross'
240
241
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
241
242
  */
242
243
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
package/js/src/okx.js CHANGED
@@ -304,7 +304,9 @@ export default class okx extends Exchange {
304
304
  'trade/easy-convert-currency-list': 20,
305
305
  'trade/easy-convert-history': 20,
306
306
  'trade/one-click-repay-currency-list': 20,
307
+ 'trade/one-click-repay-currency-list-v2': 20,
307
308
  'trade/one-click-repay-history': 20,
309
+ 'trade/one-click-repay-history-v2': 20,
308
310
  'trade/account-rate-limit': 1,
309
311
  // asset
310
312
  'asset/currencies': 5 / 3,
@@ -461,6 +463,7 @@ export default class okx extends Exchange {
461
463
  'trade/cancel-advance-algos': 1,
462
464
  'trade/easy-convert': 20,
463
465
  'trade/one-click-repay': 20,
466
+ 'trade/one-click-repay-v2': 20,
464
467
  'trade/mass-cancel': 4,
465
468
  'trade/cancel-all-after': 10,
466
469
  // asset
@@ -981,71 +984,64 @@ export default class okx extends Exchange {
981
984
  'networks': {
982
985
  'BTC': 'Bitcoin',
983
986
  'BTCLN': 'Lightning',
987
+ 'BTCLIGHTNING': 'Lightning',
984
988
  'BEP20': 'BSC',
989
+ 'BRC20': 'BRC20',
985
990
  'ERC20': 'ERC20',
986
991
  'TRC20': 'TRC20',
987
992
  'CRC20': 'Crypto',
988
- // sorted
989
993
  'ACA': 'Acala',
990
994
  'ALGO': 'Algorand',
991
- 'BHP': 'BHP',
992
995
  'APT': 'Aptos',
996
+ 'SCROLL': 'Scroll',
993
997
  'ARBONE': 'Arbitrum One',
994
998
  'AVAXC': 'Avalanche C-Chain',
995
999
  'AVAXX': 'Avalanche X-Chain',
996
- 'ARK': 'ARK',
1000
+ 'BASE': 'Base',
1001
+ 'SUI': 'SUI',
1002
+ 'ZKSYNCERA': 'zkSync Era',
1003
+ 'LINEA': 'Linea',
997
1004
  'AR': 'Arweave',
998
1005
  'ASTR': 'Astar',
999
1006
  'BCH': 'BitcoinCash',
1000
1007
  'BSV': 'Bitcoin SV',
1001
- 'BTM': 'Bytom',
1002
1008
  'ADA': 'Cardano',
1003
1009
  'CSPR': 'Casper',
1004
1010
  'CELO': 'CELO',
1005
1011
  'XCH': 'Chia',
1006
- 'CHZ': 'Chiliz',
1012
+ // 'CHZ': 'Chiliz', TBD: Chiliz 2.0 Chain vs Chiliz Chain
1007
1013
  'ATOM': 'Cosmos',
1008
- 'TRUE': 'TrueChain',
1009
- 'DCR': 'Decred',
1010
1014
  'DGB': 'Digibyte',
1011
1015
  'DOGE': 'Dogecoin',
1012
- 'XEC': 'XEC',
1013
1016
  'EGLD': 'Elrond',
1017
+ 'CFX': 'Conflux',
1014
1018
  'EOS': 'EOS',
1019
+ 'CORE': 'CORE',
1015
1020
  'ETC': 'Ethereum Classic',
1016
1021
  'ETHW': 'EthereumPow',
1017
- 'FTM': 'Fantom',
1022
+ // 'FTM': 'Fantom', 'Sonic' TBD
1018
1023
  'FIL': 'Filecoin',
1019
- 'FLOW': 'FLOW',
1020
- 'FSN': 'Fusion',
1021
1024
  'ONE': 'Harmony',
1022
1025
  'HBAR': 'Hedera',
1023
- 'HNT': 'Helium',
1024
- 'ZEN': 'Horizen',
1025
1026
  'ICX': 'ICON',
1026
1027
  'ICP': 'Dfinity',
1027
1028
  'IOST': 'IOST',
1028
1029
  'IOTA': 'MIOTA',
1029
- 'KDA': 'Kadena',
1030
- 'KAR': 'KAR',
1031
1030
  'KLAY': 'Klaytn',
1032
1031
  'KSM': 'Kusama',
1033
1032
  'LSK': 'Lisk',
1034
1033
  'LTC': 'Litecoin',
1035
1034
  'METIS': 'Metis',
1036
1035
  'MINA': 'Mina',
1037
- 'XMR': 'Monero',
1038
1036
  'GLRM': 'Moonbeam',
1039
1037
  'MOVR': 'Moonriver',
1040
1038
  'NANO': 'Nano',
1041
1039
  'NEAR': 'NEAR',
1042
- 'NAS': 'Nebulas',
1043
- 'NEM': 'New Economy Movement',
1044
1040
  'NULS': 'NULS',
1045
1041
  'OASYS': 'OASYS',
1046
- 'OKC': 'OKC',
1047
1042
  'ONT': 'Ontology',
1048
1043
  'OPTIMISM': 'Optimism',
1044
+ // 'OP': 'Optimism', or Optimism (V2), TBD
1049
1045
  'LAT': 'PlatON',
1050
1046
  'DOT': 'Polkadot',
1051
1047
  'MATIC': 'Polygon',
@@ -1058,35 +1054,54 @@ export default class okx extends Exchange {
1058
1054
  'XTZ': 'Tezos',
1059
1055
  'TON': 'TON',
1060
1056
  'THETA': 'Theta',
1061
- 'VSYS': 'VSYSTEMS',
1062
- 'WAVES': 'WAVES',
1063
1057
  'WAX': 'Wax',
1064
- 'ZEC': 'Zcash',
1065
1058
  'ZIL': 'Zilliqa',
1066
- 'ZKSYNC': 'ZKSYNC',
1067
- 'OMNI': 'Omni',
1068
- // 'NEON3': 'N3', // tbd
1069
- // undetermined : "CELO-TOKEN", "Digital Cash", Khala
1070
- // todo: uncomment below after consensus
1071
- // 'AELF': 'AELF',
1072
- // 'BITCOINDIAMOND': 'Bitcoin Diamond',
1073
- // 'BITCOINGOLD': 'BitcoinGold',
1074
- // 'YOYOW': 'YOYOW',
1075
- // 'QTUM': 'Quantum',
1076
- // 'INTCHAIN': 'INTCHAIN',
1077
- // 'YOUCHAIN': 'YOUCHAIN',
1078
- // 'RONIN': 'Ronin',
1079
- // 'OEC': 'OEC',
1080
- // 'WAYIKICHAIN': 'WGRT',
1081
- // 'MDNA': 'DNA',
1082
- // 'STEP': 'Step Network',
1083
- // 'EMINER': 'Eminer',
1084
- // 'CYBERMILES': 'CyberMiles',
1085
- // 'HYPERCASH': 'HyperCash',
1086
- // 'CONFLUX': 'Conflux',
1087
- // 'CORTEX': 'Cortex',
1088
- // 'TERRA': 'Terra',
1089
- // 'TERRACLASSIC': 'Terra Classic',
1059
+ // non-supported known network: CRP. KAVA, TAIKO, BOB, GNO, BLAST, RSK, SEI, MANTLE, HYPE, RUNE, OSMO, XIN, WEMIX, HT, FSN, NEO, TLOS, CANTO, SCRT, AURORA, XMR
1060
+ // others:
1061
+ // "OKTC",
1062
+ // "X Layer",
1063
+ // "Polygon (Bridged)",
1064
+ // "BTCK-OKTC",
1065
+ // "ETHK-OKTC",
1066
+ // "Starknet",
1067
+ // "LTCK-OKTC",
1068
+ // "XRPK-OKTC",
1069
+ // "BCHK-OKTC",
1070
+ // "ETCK-OKTC",
1071
+ // "Endurance Smart Chain",
1072
+ // "Berachain",
1073
+ // "CELO-TOKEN",
1074
+ // "CFX_EVM",
1075
+ // "Cortex",
1076
+ // "DAIK-OKTC",
1077
+ // "Dora Vota Mainnet",
1078
+ // "DOTK-OKTC",
1079
+ // "DYDX",
1080
+ // "AELF",
1081
+ // "Enjin Relay Chain",
1082
+ // "FEVM",
1083
+ // "FILK-OKTC",
1084
+ // "Flare",
1085
+ // "Gravity Alpha Mainnet",
1086
+ // "INJ",
1087
+ // "Story",
1088
+ // "LINKK-OKTC",
1089
+ // "Terra",
1090
+ // "Terra Classic",
1091
+ // "Terra Classic (USTC)",
1092
+ // "MERLIN Network",
1093
+ // "Layer 3",
1094
+ // "PI",
1095
+ // "Ronin",
1096
+ // "Quantum",
1097
+ // "SHIBK-OKTC",
1098
+ // "SUSHIK-OKTC",
1099
+ // "Celestia",
1100
+ // "TRXK-OKTC",
1101
+ // "UNIK-OKTC",
1102
+ // "Venom",
1103
+ // "WBTCK-OKTC",
1104
+ // "ZetaChain",
1090
1105
  },
1091
1106
  'fetchOpenInterestHistory': {
1092
1107
  'timeframes': {
@@ -3156,6 +3171,7 @@ export default class okx extends Exchange {
3156
3171
  * @param {string} [params.trailingPercent] the percent to trail away from the current market price
3157
3172
  * @param {string} [params.tpOrdKind] 'condition' or 'limit', the default is 'condition'
3158
3173
  * @param {bool} [params.hedged] *swap and future only* true for hedged mode, false for one way mode
3174
+ * @param {string} [params.marginMode] 'cross' or 'isolated', the default is 'cross'
3159
3175
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3160
3176
  */
3161
3177
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {