ccxt 4.5.18 → 4.5.20

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 (152) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +40 -16
  3. package/dist/cjs/_virtual/index.cjs.js +1459 -9
  4. package/dist/cjs/ccxt.js +8 -2
  5. package/dist/cjs/src/abstract/dydx.js +11 -0
  6. package/dist/cjs/src/base/Exchange.js +164 -10
  7. package/dist/cjs/src/base/ws/Client.js +3 -1
  8. package/dist/cjs/src/binance.js +8 -1
  9. package/dist/cjs/src/bingx.js +20 -0
  10. package/dist/cjs/src/bitget.js +43 -41
  11. package/dist/cjs/src/bybit.js +21 -23
  12. package/dist/cjs/src/deribit.js +6 -0
  13. package/dist/cjs/src/dydx.js +2454 -0
  14. package/dist/cjs/src/gate.js +4 -4
  15. package/dist/cjs/src/hibachi.js +1 -1
  16. package/dist/cjs/src/hyperliquid.js +207 -9
  17. package/dist/cjs/src/kucoin.js +711 -109
  18. package/dist/cjs/src/mexc.js +2 -3
  19. package/dist/cjs/src/pro/binance.js +59 -144
  20. package/dist/cjs/src/pro/dydx.js +418 -0
  21. package/dist/cjs/src/pro/kraken.js +4 -3
  22. package/dist/cjs/src/pro/xt.js +218 -4
  23. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
  24. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +56 -0
  25. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +56 -0
  26. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +48 -0
  27. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +343 -0
  28. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +717 -0
  29. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +60 -0
  30. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +45 -0
  31. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +380 -0
  32. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +72 -0
  33. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +211 -0
  34. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +195 -0
  35. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +49 -0
  36. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +57 -0
  37. package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +56 -0
  38. package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +79 -0
  39. package/dist/cjs/src/static_dependencies/dydx-v4-client/long/index.cjs.js +9 -0
  40. package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +59 -0
  41. package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +39 -0
  42. package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +69 -0
  43. package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +108 -0
  44. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +50 -1
  45. package/dist/cjs/src/static_dependencies/scure-base/index.js +29 -0
  46. package/dist/cjs/src/static_dependencies/scure-bip32/index.js +278 -0
  47. package/dist/cjs/src/static_dependencies/scure-bip39/index.js +97 -0
  48. package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +2060 -0
  49. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +2 -0
  50. package/dist/cjs/src/toobit.js +2 -1
  51. package/js/ccxt.d.ts +8 -2
  52. package/js/ccxt.js +6 -2
  53. package/js/src/abstract/binance.d.ts +7 -0
  54. package/js/src/abstract/binancecoinm.d.ts +7 -0
  55. package/js/src/abstract/binanceus.d.ts +7 -0
  56. package/js/src/abstract/binanceusdm.d.ts +7 -0
  57. package/js/src/abstract/bitget.d.ts +1 -0
  58. package/js/src/abstract/dydx.d.ts +61 -0
  59. package/js/src/abstract/dydx.js +11 -0
  60. package/js/src/abstract/kucoin.d.ts +1 -1
  61. package/js/src/abstract/kucoinfutures.d.ts +1 -1
  62. package/js/src/base/Exchange.d.ts +7 -0
  63. package/js/src/base/Exchange.js +163 -10
  64. package/js/src/base/ws/Client.js +3 -1
  65. package/js/src/binance.js +8 -1
  66. package/js/src/bingx.js +20 -0
  67. package/js/src/bitget.d.ts +3 -3
  68. package/js/src/bitget.js +43 -41
  69. package/js/src/bybit.d.ts +3 -3
  70. package/js/src/bybit.js +21 -23
  71. package/js/src/deribit.js +6 -0
  72. package/js/src/dydx.d.ts +364 -0
  73. package/js/src/dydx.js +2453 -0
  74. package/js/src/gate.d.ts +2 -2
  75. package/js/src/gate.js +4 -4
  76. package/js/src/hibachi.js +1 -1
  77. package/js/src/hyperliquid.d.ts +17 -0
  78. package/js/src/hyperliquid.js +207 -9
  79. package/js/src/kucoin.d.ts +48 -1
  80. package/js/src/kucoin.js +711 -109
  81. package/js/src/mexc.js +2 -3
  82. package/js/src/pro/binance.d.ts +2 -2
  83. package/js/src/pro/binance.js +59 -144
  84. package/js/src/pro/dydx.d.ts +81 -0
  85. package/js/src/pro/dydx.js +417 -0
  86. package/js/src/pro/kraken.js +4 -3
  87. package/js/src/pro/xt.d.ts +85 -2
  88. package/js/src/pro/xt.js +218 -4
  89. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.d.ts +90 -0
  90. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +163 -0
  91. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.d.ts +26 -0
  92. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +51 -0
  93. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.d.ts +48 -0
  94. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +85 -0
  95. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.d.ts +40 -0
  96. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +77 -0
  97. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.d.ts +162 -0
  98. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +329 -0
  99. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.d.ts +460 -0
  100. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +698 -0
  101. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.d.ts +127 -0
  102. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +286 -0
  103. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.d.ts +66 -0
  104. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +109 -0
  105. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.d.ts +127 -0
  106. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +257 -0
  107. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.d.ts +48 -0
  108. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +93 -0
  109. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.d.ts +23 -0
  110. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +43 -0
  111. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.d.ts +92 -0
  112. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +164 -0
  113. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.d.ts +124 -0
  114. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +196 -0
  115. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.d.ts +159 -0
  116. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +324 -0
  117. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.d.ts +546 -0
  118. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +872 -0
  119. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.d.ts +84 -0
  120. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +181 -0
  121. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.d.ts +397 -0
  122. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +757 -0
  123. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.d.ts +120 -0
  124. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +246 -0
  125. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.d.ts +79 -0
  126. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +147 -0
  127. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.d.ts +32 -0
  128. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +59 -0
  129. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.d.ts +34 -0
  130. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +66 -0
  131. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.d.ts +62 -0
  132. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +111 -0
  133. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.d.ts +207 -0
  134. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +50 -0
  135. package/js/src/static_dependencies/dydx-v4-client/helpers.d.ts +82 -0
  136. package/js/src/static_dependencies/dydx-v4-client/helpers.js +172 -0
  137. package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +1473 -0
  138. package/js/src/static_dependencies/dydx-v4-client/long/index.d.cts +2 -0
  139. package/js/src/static_dependencies/dydx-v4-client/onboarding.d.ts +35 -0
  140. package/js/src/static_dependencies/dydx-v4-client/onboarding.js +56 -0
  141. package/js/src/static_dependencies/dydx-v4-client/registry.d.ts +7 -0
  142. package/js/src/static_dependencies/dydx-v4-client/registry.js +36 -0
  143. package/js/src/static_dependencies/noble-hashes/utils.d.ts +1 -0
  144. package/js/src/static_dependencies/noble-hashes/utils.js +4 -0
  145. package/js/src/static_dependencies/scure-bip32/index.d.ts +49 -0
  146. package/js/src/static_dependencies/scure-bip32/index.js +295 -0
  147. package/js/src/static_dependencies/scure-bip39/index.d.ts +54 -0
  148. package/js/src/static_dependencies/scure-bip39/index.js +140 -0
  149. package/js/src/static_dependencies/scure-bip39/wordlists/english.d.ts +1 -0
  150. package/js/src/static_dependencies/scure-bip39/wordlists/english.js +2054 -0
  151. package/js/src/toobit.js +2 -1
  152. package/package.json +9 -3
@@ -1606,8 +1606,8 @@ class gate extends gate$1["default"] {
1606
1606
  'contract': true,
1607
1607
  'linear': isLinear,
1608
1608
  'inverse': !isLinear,
1609
- 'taker': undefined,
1610
- 'maker': undefined,
1609
+ 'taker': this.parseNumber('0.0005'),
1610
+ 'maker': this.parseNumber('0.0002'),
1611
1611
  'contractSize': this.parseNumber(contractSize),
1612
1612
  'expiry': expiry,
1613
1613
  'expiryDatetime': this.iso8601(expiry),
@@ -1725,8 +1725,8 @@ class gate extends gate$1["default"] {
1725
1725
  'contract': true,
1726
1726
  'linear': true,
1727
1727
  'inverse': false,
1728
- 'taker': undefined,
1729
- 'maker': undefined,
1728
+ 'taker': this.parseNumber('0.0003'),
1729
+ 'maker': this.parseNumber('0.0003'),
1730
1730
  'contractSize': this.parseNumber('1'),
1731
1731
  'expiry': expiry,
1732
1732
  'expiryDatetime': this.iso8601(expiry),
@@ -829,7 +829,7 @@ class hibachi extends hibachi$1["default"] {
829
829
  }
830
830
  createOrderRequest(nonce, symbol, type, side, amount, price = undefined, params = {}) {
831
831
  const market = this.market(symbol);
832
- const feeRate = Math.max(this.safeNumber(market, 'taker'), this.safeNumber(market, 'maker'));
832
+ const feeRate = Math.max(this.safeNumber(market, 'taker', this.safeNumber(this.options, 'defaultTakerFee', 0.00045)), this.safeNumber(market, 'maker', this.safeNumber(this.options, 'defaultMakerFee', 0.00015)));
833
833
  let sideInternal = '';
834
834
  if (side === 'sell') {
835
835
  sideInternal = 'ASK';
@@ -235,6 +235,13 @@ class hyperliquid extends hyperliquid$1["default"] {
235
235
  'XAUT0': 'XAUT',
236
236
  'UXPL': 'XPL',
237
237
  },
238
+ 'fetchMarkets': {
239
+ 'types': ['spot', 'swap', 'hip3'], // 'spot', 'swap', 'hip3'
240
+ // 'hip3': {
241
+ // 'limit': 5, // how many dexes to load max if dexes are not specified
242
+ // 'dex': [ 'xyz' ],
243
+ // },
244
+ },
238
245
  },
239
246
  'features': {
240
247
  'default': {
@@ -473,14 +480,144 @@ class hyperliquid extends hyperliquid$1["default"] {
473
480
  * @returns {object[]} an array of objects representing market data
474
481
  */
475
482
  async fetchMarkets(params = {}) {
476
- const rawPromises = [
477
- this.fetchSwapMarkets(params),
478
- this.fetchSpotMarkets(params),
479
- ];
483
+ const options = this.safeDict(this.options, 'fetchMarkets', {});
484
+ const types = this.safeList(options, 'types');
485
+ const rawPromises = [];
486
+ for (let i = 0; i < types.length; i++) {
487
+ const marketType = types[i];
488
+ if (marketType === 'swap') {
489
+ rawPromises.push(this.fetchSwapMarkets(params));
490
+ }
491
+ else if (marketType === 'spot') {
492
+ rawPromises.push(this.fetchSpotMarkets(params));
493
+ }
494
+ else if (marketType === 'hip3') {
495
+ rawPromises.push(this.fetchHip3Markets(params));
496
+ }
497
+ }
498
+ const promises = await Promise.all(rawPromises);
499
+ let result = [];
500
+ for (let i = 0; i < promises.length; i++) {
501
+ result = this.arrayConcat(result, promises[i]);
502
+ }
503
+ return result;
504
+ }
505
+ /**
506
+ * @method
507
+ * @name hyperliquid#fetchHip3Markets
508
+ * @description retrieves data on all hip3 markets for hyperliquid
509
+ * @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-all-perpetual-dexs
510
+ * @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint/perpetuals#retrieve-perpetuals-asset-contexts-includes-mark-price-current-funding-open-interest-etc
511
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
512
+ * @returns {object[]} an array of objects representing market data
513
+ */
514
+ async fetchHip3Markets(params = {}) {
515
+ const fetchDexes = await this.publicPostInfo({
516
+ 'type': 'perpDexs',
517
+ });
518
+ //
519
+ // [
520
+ // null,
521
+ // {
522
+ // "name": "xyz",
523
+ // "fullName": "XYZ",
524
+ // "deployer": "0x88806a71d74ad0a510b350545c9ae490912f0888",
525
+ // "oracleUpdater": "0x1234567890545d1df9ee64b35fdd16966e08acec",
526
+ // "feeRecipient": "0x79c0650064b10f73649b7b64c5ebf0b319606140",
527
+ // "assetToStreamingOiCap": [
528
+ // [
529
+ // "xyz:XYZ100",
530
+ // "100000000.0"
531
+ // ]
532
+ // ]
533
+ // }
534
+ // ]
535
+ //
536
+ const perpDexesOffset = {};
537
+ for (let i = 1; i < fetchDexes.length; i++) {
538
+ // builder-deployed perp dexs start at 110000
539
+ const dex = fetchDexes[i];
540
+ const offset = 110000 + (i - 1) * 10000;
541
+ perpDexesOffset[dex['name']] = offset;
542
+ }
543
+ let fetchDexesList = [];
544
+ const options = this.safeDict(this.options, 'fetchMarkets', {});
545
+ const hip3 = this.safeDict(options, 'hip3', {});
546
+ const defaultLimit = this.safeInteger(hip3, 'limit', 5);
547
+ const dexesLength = fetchDexes.length;
548
+ if (dexesLength >= defaultLimit) { // first element is null
549
+ const defaultDexes = this.safeList(hip3, 'dex', []);
550
+ if (defaultDexes.length === 0) {
551
+ throw new errors.ArgumentsRequired(this.id + ' fetchHip3Markets() Too many DEXes found. Please specify a list of DEXes in the exchange.options["fetchMarkets"]["hip3"]["dex"] parameter to fetch markets from those DEXes only. The limit is set to ' + defaultLimit.toString() + ' DEXes by default.');
552
+ }
553
+ else {
554
+ fetchDexesList = defaultDexes;
555
+ }
556
+ }
557
+ else {
558
+ for (let i = 1; i < fetchDexes.length; i++) {
559
+ const dex = this.safeDict(fetchDexes, i, {});
560
+ const dexName = this.safeString(dex, 'name');
561
+ fetchDexesList.push(dexName);
562
+ }
563
+ }
564
+ const rawPromises = [];
565
+ for (let i = 0; i < fetchDexesList.length; i++) {
566
+ const request = {
567
+ 'type': 'metaAndAssetCtxs',
568
+ 'dex': this.safeString(fetchDexesList, i),
569
+ };
570
+ rawPromises.push(this.publicPostInfo(this.extend(request, params)));
571
+ }
480
572
  const promises = await Promise.all(rawPromises);
481
- const swapMarkets = promises[0];
482
- const spotMarkets = promises[1];
483
- return this.arrayConcat(swapMarkets, spotMarkets);
573
+ let markets = [];
574
+ for (let i = 0; i < promises.length; i++) {
575
+ const dexName = fetchDexesList[i];
576
+ const offset = perpDexesOffset[dexName];
577
+ const response = promises[i];
578
+ const meta = this.safeDict(response, 0, {});
579
+ const universe = this.safeList(meta, 'universe', []);
580
+ const assetCtxs = this.safeList(response, 1, []);
581
+ const result = [];
582
+ for (let j = 0; j < universe.length; j++) {
583
+ const data = this.extend(this.safeDict(universe, j, {}), this.safeDict(assetCtxs, j, {}));
584
+ data['baseId'] = j + offset;
585
+ result.push(data);
586
+ }
587
+ markets = this.arrayConcat(markets, this.parseMarkets(result));
588
+ }
589
+ //
590
+ // [
591
+ // {
592
+ // "universe": [
593
+ // {
594
+ // "maxLeverage": 50,
595
+ // "name": "SOL",
596
+ // "onlyIsolated": false,
597
+ // "szDecimals": 2
598
+ // }
599
+ // ]
600
+ // },
601
+ // [
602
+ // {
603
+ // "dayNtlVlm": "9450588.2273",
604
+ // "funding": "0.0000198",
605
+ // "impactPxs": [
606
+ // "108.04",
607
+ // "108.06"
608
+ // ],
609
+ // "markPx": "108.04",
610
+ // "midPx": "108.05",
611
+ // "openInterest": "10764.48",
612
+ // "oraclePx": "107.99",
613
+ // "premium": "0.00055561",
614
+ // "prevDayPx": "111.81"
615
+ // }
616
+ // ]
617
+ // ]
618
+ //
619
+ //
620
+ return markets;
484
621
  }
485
622
  /**
486
623
  * @method
@@ -786,7 +923,7 @@ class hyperliquid extends hyperliquid$1["default"] {
786
923
  const baseId = this.safeString(market, 'baseId');
787
924
  const settleId = 'USDC';
788
925
  const settle = this.safeCurrencyCode(settleId);
789
- let symbol = base + '/' + quote;
926
+ let symbol = base.replace(':', '-') + '/' + quote;
790
927
  const contract = true;
791
928
  const swap = true;
792
929
  {
@@ -1461,6 +1598,17 @@ class hyperliquid extends hyperliquid$1["default"] {
1461
1598
  };
1462
1599
  return this.signUserSignedAction(messageTypes, message);
1463
1600
  }
1601
+ buildUserDexAbstractionSig(message) {
1602
+ const messageTypes = {
1603
+ 'HyperliquidTransaction:UserDexAbstraction': [
1604
+ { 'name': 'hyperliquidChain', 'type': 'string' },
1605
+ { 'name': 'user', 'type': 'address' },
1606
+ { 'name': 'enabled', 'type': 'bool' },
1607
+ { 'name': 'nonce', 'type': 'uint64' },
1608
+ ],
1609
+ };
1610
+ return this.signUserSignedAction(messageTypes, message);
1611
+ }
1464
1612
  buildApproveBuilderFeeSig(message) {
1465
1613
  const messageTypes = {
1466
1614
  'HyperliquidTransaction:ApproveBuilderFee': [
@@ -1561,6 +1709,42 @@ class hyperliquid extends hyperliquid$1["default"] {
1561
1709
  }
1562
1710
  return true;
1563
1711
  }
1712
+ async enableUserDexAbstraction(enabled, params = {}) {
1713
+ let userAddress = undefined;
1714
+ [userAddress, params] = this.handlePublicAddress('enableUserDexAbstraction', params);
1715
+ const nonce = this.milliseconds();
1716
+ const isSandboxMode = this.safeBool(this.options, 'sandboxMode', false);
1717
+ const payload = {
1718
+ 'hyperliquidChain': isSandboxMode ? 'Testnet' : 'Mainnet',
1719
+ 'user': userAddress,
1720
+ 'enabled': enabled,
1721
+ 'nonce': nonce,
1722
+ };
1723
+ const sig = this.buildUserDexAbstractionSig(payload);
1724
+ const action = {
1725
+ 'hyperliquidChain': payload['hyperliquidChain'],
1726
+ 'signatureChainId': '0x66eee',
1727
+ 'enabled': payload['enabled'],
1728
+ 'user': payload['user'],
1729
+ 'nonce': nonce,
1730
+ 'type': 'userDexAbstraction',
1731
+ };
1732
+ const request = {
1733
+ 'action': action,
1734
+ 'nonce': nonce,
1735
+ 'signature': sig,
1736
+ 'vaultAddress': undefined,
1737
+ };
1738
+ //
1739
+ // {
1740
+ // "status": "ok",
1741
+ // "response": {
1742
+ // "type": "default"
1743
+ // }
1744
+ // }
1745
+ //
1746
+ return await this.privatePostExchange(request);
1747
+ }
1564
1748
  /**
1565
1749
  * @method
1566
1750
  * @name hyperliquid#createOrder
@@ -2379,6 +2563,7 @@ class hyperliquid extends hyperliquid$1["default"] {
2379
2563
  * @param {string} [params.user] user address, will default to this.walletAddress if not provided
2380
2564
  * @param {string} [params.method] 'openOrders' or 'frontendOpenOrders' default is 'frontendOpenOrders'
2381
2565
  * @param {string} [params.subAccountAddress] sub account user address
2566
+ * @param {string} [params.dex] perp dex name. default is null
2382
2567
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2383
2568
  */
2384
2569
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -2387,11 +2572,21 @@ class hyperliquid extends hyperliquid$1["default"] {
2387
2572
  let method = undefined;
2388
2573
  [method, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'method', 'frontendOpenOrders');
2389
2574
  await this.loadMarkets();
2390
- const market = this.safeMarket(symbol);
2391
2575
  const request = {
2392
2576
  'type': method,
2393
2577
  'user': userAddress,
2394
2578
  };
2579
+ let market = undefined;
2580
+ if (symbol !== undefined) {
2581
+ market = this.market(symbol);
2582
+ // check if is hip3 symbol
2583
+ const baseName = this.safeString(market, 'baseName', '');
2584
+ const part = baseName.split(':');
2585
+ const partsLength = part.length;
2586
+ if (partsLength > 1) {
2587
+ request['dex'] = this.safeString(part, 0);
2588
+ }
2589
+ }
2395
2590
  const response = await this.publicPostInfo(this.extend(request, params));
2396
2591
  //
2397
2592
  // [
@@ -4016,6 +4211,9 @@ class hyperliquid extends hyperliquid$1["default"] {
4016
4211
  if (coin.indexOf('/') > -1 || coin.indexOf('@') > -1) {
4017
4212
  return coin; // spot
4018
4213
  }
4214
+ if (coin.indexOf(':') > -1) {
4215
+ coin = coin.replace(':', '-'); // hip3
4216
+ }
4019
4217
  return this.safeCurrencyCode(coin) + '/USDC:USDC';
4020
4218
  }
4021
4219
  handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {