ccxt 4.5.5 → 4.5.6

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 (90) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +6 -6
  4. package/dist/cjs/src/abstract/toobit.js +11 -0
  5. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  6. package/dist/cjs/src/backpack.js +1 -1
  7. package/dist/cjs/src/base/Exchange.js +129 -2
  8. package/dist/cjs/src/bigone.js +4 -4
  9. package/dist/cjs/src/binance.js +79 -20
  10. package/dist/cjs/src/bingx.js +5 -2
  11. package/dist/cjs/src/bitget.js +16 -9
  12. package/dist/cjs/src/bybit.js +186 -127
  13. package/dist/cjs/src/coinsph.js +4 -1
  14. package/dist/cjs/src/cryptocom.js +6 -3
  15. package/dist/cjs/src/gate.js +1 -1
  16. package/dist/cjs/src/gemini.js +2 -2
  17. package/dist/cjs/src/hyperliquid.js +3 -0
  18. package/dist/cjs/src/kraken.js +6 -2
  19. package/dist/cjs/src/kucoin.js +1 -2
  20. package/dist/cjs/src/luno.js +4 -1
  21. package/dist/cjs/src/mexc.js +4 -1
  22. package/dist/cjs/src/okcoin.js +4 -1
  23. package/dist/cjs/src/okx.js +34 -3
  24. package/dist/cjs/src/phemex.js +1 -1
  25. package/dist/cjs/src/pro/apex.js +1 -0
  26. package/dist/cjs/src/pro/backpack.js +1 -1
  27. package/dist/cjs/src/pro/binance.js +150 -19
  28. package/dist/cjs/src/pro/bitget.js +332 -76
  29. package/dist/cjs/src/pro/cex.js +1 -0
  30. package/dist/cjs/src/pro/independentreserve.js +1 -0
  31. package/dist/cjs/src/pro/mexc.js +23 -23
  32. package/dist/cjs/src/pro/okx.js +46 -10
  33. package/dist/cjs/src/pro/toobit.js +1163 -0
  34. package/dist/cjs/src/pro/tradeogre.js +1 -1
  35. package/dist/cjs/src/toobit.js +2999 -0
  36. package/dist/cjs/src/tradeogre.js +1 -1
  37. package/js/ccxt.d.ts +8 -8
  38. package/js/ccxt.js +6 -6
  39. package/js/src/abstract/myokx.d.ts +1 -0
  40. package/js/src/abstract/okx.d.ts +1 -0
  41. package/js/src/abstract/okxus.d.ts +1 -0
  42. package/js/src/abstract/toobit.d.ts +66 -0
  43. package/js/src/backpack.js +1 -1
  44. package/js/src/base/Exchange.d.ts +9 -0
  45. package/js/src/base/Exchange.js +129 -2
  46. package/js/src/bigone.js +4 -4
  47. package/js/src/binance.d.ts +9 -0
  48. package/js/src/binance.js +79 -20
  49. package/js/src/bingx.js +5 -2
  50. package/js/src/bitget.js +16 -9
  51. package/js/src/bybit.d.ts +8 -0
  52. package/js/src/bybit.js +186 -127
  53. package/js/src/coinsph.js +4 -1
  54. package/js/src/cryptocom.js +6 -3
  55. package/js/src/gate.js +1 -1
  56. package/js/src/gemini.js +2 -2
  57. package/js/src/hyperliquid.js +3 -0
  58. package/js/src/kraken.d.ts +1 -1
  59. package/js/src/kraken.js +6 -2
  60. package/js/src/kucoin.js +1 -2
  61. package/js/src/luno.js +4 -1
  62. package/js/src/mexc.js +4 -1
  63. package/js/src/okcoin.js +4 -1
  64. package/js/src/okx.js +34 -3
  65. package/js/src/phemex.js +1 -1
  66. package/js/src/pro/apex.js +1 -0
  67. package/js/src/pro/backpack.d.ts +1 -1
  68. package/js/src/pro/backpack.js +1 -1
  69. package/js/src/pro/binance.d.ts +24 -0
  70. package/js/src/pro/binance.js +150 -19
  71. package/js/src/pro/bitget.d.ts +6 -0
  72. package/js/src/pro/bitget.js +332 -76
  73. package/js/src/pro/cex.js +1 -0
  74. package/js/src/pro/independentreserve.js +1 -0
  75. package/js/src/pro/mexc.js +23 -23
  76. package/js/src/pro/okx.d.ts +7 -1
  77. package/js/src/pro/okx.js +46 -10
  78. package/js/src/pro/toobit.d.ts +174 -0
  79. package/js/src/pro/toobit.js +1162 -0
  80. package/js/src/toobit.d.ts +456 -0
  81. package/js/src/toobit.js +2992 -0
  82. package/package.json +1 -1
  83. package/dist/373.ccxt.browser.js +0 -7630
  84. package/dist/373.ccxt.browser.min.js +0 -1
  85. package/js/src/abstract/tradeogre.d.ts +0 -21
  86. package/js/src/pro/tradeogre.d.ts +0 -49
  87. package/js/src/pro/tradeogre.js +0 -278
  88. package/js/src/tradeogre.d.ts +0 -149
  89. package/js/src/tradeogre.js +0 -872
  90. /package/js/src/abstract/{tradeogre.js → toobit.js} +0 -0
package/js/src/bybit.js CHANGED
@@ -1236,6 +1236,9 @@ export default class bybit extends Exchange {
1236
1236
  },
1237
1237
  'spot': {
1238
1238
  'extends': 'default',
1239
+ 'fetchCurrencies': {
1240
+ 'private': true,
1241
+ },
1239
1242
  'createOrder': {
1240
1243
  'triggerPriceType': undefined,
1241
1244
  'triggerDirection': false,
@@ -1280,14 +1283,14 @@ export default class bybit extends Exchange {
1280
1283
  },
1281
1284
  });
1282
1285
  }
1286
+ /**
1287
+ * @method
1288
+ * @name bybit#enableDemoTrading
1289
+ * @description enables or disables demo trading mode
1290
+ * @see https://bybit-exchange.github.io/docs/v5/demo
1291
+ * @param {boolean} [enable] true if demo trading should be enabled, false otherwise
1292
+ */
1283
1293
  enableDemoTrading(enable) {
1284
- /**
1285
- * @method
1286
- * @name bybit#enableDemoTrading
1287
- * @description enables or disables demo trading mode
1288
- * @see https://bybit-exchange.github.io/docs/v5/demo
1289
- * @param {boolean} [enable] true if demo trading should be enabled, false otherwise
1290
- */
1291
1294
  if (this.isSandboxModeEnabled) {
1292
1295
  throw new NotSupported(this.id + ' demo trading does not support in sandbox environment');
1293
1296
  }
@@ -1595,10 +1598,10 @@ export default class bybit extends Exchange {
1595
1598
  */
1596
1599
  async fetchCurrencies(params = {}) {
1597
1600
  if (!this.checkRequiredCredentials(false)) {
1598
- return undefined;
1601
+ return {};
1599
1602
  }
1600
1603
  if (this.options['enableDemoTrading']) {
1601
- return undefined;
1604
+ return {};
1602
1605
  }
1603
1606
  const response = await this.privateGetV5AssetCoinQueryInfo(params);
1604
1607
  //
@@ -3007,6 +3010,44 @@ export default class bybit extends Exchange {
3007
3010
  // "seq": 34771365464
3008
3011
  // }
3009
3012
  //
3013
+ // watchMyTrades execution
3014
+ //
3015
+ // {
3016
+ // "category": "linear",
3017
+ // "symbol": "BTCUSDT",
3018
+ // "closedSize": "0",
3019
+ // "execFee": "0.0679239",
3020
+ // "execId": "135dbae5-cbed-5275-9290-3956bb2ed907",
3021
+ // "execPrice": "123498",
3022
+ // "execQty": "0.001",
3023
+ // "execType": "Trade",
3024
+ // "execValue": "123.498",
3025
+ // "feeRate": "0.00055",
3026
+ // "tradeIv": "",
3027
+ // "markIv": "",
3028
+ // "blockTradeId": "",
3029
+ // "markPrice": "122392",
3030
+ // "indexPrice": "",
3031
+ // "underlyingPrice": "",
3032
+ // "leavesQty": "0",
3033
+ // "orderId": "aee7453a-a100-465f-857a-3db780e9329a",
3034
+ // "orderLinkId": "",
3035
+ // "orderPrice": "123615.9",
3036
+ // "orderQty": "0.001",
3037
+ // "orderType": "Market",
3038
+ // "stopOrderType": "UNKNOWN",
3039
+ // "side": "Buy",
3040
+ // "execTime": "1757837580469",
3041
+ // "isLeverage": "0",
3042
+ // "isMaker": false,
3043
+ // "seq": 9517074055,
3044
+ // "marketUnit": "",
3045
+ // "execPnl": "0",
3046
+ // "createType": "CreateByUser",
3047
+ // "extraFees": [],
3048
+ // "feeCoin": "USDT"
3049
+ // }
3050
+ //
3010
3051
  const id = this.safeStringN(trade, ['execId', 'id', 'tradeId']);
3011
3052
  const marketId = this.safeString(trade, 'symbol');
3012
3053
  let marketType = ('createType' in trade) ? 'contract' : 'spot';
@@ -3081,7 +3122,7 @@ export default class bybit extends Exchange {
3081
3122
  }
3082
3123
  fee = {
3083
3124
  'cost': feeCostString,
3084
- 'currency': feeCurrencyCode,
3125
+ 'currency': this.safeString(trade, 'feeCoin', feeCurrencyCode),
3085
3126
  'rate': feeRateString,
3086
3127
  };
3087
3128
  }
@@ -3649,48 +3690,56 @@ export default class bybit extends Exchange {
3649
3690
  //
3650
3691
  // v5
3651
3692
  // {
3652
- // "orderId": "14bad3a1-6454-43d8-bcf2-5345896cf74d",
3653
- // "orderLinkId": "YLxaWKMiHU",
3654
- // "blockTradeId": "",
3655
3693
  // "symbol": "BTCUSDT",
3656
- // "price": "26864.40",
3657
- // "qty": "0.003",
3658
- // "side": "Buy",
3659
- // "isLeverage": "",
3660
- // "positionIdx": 1,
3661
- // "orderStatus": "Cancelled",
3694
+ // "orderType": "Market",
3695
+ // "orderLinkId": "",
3696
+ // "slLimitPrice": "0",
3697
+ // "orderId": "f5f2d355-9a11-4af3-9b83-aa1d6ab6ddfe",
3662
3698
  // "cancelType": "UNKNOWN",
3663
- // "rejectReason": "EC_PostOnlyWillTakeLiquidity",
3664
- // "avgPrice": "0",
3665
- // "leavesQty": "0.000",
3666
- // "leavesValue": "0",
3667
- // "cumExecQty": "0.000",
3668
- // "cumExecValue": "0",
3669
- // "cumExecFee": "0",
3670
- // "timeInForce": "PostOnly",
3671
- // "orderType": "Limit",
3672
- // "stopOrderType": "UNKNOWN",
3673
- // "orderIv": "",
3674
- // "triggerPrice": "0.00",
3675
- // "takeProfit": "0.00",
3676
- // "stopLoss": "0.00",
3677
- // "tpTriggerBy": "UNKNOWN",
3678
- // "slTriggerBy": "UNKNOWN",
3679
- // "triggerDirection": 0,
3680
- // "triggerBy": "UNKNOWN",
3681
- // "lastPriceOnCreated": "0.00",
3682
- // "reduceOnly": false,
3683
- // "closeOnTrigger": false,
3699
+ // "avgPrice": "122529.9",
3700
+ // "stopOrderType": "",
3701
+ // "lastPriceOnCreated": "123747.9",
3702
+ // "orderStatus": "Filled",
3703
+ // "createType": "CreateByUser",
3704
+ // "takeProfit": "",
3705
+ // "cumExecValue": "122.5299",
3706
+ // "tpslMode": "",
3684
3707
  // "smpType": "None",
3708
+ // "triggerDirection": 0,
3709
+ // "blockTradeId": "",
3710
+ // "cumFeeDetail": {
3711
+ // "USDT": "0.06739145"
3712
+ // },
3713
+ // "rejectReason": "EC_NoError",
3714
+ // "isLeverage": "",
3715
+ // "price": "120518",
3716
+ // "orderIv": "",
3717
+ // "createdTime": "1757837618905",
3718
+ // "tpTriggerBy": "",
3719
+ // "positionIdx": 0,
3720
+ // "timeInForce": "IOC",
3721
+ // "leavesValue": "0",
3722
+ // "updatedTime": "1757837618909",
3723
+ // "side": "Sell",
3685
3724
  // "smpGroup": 0,
3686
- // "smpOrderId": "",
3687
- // "tpslMode": "",
3688
- // "tpLimitPrice": "",
3689
- // "slLimitPrice": "",
3725
+ // "triggerPrice": "",
3726
+ // "tpLimitPrice": "0",
3727
+ // "cumExecFee": "0.06739145",
3728
+ // "slTriggerBy": "",
3729
+ // "leavesQty": "0",
3730
+ // "closeOnTrigger": false,
3731
+ // "slippageToleranceType": "UNKNOWN",
3690
3732
  // "placeType": "",
3691
- // "createdTime": "1684476068369",
3692
- // "updatedTime": "1684476068372"
3733
+ // "cumExecQty": "0.001",
3734
+ // "reduceOnly": true,
3735
+ // "qty": "0.001",
3736
+ // "stopLoss": "",
3737
+ // "smpOrderId": "",
3738
+ // "slippageTolerance": "0",
3739
+ // "triggerBy": "",
3740
+ // "extraFees": ""
3693
3741
  // }
3742
+ //
3694
3743
  // createOrders failed order
3695
3744
  // {
3696
3745
  // "category": "linear",
@@ -3748,33 +3797,13 @@ export default class bybit extends Exchange {
3748
3797
  const status = this.parseOrderStatus(rawStatus);
3749
3798
  const side = this.safeStringLower(order, 'side');
3750
3799
  let fee = undefined;
3751
- const feeCostString = this.safeString(order, 'cumExecFee');
3752
- if (feeCostString !== undefined) {
3753
- let feeCurrencyCode = undefined;
3754
- if (market['spot']) {
3755
- if (Precise.stringGt(feeCostString, '0')) {
3756
- if (side === 'buy') {
3757
- feeCurrencyCode = market['base'];
3758
- }
3759
- else {
3760
- feeCurrencyCode = market['quote'];
3761
- }
3762
- }
3763
- else {
3764
- if (side === 'buy') {
3765
- feeCurrencyCode = market['quote'];
3766
- }
3767
- else {
3768
- feeCurrencyCode = market['base'];
3769
- }
3770
- }
3771
- }
3772
- else {
3773
- feeCurrencyCode = market['inverse'] ? market['base'] : market['settle'];
3774
- }
3800
+ const cumFeeDetail = this.safeDict(order, 'cumFeeDetail', {});
3801
+ const feeCoins = Object.keys(cumFeeDetail);
3802
+ const feeCoinId = this.safeString(feeCoins, 0);
3803
+ if (feeCoinId !== undefined) {
3775
3804
  fee = {
3776
- 'cost': this.parseNumber(feeCostString),
3777
- 'currency': feeCurrencyCode,
3805
+ 'cost': this.safeNumber(cumFeeDetail, feeCoinId),
3806
+ 'currency': feeCoinId,
3778
3807
  };
3779
3808
  }
3780
3809
  let clientOrderId = this.safeString(order, 'orderLinkId');
@@ -5240,49 +5269,63 @@ export default class bybit extends Exchange {
5240
5269
  // "retCode": 0,
5241
5270
  // "retMsg": "OK",
5242
5271
  // "result": {
5243
- // "nextPageCursor": "03234de9-1332-41eb-b805-4a9f42c136a3%3A1672220109387%2C03234de9-1332-41eb-b805-4a9f42c136a3%3A1672220109387",
5272
+ // "nextPageCursor": "f5f2d355-9a11-4af3-9b83-aa1d6ab6ddfe%3A1757837618905%2Caee7453a-a100-465f-857a-3db780e9329a%3A1757837580469",
5244
5273
  // "category": "linear",
5245
5274
  // "list": [
5246
5275
  // {
5247
5276
  // "symbol": "BTCUSDT",
5248
- // "orderType": "Limit",
5249
- // "orderLinkId": "test-001",
5250
- // "orderId": "03234de9-1332-41eb-b805-4a9f42c136a3",
5251
- // "cancelType": "CancelByUser",
5252
- // "avgPrice": "0",
5253
- // "stopOrderType": "UNKNOWN",
5254
- // "lastPriceOnCreated": "16656.5",
5255
- // "orderStatus": "Cancelled",
5277
+ // "orderType": "Market",
5278
+ // "orderLinkId": "",
5279
+ // "slLimitPrice": "0",
5280
+ // "orderId": "f5f2d355-9a11-4af3-9b83-aa1d6ab6ddfe",
5281
+ // "cancelType": "UNKNOWN",
5282
+ // "avgPrice": "122529.9",
5283
+ // "stopOrderType": "",
5284
+ // "lastPriceOnCreated": "123747.9",
5285
+ // "orderStatus": "Filled",
5286
+ // "createType": "CreateByUser",
5256
5287
  // "takeProfit": "",
5257
- // "cumExecValue": "0",
5288
+ // "cumExecValue": "122.5299",
5289
+ // "tpslMode": "",
5290
+ // "smpType": "None",
5258
5291
  // "triggerDirection": 0,
5259
5292
  // "blockTradeId": "",
5260
- // "rejectReason": "EC_PerCancelRequest",
5293
+ // "cumFeeDetail": {
5294
+ // "USDT": "0.06739145"
5295
+ // },
5296
+ // "rejectReason": "EC_NoError",
5261
5297
  // "isLeverage": "",
5262
- // "price": "18000",
5298
+ // "price": "120518",
5263
5299
  // "orderIv": "",
5264
- // "createdTime": "1672220109387",
5265
- // "tpTriggerBy": "UNKNOWN",
5300
+ // "createdTime": "1757837618905",
5301
+ // "tpTriggerBy": "",
5266
5302
  // "positionIdx": 0,
5267
- // "timeInForce": "GoodTillCancel",
5303
+ // "timeInForce": "IOC",
5268
5304
  // "leavesValue": "0",
5269
- // "updatedTime": "1672220114123",
5305
+ // "updatedTime": "1757837618909",
5270
5306
  // "side": "Sell",
5307
+ // "smpGroup": 0,
5271
5308
  // "triggerPrice": "",
5272
- // "cumExecFee": "0",
5273
- // "slTriggerBy": "UNKNOWN",
5309
+ // "tpLimitPrice": "0",
5310
+ // "cumExecFee": "0.06739145",
5311
+ // "slTriggerBy": "",
5274
5312
  // "leavesQty": "0",
5275
5313
  // "closeOnTrigger": false,
5276
- // "cumExecQty": "0",
5277
- // "reduceOnly": false,
5278
- // "qty": "0.1",
5314
+ // "slippageToleranceType": "UNKNOWN",
5315
+ // "placeType": "",
5316
+ // "cumExecQty": "0.001",
5317
+ // "reduceOnly": true,
5318
+ // "qty": "0.001",
5279
5319
  // "stopLoss": "",
5280
- // "triggerBy": "UNKNOWN"
5281
- // }
5320
+ // "smpOrderId": "",
5321
+ // "slippageTolerance": "0",
5322
+ // "triggerBy": "",
5323
+ // "extraFees": ""
5324
+ // },
5282
5325
  // ]
5283
5326
  // },
5284
5327
  // "retExtInfo": {},
5285
- // "time": 1672221263862
5328
+ // "time": 1758187806376
5286
5329
  // }
5287
5330
  //
5288
5331
  const data = this.addPaginationCursorToResult(response);
@@ -5395,48 +5438,63 @@ export default class bybit extends Exchange {
5395
5438
  // "retCode": 0,
5396
5439
  // "retMsg": "OK",
5397
5440
  // "result": {
5398
- // "nextPageCursor": "1321052653536515584%3A1672217748287%2C1321052653536515584%3A1672217748287",
5399
- // "category": "spot",
5441
+ // "nextPageCursor": "f5f2d355-9a11-4af3-9b83-aa1d6ab6ddfe%3A1757837618905%2Caee7453a-a100-465f-857a-3db780e9329a%3A1757837580469",
5442
+ // "category": "linear",
5400
5443
  // "list": [
5401
5444
  // {
5402
- // "symbol": "ETHUSDT",
5403
- // "orderType": "Limit",
5404
- // "orderLinkId": "1672217748277652",
5405
- // "orderId": "1321052653536515584",
5445
+ // "symbol": "BTCUSDT",
5446
+ // "orderType": "Market",
5447
+ // "orderLinkId": "",
5448
+ // "slLimitPrice": "0",
5449
+ // "orderId": "f5f2d355-9a11-4af3-9b83-aa1d6ab6ddfe",
5406
5450
  // "cancelType": "UNKNOWN",
5407
- // "avgPrice": "",
5408
- // "stopOrderType": "tpslOrder",
5409
- // "lastPriceOnCreated": "",
5410
- // "orderStatus": "Cancelled",
5451
+ // "avgPrice": "122529.9",
5452
+ // "stopOrderType": "",
5453
+ // "lastPriceOnCreated": "123747.9",
5454
+ // "orderStatus": "Filled",
5455
+ // "createType": "CreateByUser",
5411
5456
  // "takeProfit": "",
5412
- // "cumExecValue": "0",
5457
+ // "cumExecValue": "122.5299",
5458
+ // "tpslMode": "",
5459
+ // "smpType": "None",
5413
5460
  // "triggerDirection": 0,
5414
- // "isLeverage": "0",
5415
- // "rejectReason": "",
5416
- // "price": "1000",
5461
+ // "blockTradeId": "",
5462
+ // "cumFeeDetail": {
5463
+ // "USDT": "0.06739145"
5464
+ // },
5465
+ // "rejectReason": "EC_NoError",
5466
+ // "isLeverage": "",
5467
+ // "price": "120518",
5417
5468
  // "orderIv": "",
5418
- // "createdTime": "1672217748287",
5469
+ // "createdTime": "1757837618905",
5419
5470
  // "tpTriggerBy": "",
5420
5471
  // "positionIdx": 0,
5421
- // "timeInForce": "GTC",
5422
- // "leavesValue": "500",
5423
- // "updatedTime": "1672217748287",
5424
- // "side": "Buy",
5425
- // "triggerPrice": "1500",
5426
- // "cumExecFee": "0",
5427
- // "leavesQty": "0",
5472
+ // "timeInForce": "IOC",
5473
+ // "leavesValue": "0",
5474
+ // "updatedTime": "1757837618909",
5475
+ // "side": "Sell",
5476
+ // "smpGroup": 0,
5477
+ // "triggerPrice": "",
5478
+ // "tpLimitPrice": "0",
5479
+ // "cumExecFee": "0.06739145",
5428
5480
  // "slTriggerBy": "",
5481
+ // "leavesQty": "0",
5429
5482
  // "closeOnTrigger": false,
5430
- // "cumExecQty": "0",
5431
- // "reduceOnly": false,
5432
- // "qty": "0.5",
5483
+ // "slippageToleranceType": "UNKNOWN",
5484
+ // "placeType": "",
5485
+ // "cumExecQty": "0.001",
5486
+ // "reduceOnly": true,
5487
+ // "qty": "0.001",
5433
5488
  // "stopLoss": "",
5434
- // "triggerBy": "1192.5"
5435
- // }
5489
+ // "smpOrderId": "",
5490
+ // "slippageTolerance": "0",
5491
+ // "triggerBy": "",
5492
+ // "extraFees": ""
5493
+ // },
5436
5494
  // ]
5437
5495
  // },
5438
5496
  // "retExtInfo": {},
5439
- // "time": 1672219526294
5497
+ // "time": 1758187806376
5440
5498
  // }
5441
5499
  //
5442
5500
  const data = this.addPaginationCursorToResult(response);
@@ -6180,6 +6238,7 @@ export default class bybit extends Exchange {
6180
6238
  * @param {string} address the address to withdraw to
6181
6239
  * @param {string} tag
6182
6240
  * @param {object} [params] extra parameters specific to the exchange API endpoint
6241
+ * @param {string} [params.accountType] 'UTA', 'FUND', 'FUND,UTA', and 'SPOT (for classic accounts only)
6183
6242
  * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
6184
6243
  */
6185
6244
  async withdraw(code, amount, address, tag = undefined, params = {}) {
@@ -6187,9 +6246,9 @@ export default class bybit extends Exchange {
6187
6246
  let accountType = undefined;
6188
6247
  const accounts = await this.isUnifiedEnabled();
6189
6248
  const isUta = accounts[1];
6190
- [accountType, params] = this.handleOptionAndParams(params, 'withdraw', 'accountType', 'SPOT');
6191
- if (isUta) {
6192
- accountType = 'UTA';
6249
+ [accountType, params] = this.handleOptionAndParams(params, 'withdraw', 'accountType');
6250
+ if (accountType === undefined) {
6251
+ accountType = isUta ? 'UTA' : 'SPOT';
6193
6252
  }
6194
6253
  await this.loadMarkets();
6195
6254
  this.checkAddress(address);
package/js/src/coinsph.js CHANGED
@@ -323,6 +323,9 @@ export default class coinsph extends Exchange {
323
323
  'features': {
324
324
  'spot': {
325
325
  'sandbox': false,
326
+ 'fetchCurrencies': {
327
+ 'private': true,
328
+ },
326
329
  'createOrder': {
327
330
  'marginMode': false,
328
331
  'triggerPrice': true,
@@ -518,7 +521,7 @@ export default class coinsph extends Exchange {
518
521
  */
519
522
  async fetchCurrencies(params = {}) {
520
523
  if (!this.checkRequiredCredentials(false)) {
521
- return undefined;
524
+ return {};
522
525
  }
523
526
  const response = await this.privateGetOpenapiWalletV1ConfigGetall(params);
524
527
  //
@@ -433,6 +433,9 @@ export default class cryptocom extends Exchange {
433
433
  },
434
434
  'spot': {
435
435
  'extends': 'default',
436
+ 'fetchCurrencies': {
437
+ 'private': true,
438
+ },
436
439
  },
437
440
  'swap': {
438
441
  'linear': {
@@ -527,13 +530,13 @@ export default class cryptocom extends Exchange {
527
530
  async fetchCurrencies(params = {}) {
528
531
  // this endpoint requires authentication
529
532
  if (!this.checkRequiredCredentials(false)) {
530
- return undefined;
533
+ return {};
531
534
  }
532
535
  let skipFetchCurrencies = false;
533
536
  [skipFetchCurrencies, params] = this.handleOptionAndParams(params, 'fetchCurrencies', 'skipFetchCurrencies', false);
534
537
  if (skipFetchCurrencies) {
535
538
  // sub-accounts can't access this endpoint
536
- return undefined;
539
+ return {};
537
540
  }
538
541
  let response = {};
539
542
  try {
@@ -543,7 +546,7 @@ export default class cryptocom extends Exchange {
543
546
  if (e instanceof ExchangeError) {
544
547
  // sub-accounts can't access this endpoint
545
548
  // {"code":"10001","msg":"SYS_ERROR"}
546
- return undefined;
549
+ return {};
547
550
  }
548
551
  throw e;
549
552
  // do nothing
package/js/src/gate.js CHANGED
@@ -1869,7 +1869,7 @@ export default class gate extends Exchange {
1869
1869
  // sandbox/testnet only supports future markets
1870
1870
  const apiBackup = this.safeValue(this.urls, 'apiBackup');
1871
1871
  if (apiBackup !== undefined) {
1872
- return undefined;
1872
+ return {};
1873
1873
  }
1874
1874
  const response = await this.publicSpotGetCurrencies(params);
1875
1875
  //
package/js/src/gemini.js CHANGED
@@ -383,7 +383,7 @@ export default class gemini extends Exchange {
383
383
  async fetchCurrenciesFromWeb(params = {}) {
384
384
  const data = await this.fetchWebEndpoint('fetchCurrencies', 'webExchangeGet', true, '="currencyData">', '</script>');
385
385
  if (data === undefined) {
386
- return undefined;
386
+ return {};
387
387
  }
388
388
  //
389
389
  // {
@@ -1452,7 +1452,7 @@ export default class gemini extends Exchange {
1452
1452
  // "is_hidden":false,
1453
1453
  // "was_forced":false,
1454
1454
  // "executed_amount":"0",
1455
- // "client_order_id":"1650398445709",
1455
+ // "client_order_id":"1650398445701",
1456
1456
  // "options":[],
1457
1457
  // "price":"2000.00",
1458
1458
  // "original_amount":"0.01",
@@ -3562,6 +3562,9 @@ export default class hyperliquid extends Exchange {
3562
3562
  }
3563
3563
  const until = this.safeInteger(params, 'until');
3564
3564
  if (until !== undefined) {
3565
+ if (since === undefined) {
3566
+ throw new ArgumentsRequired(this.id + ' fetchDeposits requires since while until is set');
3567
+ }
3565
3568
  request['endTime'] = until;
3566
3569
  params = this.omit(params, ['until']);
3567
3570
  }
@@ -429,7 +429,7 @@ export default class kraken extends Exchange {
429
429
  * @see https://docs.kraken.com/rest/#tag/Funding/operation/withdrawFunds
430
430
  * @param {string} code unified currency code
431
431
  * @param {float} amount the amount to withdraw
432
- * @param {string} address the address to withdraw to
432
+ * @param {string} address the address to withdraw to, not required can be '' or undefined/none/null
433
433
  * @param {string} tag
434
434
  * @param {object} [params] extra parameters specific to the exchange API endpoint
435
435
  * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
package/js/src/kraken.js CHANGED
@@ -424,6 +424,7 @@ export default class kraken extends Exchange {
424
424
  'OriginTrail': 'OTP',
425
425
  'Celestia': 'TIA',
426
426
  },
427
+ 'marketHelperProps': ['marketsByAltname', 'delistedMarketsById'], // used by setMarketsFromExchange
427
428
  },
428
429
  'features': {
429
430
  'spot': {
@@ -3188,7 +3189,7 @@ export default class kraken extends Exchange {
3188
3189
  * @see https://docs.kraken.com/rest/#tag/Funding/operation/withdrawFunds
3189
3190
  * @param {string} code unified currency code
3190
3191
  * @param {float} amount the amount to withdraw
3191
- * @param {string} address the address to withdraw to
3192
+ * @param {string} address the address to withdraw to, not required can be '' or undefined/none/null
3192
3193
  * @param {string} tag
3193
3194
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3194
3195
  * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
@@ -3202,8 +3203,11 @@ export default class kraken extends Exchange {
3202
3203
  const request = {
3203
3204
  'asset': currency['id'],
3204
3205
  'amount': amount,
3205
- 'address': address,
3206
+ // 'address': address,
3206
3207
  };
3208
+ if (address !== undefined && address !== '') {
3209
+ request['address'] = address;
3210
+ }
3207
3211
  const response = await this.privatePostWithdraw(this.extend(request, params));
3208
3212
  //
3209
3213
  // {
package/js/src/kucoin.js CHANGED
@@ -1385,7 +1385,6 @@ export default class kucoin extends Exchange {
1385
1385
  //
1386
1386
  const currenciesData = this.safeList(response, 'data', []);
1387
1387
  const brokenCurrencies = this.safeList(this.options, 'brokenCurrencies', ['00', 'OPEN_ERROR', 'HUF', 'BDT']);
1388
- const otherFiats = this.safeList(this.options, 'fiats', ['KWD', 'IRR', 'PKR']);
1389
1388
  const result = {};
1390
1389
  for (let i = 0; i < currenciesData.length; i++) {
1391
1390
  const entry = currenciesData[i];
@@ -1426,7 +1425,7 @@ export default class kucoin extends Exchange {
1426
1425
  // kucoin has determined 'fiat' currencies with below logic
1427
1426
  const rawPrecision = this.safeString(entry, 'precision');
1428
1427
  const precision = this.parseNumber(this.parsePrecision(rawPrecision));
1429
- const isFiat = this.inArray(id, otherFiats) || ((rawPrecision === '2') && (chainsLength === 0));
1428
+ const isFiat = chainsLength === 0;
1430
1429
  result[code] = this.safeCurrencyStructure({
1431
1430
  'id': id,
1432
1431
  'name': this.safeString(entry, 'fullName'),
package/js/src/luno.js CHANGED
@@ -220,6 +220,9 @@ export default class luno extends Exchange {
220
220
  'features': {
221
221
  'spot': {
222
222
  'sandbox': false,
223
+ 'fetchCurrencies': {
224
+ 'private': true,
225
+ },
223
226
  'createOrder': {
224
227
  'marginMode': false,
225
228
  'triggerPrice': true,
@@ -306,7 +309,7 @@ export default class luno extends Exchange {
306
309
  */
307
310
  async fetchCurrencies(params = {}) {
308
311
  if (!this.checkRequiredCredentials(false)) {
309
- return undefined;
312
+ return {};
310
313
  }
311
314
  const response = await this.privateGetSendNetworks(params);
312
315
  //
package/js/src/mexc.js CHANGED
@@ -758,6 +758,9 @@ export default class mexc extends Exchange {
758
758
  },
759
759
  'spot': {
760
760
  'extends': 'default',
761
+ 'fetchCurrencies': {
762
+ 'private': true,
763
+ },
761
764
  },
762
765
  'forDerivs': {
763
766
  'extends': 'default',
@@ -1048,7 +1051,7 @@ export default class mexc extends Exchange {
1048
1051
  // therefore we check the keys here
1049
1052
  // and fallback to generating the currencies from the markets
1050
1053
  if (!this.checkRequiredCredentials(false)) {
1051
- return undefined;
1054
+ return {};
1052
1055
  }
1053
1056
  const response = await this.spotPrivateGetCapitalConfigGetall(params);
1054
1057
  //