ccxt 4.4.86 → 4.4.88

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 (72) hide show
  1. package/README.md +17 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +11 -1
  4. package/dist/cjs/src/abstract/modetrade.js +9 -0
  5. package/dist/cjs/src/base/Exchange.js +12 -8
  6. package/dist/cjs/src/binance.js +1 -1
  7. package/dist/cjs/src/bitteam.js +31 -0
  8. package/dist/cjs/src/bybit.js +19 -80
  9. package/dist/cjs/src/coinmetro.js +5 -1
  10. package/dist/cjs/src/derive.js +4 -5
  11. package/dist/cjs/src/ellipx.js +2 -3
  12. package/dist/cjs/src/gate.js +92 -76
  13. package/dist/cjs/src/htx.js +10 -8
  14. package/dist/cjs/src/hyperliquid.js +32 -16
  15. package/dist/cjs/src/kraken.js +5 -8
  16. package/dist/cjs/src/modetrade.js +2839 -0
  17. package/dist/cjs/src/okx.js +95 -2
  18. package/dist/cjs/src/okxus.js +53 -0
  19. package/dist/cjs/src/paradex.js +6 -1
  20. package/dist/cjs/src/phemex.js +4 -6
  21. package/dist/cjs/src/poloniex.js +181 -170
  22. package/dist/cjs/src/pro/modetrade.js +1334 -0
  23. package/dist/cjs/src/pro/okxus.js +38 -0
  24. package/dist/cjs/src/probit.js +18 -51
  25. package/dist/cjs/src/timex.js +5 -10
  26. package/dist/cjs/src/vertex.js +3 -4
  27. package/dist/cjs/src/whitebit.js +41 -11
  28. package/dist/cjs/src/woo.js +101 -77
  29. package/dist/cjs/src/woofipro.js +24 -21
  30. package/dist/cjs/src/xt.js +36 -44
  31. package/js/ccxt.d.ts +14 -2
  32. package/js/ccxt.js +10 -2
  33. package/js/src/abstract/modetrade.d.ts +122 -0
  34. package/js/src/abstract/modetrade.js +11 -0
  35. package/js/src/abstract/okxus.d.ts +352 -0
  36. package/js/src/abstract/okxus.js +11 -0
  37. package/js/src/base/Exchange.js +12 -8
  38. package/js/src/binance.js +1 -1
  39. package/js/src/bitteam.js +31 -0
  40. package/js/src/bybit.js +19 -80
  41. package/js/src/coinmetro.js +5 -1
  42. package/js/src/derive.js +4 -3
  43. package/js/src/ellipx.d.ts +1 -1
  44. package/js/src/ellipx.js +3 -5
  45. package/js/src/gate.js +92 -76
  46. package/js/src/htx.js +10 -8
  47. package/js/src/hyperliquid.js +32 -16
  48. package/js/src/kraken.js +5 -8
  49. package/js/src/modetrade.d.ts +475 -0
  50. package/js/src/modetrade.js +2840 -0
  51. package/js/src/okx.d.ts +24 -1
  52. package/js/src/okx.js +95 -2
  53. package/js/src/okxus.d.ts +4 -0
  54. package/js/src/okxus.js +54 -0
  55. package/js/src/paradex.js +6 -1
  56. package/js/src/phemex.js +4 -6
  57. package/js/src/poloniex.d.ts +2 -0
  58. package/js/src/poloniex.js +181 -170
  59. package/js/src/pro/modetrade.d.ts +155 -0
  60. package/js/src/pro/modetrade.js +1335 -0
  61. package/js/src/pro/okxus.d.ts +4 -0
  62. package/js/src/pro/okxus.js +39 -0
  63. package/js/src/probit.js +18 -51
  64. package/js/src/timex.js +5 -10
  65. package/js/src/vertex.js +3 -4
  66. package/js/src/whitebit.js +42 -11
  67. package/js/src/woo.d.ts +2 -0
  68. package/js/src/woo.js +101 -77
  69. package/js/src/woofipro.d.ts +2 -1
  70. package/js/src/woofipro.js +24 -21
  71. package/js/src/xt.js +36 -44
  72. package/package.json +1 -1
@@ -108,7 +108,7 @@ class gate extends gate$1 {
108
108
  'fetchCurrencies': true,
109
109
  'fetchDepositAddress': true,
110
110
  'fetchDepositAddresses': false,
111
- 'fetchDepositAddressesByNetwork': false,
111
+ 'fetchDepositAddressesByNetwork': true,
112
112
  'fetchDeposits': true,
113
113
  'fetchDepositWithdrawFee': 'emulated',
114
114
  'fetchDepositWithdrawFees': true,
@@ -717,6 +717,16 @@ class gate extends gate$1 {
717
717
  },
718
718
  'networksById': {
719
719
  'OPETH': 'OP',
720
+ 'ETH': 'ERC20',
721
+ 'ERC20': 'ERC20',
722
+ 'TRX': 'TRC20',
723
+ 'TRC20': 'TRC20',
724
+ 'HT': 'HRC20',
725
+ 'HECO': 'HRC20',
726
+ 'BSC': 'BEP20',
727
+ 'BEP20': 'BEP20',
728
+ 'POLYGON': 'MATIC',
729
+ 'POL': 'MATIC',
720
730
  },
721
731
  'timeInForce': {
722
732
  'GTC': 'gtc',
@@ -1213,6 +1223,9 @@ class gate extends gate$1 {
1213
1223
  if (this.options['adjustForTimeDifference']) {
1214
1224
  await this.loadTimeDifference();
1215
1225
  }
1226
+ if (this.checkRequiredCredentials(false)) {
1227
+ await this.loadUnifiedStatus();
1228
+ }
1216
1229
  const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
1217
1230
  let rawPromises = [
1218
1231
  this.fetchContractMarkets(params),
@@ -1826,88 +1839,93 @@ class gate extends gate$1 {
1826
1839
  if (apiBackup !== undefined) {
1827
1840
  return undefined;
1828
1841
  }
1829
- if (this.checkRequiredCredentials(false)) {
1830
- await this.loadUnifiedStatus();
1831
- }
1832
1842
  const response = await this.publicSpotGetCurrencies(params);
1833
1843
  //
1834
- // [
1835
- // {
1836
- // "currency": "USDT_ETH",
1837
- // "name": "Tether",
1838
- // "delisted": false,
1839
- // "withdraw_disabled": false,
1840
- // "withdraw_delayed": false,
1841
- // "deposit_disabled": false,
1842
- // "trade_disabled": true,
1843
- // "chain": "ETH"
1844
- // },
1845
- // ]
1844
+ // [
1845
+ // {
1846
+ // "currency": "USDT",
1847
+ // "name": "Tether",
1848
+ // "delisted": false,
1849
+ // "withdraw_disabled": false,
1850
+ // "withdraw_delayed": false,
1851
+ // "deposit_disabled": false,
1852
+ // "trade_disabled": false,
1853
+ // "fixed_rate": "",
1854
+ // "chain": "ETH",
1855
+ // "chains": [
1856
+ // {
1857
+ // "name": "ETH",
1858
+ // "addr": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
1859
+ // "withdraw_disabled": false,
1860
+ // "withdraw_delayed": false,
1861
+ // "deposit_disabled": false
1862
+ // },
1863
+ // {
1864
+ // "name": "ARBEVM",
1865
+ // "addr": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
1866
+ // "withdraw_disabled": false,
1867
+ // "withdraw_delayed": false,
1868
+ // "deposit_disabled": false
1869
+ // },
1870
+ // {
1871
+ // "name": "BSC",
1872
+ // "addr": "0x55d398326f99059fF775485246999027B3197955",
1873
+ // "withdraw_disabled": false,
1874
+ // "withdraw_delayed": false,
1875
+ // "deposit_disabled": false
1876
+ // },
1877
+ // ]
1878
+ // },
1879
+ // ]
1846
1880
  //
1847
1881
  const indexedCurrencies = this.indexBy(response, 'currency');
1848
1882
  const result = {};
1849
1883
  for (let i = 0; i < response.length; i++) {
1850
1884
  const entry = response[i];
1851
1885
  const currencyId = this.safeString(entry, 'currency');
1852
- const parts = currencyId.split('_');
1853
- const partFirst = this.safeString(parts, 0);
1854
- // if there's an underscore then the second part is always the chain name (except the _OLD suffix)
1855
- const currencyName = currencyId.endsWith('_OLD') ? currencyId : partFirst;
1856
- const withdrawDisabled = this.safeBool(entry, 'withdraw_disabled', false);
1857
- const depositDisabled = this.safeBool(entry, 'deposit_disabled', false);
1858
- const tradeDisabled = this.safeBool(entry, 'trade_disabled', false);
1859
- const precision = this.parseNumber('0.0001'); // temporary safe default, because no value provided from API
1860
- const code = this.safeCurrencyCode(currencyName);
1886
+ const code = this.safeCurrencyCode(currencyId);
1861
1887
  // check leveraged tokens (e.g. BTC3S, ETH5L)
1862
- let isLeveragedToken = false;
1863
- if (currencyId.endsWith('3S') || currencyId.endsWith('3L') || currencyId.endsWith('5S') || currencyId.endsWith('5L')) {
1864
- const realCurrencyId = currencyId.slice(0, -2);
1865
- if (realCurrencyId in indexedCurrencies) {
1866
- isLeveragedToken = true;
1867
- }
1868
- }
1869
- const type = isLeveragedToken ? 'leveraged' : 'crypto';
1870
- // some networks are null, they are mostly obsolete & unsupported dead tokens, so we can default their networkId to their tokenname
1871
- const networkId = this.safeString(entry, 'chain', currencyId);
1872
- const networkCode = this.networkIdToCode(networkId, code);
1873
- const networkEntry = {
1874
- 'info': entry,
1875
- 'id': networkId,
1876
- 'network': networkCode,
1877
- 'limits': {
1878
- 'deposit': {
1879
- 'min': undefined,
1880
- 'max': undefined,
1881
- },
1882
- 'withdraw': {
1883
- 'min': undefined,
1884
- 'max': undefined,
1888
+ const type = this.isLeveragedCurrency(currencyId, true, indexedCurrencies) ? 'leveraged' : 'crypto';
1889
+ const chains = this.safeList(entry, 'chains', []);
1890
+ const networks = {};
1891
+ for (let j = 0; j < chains.length; j++) {
1892
+ const chain = chains[j];
1893
+ const networkId = this.safeString(chain, 'name');
1894
+ const networkCode = this.networkIdToCode(networkId);
1895
+ networks[networkCode] = {
1896
+ 'info': chain,
1897
+ 'id': networkId,
1898
+ 'network': networkCode,
1899
+ 'active': undefined,
1900
+ 'deposit': !this.safeBool(chain, 'deposit_disabled'),
1901
+ 'withdraw': !this.safeBool(chain, 'withdraw_disabled'),
1902
+ 'fee': undefined,
1903
+ 'precision': this.parseNumber('0.0001'),
1904
+ 'limits': {
1905
+ 'deposit': {
1906
+ 'min': undefined,
1907
+ 'max': undefined,
1908
+ },
1909
+ 'withdraw': {
1910
+ 'min': undefined,
1911
+ 'max': undefined,
1912
+ },
1885
1913
  },
1886
- },
1887
- 'active': !tradeDisabled,
1888
- 'deposit': !depositDisabled,
1889
- 'withdraw': !withdrawDisabled,
1890
- 'fee': undefined,
1891
- 'precision': precision,
1892
- };
1893
- // check if first entry for the specific currency
1894
- if (!(code in result)) {
1895
- result[code] = {
1896
- 'id': currencyName,
1897
- 'lowerCaseId': currencyName.toLowerCase(),
1898
- 'code': code,
1899
- 'type': type,
1900
- 'precision': precision,
1901
- 'limits': undefined,
1902
- 'networks': {},
1903
- 'info': [], // will be filled below
1904
1914
  };
1905
1915
  }
1906
- result[code]['networks'][networkCode] = networkEntry;
1907
- const info = this.safeList(result[code], 'info', []);
1908
- info.push(entry);
1909
- result[code]['info'] = info;
1910
- result[code] = this.safeCurrencyStructure(result[code]); // this is needed after adding network entry
1916
+ result[code] = this.safeCurrencyStructure({
1917
+ 'id': currencyId,
1918
+ 'code': code,
1919
+ 'name': this.safeString(entry, 'name'),
1920
+ 'type': type,
1921
+ 'active': !this.safeBool(entry, 'delisted'),
1922
+ 'deposit': !this.safeBool(entry, 'deposit_disabled'),
1923
+ 'withdraw': !this.safeBool(entry, 'withdraw_disabled'),
1924
+ 'fee': undefined,
1925
+ 'networks': networks,
1926
+ 'precision': this.parseNumber('0.0001'),
1927
+ 'info': entry,
1928
+ });
1911
1929
  }
1912
1930
  return result;
1913
1931
  }
@@ -2179,9 +2197,7 @@ class gate extends gate$1 {
2179
2197
  const chains = this.safeValue(response, 'multichain_addresses', []);
2180
2198
  const currencyId = this.safeString(response, 'currency');
2181
2199
  currency = this.safeCurrency(currencyId, currency);
2182
- const parsed = this.parseDepositAddresses(chains, [currency['code']], false, {
2183
- 'currency': currency['id'],
2184
- });
2200
+ const parsed = this.parseDepositAddresses(chains, undefined, false);
2185
2201
  return this.indexBy(parsed, 'network');
2186
2202
  }
2187
2203
  /**
@@ -2199,8 +2215,8 @@ class gate extends gate$1 {
2199
2215
  let networkCode = undefined;
2200
2216
  [networkCode, params] = this.handleNetworkCodeAndParams(params);
2201
2217
  const chainsIndexedById = await this.fetchDepositAddressesByNetwork(code, params);
2202
- const selectedNetworkId = this.selectNetworkCodeFromUnifiedNetworks(code, networkCode, chainsIndexedById);
2203
- return chainsIndexedById[selectedNetworkId];
2218
+ const selectedNetworkIdOrCode = this.selectNetworkCodeFromUnifiedNetworks(code, networkCode, chainsIndexedById);
2219
+ return chainsIndexedById[selectedNetworkIdOrCode];
2204
2220
  }
2205
2221
  parseDepositAddress(depositAddress, currency = undefined) {
2206
2222
  //
@@ -4540,6 +4540,8 @@ class htx extends htx$1 {
4540
4540
  const request = {};
4541
4541
  let marketType = undefined;
4542
4542
  [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
4543
+ let subType = undefined;
4544
+ [subType, params] = this.handleSubTypeAndParams('fetchOpenOrders', market, params, 'linear');
4543
4545
  let response = undefined;
4544
4546
  if (marketType === 'spot') {
4545
4547
  if (symbol !== undefined) {
@@ -4568,18 +4570,18 @@ class htx extends htx$1 {
4568
4570
  response = await this.spotPrivateGetV1OrderOpenOrders(this.extend(request, params));
4569
4571
  }
4570
4572
  else {
4571
- if (symbol === undefined) {
4572
- throw new errors.ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
4573
+ if (symbol !== undefined) {
4574
+ // throw new ArgumentsRequired (this.id + ' fetchOpenOrders() requires a symbol argument');
4575
+ request['contract_code'] = market['id'];
4573
4576
  }
4574
4577
  if (limit !== undefined) {
4575
4578
  request['page_size'] = limit;
4576
4579
  }
4577
- request['contract_code'] = market['id'];
4578
4580
  const trigger = this.safeBool2(params, 'stop', 'trigger');
4579
4581
  const stopLossTakeProfit = this.safeValue(params, 'stopLossTakeProfit');
4580
4582
  const trailing = this.safeBool(params, 'trailing', false);
4581
4583
  params = this.omit(params, ['stop', 'stopLossTakeProfit', 'trailing', 'trigger']);
4582
- if (market['linear']) {
4584
+ if (subType === 'linear') {
4583
4585
  let marginMode = undefined;
4584
4586
  [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
4585
4587
  marginMode = (marginMode === undefined) ? 'cross' : marginMode;
@@ -4612,8 +4614,8 @@ class htx extends htx$1 {
4612
4614
  }
4613
4615
  }
4614
4616
  }
4615
- else if (market['inverse']) {
4616
- if (market['swap']) {
4617
+ else if (subType === 'inverse') {
4618
+ if (marketType === 'swap') {
4617
4619
  if (trigger) {
4618
4620
  response = await this.contractPrivatePostSwapApiV1SwapTriggerOpenorders(this.extend(request, params));
4619
4621
  }
@@ -4627,8 +4629,8 @@ class htx extends htx$1 {
4627
4629
  response = await this.contractPrivatePostSwapApiV1SwapOpenorders(this.extend(request, params));
4628
4630
  }
4629
4631
  }
4630
- else if (market['future']) {
4631
- request['symbol'] = market['settleId'];
4632
+ else if (marketType === 'future') {
4633
+ request['symbol'] = this.safeString(market, 'settleId', 'usdt');
4632
4634
  if (trigger) {
4633
4635
  response = await this.contractPrivatePostApiV1ContractTriggerOpenorders(this.extend(request, params));
4634
4636
  }
@@ -1526,7 +1526,9 @@ class hyperliquid extends hyperliquid$1 {
1526
1526
  }
1527
1527
  orderReq.push(orderObj);
1528
1528
  }
1529
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1529
+ let vaultAddress = undefined;
1530
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'createOrder', 'vaultAddress');
1531
+ vaultAddress = this.formatVaultAddress(vaultAddress);
1530
1532
  const orderAction = {
1531
1533
  'type': 'order',
1532
1534
  'orders': orderReq,
@@ -1621,7 +1623,9 @@ class hyperliquid extends hyperliquid$1 {
1621
1623
  }
1622
1624
  }
1623
1625
  cancelAction['cancels'] = cancelReq;
1624
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1626
+ let vaultAddress = undefined;
1627
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'cancelOrders', 'vaultAddress');
1628
+ vaultAddress = this.formatVaultAddress(vaultAddress);
1625
1629
  const signature = this.signL1Action(cancelAction, nonce, vaultAddress);
1626
1630
  request['action'] = cancelAction;
1627
1631
  request['signature'] = signature;
@@ -1705,7 +1709,9 @@ class hyperliquid extends hyperliquid$1 {
1705
1709
  }
1706
1710
  cancelAction['type'] = cancelByCloid ? 'cancelByCloid' : 'cancel';
1707
1711
  cancelAction['cancels'] = cancelReq;
1708
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1712
+ let vaultAddress = undefined;
1713
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'cancelOrdersForSymbols', 'vaultAddress');
1714
+ vaultAddress = this.formatVaultAddress(vaultAddress);
1709
1715
  const signature = this.signL1Action(cancelAction, nonce, vaultAddress);
1710
1716
  request['action'] = cancelAction;
1711
1717
  request['signature'] = signature;
@@ -1751,7 +1757,9 @@ class hyperliquid extends hyperliquid$1 {
1751
1757
  'type': 'scheduleCancel',
1752
1758
  'time': nonce + timeout,
1753
1759
  };
1754
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1760
+ let vaultAddress = undefined;
1761
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'cancelAllOrdersAfter', 'vaultAddress');
1762
+ vaultAddress = this.formatVaultAddress(vaultAddress);
1755
1763
  const signature = this.signL1Action(cancelAction, nonce, vaultAddress);
1756
1764
  request['action'] = cancelAction;
1757
1765
  request['signature'] = signature;
@@ -1876,7 +1884,9 @@ class hyperliquid extends hyperliquid$1 {
1876
1884
  'type': 'batchModify',
1877
1885
  'modifies': modifies,
1878
1886
  };
1879
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
1887
+ let vaultAddress = undefined;
1888
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'editOrder', 'vaultAddress');
1889
+ vaultAddress = this.formatVaultAddress(vaultAddress);
1880
1890
  const signature = this.signL1Action(modifyAction, nonce, vaultAddress);
1881
1891
  const request = {
1882
1892
  'action': modifyAction,
@@ -1885,7 +1895,6 @@ class hyperliquid extends hyperliquid$1 {
1885
1895
  // 'vaultAddress': vaultAddress,
1886
1896
  };
1887
1897
  if (vaultAddress !== undefined) {
1888
- params = this.omit(params, 'vaultAddress');
1889
1898
  request['vaultAddress'] = vaultAddress;
1890
1899
  }
1891
1900
  return request;
@@ -2740,9 +2749,9 @@ class hyperliquid extends hyperliquid$1 {
2740
2749
  'isCross': isCross,
2741
2750
  'leverage': leverage,
2742
2751
  };
2743
- let vaultAddress = this.safeString(params, 'vaultAddress');
2752
+ let vaultAddress = undefined;
2753
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'setMarginMode', 'vaultAddress');
2744
2754
  if (vaultAddress !== undefined) {
2745
- params = this.omit(params, 'vaultAddress');
2746
2755
  if (vaultAddress.startsWith('0x')) {
2747
2756
  vaultAddress = vaultAddress.replace('0x', '');
2748
2757
  }
@@ -2795,7 +2804,9 @@ class hyperliquid extends hyperliquid$1 {
2795
2804
  'isCross': isCross,
2796
2805
  'leverage': leverage,
2797
2806
  };
2798
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
2807
+ let vaultAddress = undefined;
2808
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'setLeverage', 'vaultAddress');
2809
+ vaultAddress = this.formatVaultAddress(vaultAddress);
2799
2810
  const signature = this.signL1Action(updateAction, nonce, vaultAddress);
2800
2811
  const request = {
2801
2812
  'action': updateAction,
@@ -2859,7 +2870,9 @@ class hyperliquid extends hyperliquid$1 {
2859
2870
  'isBuy': true,
2860
2871
  'ntli': sz,
2861
2872
  };
2862
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
2873
+ let vaultAddress = undefined;
2874
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'modifyMargin', 'vaultAddress');
2875
+ vaultAddress = this.formatVaultAddress(vaultAddress);
2863
2876
  const signature = this.signL1Action(updateAction, nonce, vaultAddress);
2864
2877
  const request = {
2865
2878
  'action': updateAction,
@@ -2868,7 +2881,6 @@ class hyperliquid extends hyperliquid$1 {
2868
2881
  // 'vaultAddress': vaultAddress,
2869
2882
  };
2870
2883
  if (vaultAddress !== undefined) {
2871
- params = this.omit(params, 'vaultAddress');
2872
2884
  request['vaultAddress'] = vaultAddress;
2873
2885
  }
2874
2886
  const response = await this.privatePostExchange(request);
@@ -2927,8 +2939,9 @@ class hyperliquid extends hyperliquid$1 {
2927
2939
  throw new errors.NotSupported(this.id + ' transfer() only support spot <> swap transfer');
2928
2940
  }
2929
2941
  let strAmount = this.numberToString(amount);
2930
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
2931
- params = this.omit(params, 'vaultAddress');
2942
+ let vaultAddress = undefined;
2943
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'transfer', 'vaultAddress');
2944
+ vaultAddress = this.formatVaultAddress(vaultAddress);
2932
2945
  if (vaultAddress !== undefined) {
2933
2946
  strAmount = strAmount + ' subaccount:' + vaultAddress;
2934
2947
  }
@@ -3031,7 +3044,9 @@ class hyperliquid extends hyperliquid$1 {
3031
3044
  throw new errors.NotSupported(this.id + ' withdraw() only support USDC');
3032
3045
  }
3033
3046
  }
3034
- const vaultAddress = this.formatVaultAddress(this.safeString(params, 'vaultAddress'));
3047
+ let vaultAddress = undefined;
3048
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'withdraw', 'vaultAddress');
3049
+ vaultAddress = this.formatVaultAddress(vaultAddress);
3035
3050
  params = this.omit(params, 'vaultAddress');
3036
3051
  const nonce = this.milliseconds();
3037
3052
  let action = {};
@@ -3657,8 +3672,9 @@ class hyperliquid extends hyperliquid$1 {
3657
3672
  }
3658
3673
  parseCreateEditOrderArgs(id, symbol, type, side, amount, price = undefined, params = {}) {
3659
3674
  const market = this.market(symbol);
3660
- const vaultAddress = this.safeString(params, 'vaultAddress');
3661
- params = this.omit(params, 'vaultAddress');
3675
+ let vaultAddress = undefined;
3676
+ [vaultAddress, params] = this.handleOptionAndParams(params, 'createOrder', 'vaultAddress');
3677
+ vaultAddress = this.formatVaultAddress(vaultAddress);
3662
3678
  symbol = market['symbol'];
3663
3679
  const order = {
3664
3680
  'symbol': symbol,
@@ -855,24 +855,21 @@ class kraken extends kraken$1 {
855
855
  code = this.safeCurrencyCode(id);
856
856
  }
857
857
  }
858
- const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals')));
859
- // assumes all currencies are active except those listed above
860
- const active = this.safeString(currency, 'status') === 'enabled';
861
858
  const isFiat = code.indexOf('.HOLD') >= 0;
862
- result[code] = {
859
+ result[code] = this.safeCurrencyStructure({
863
860
  'id': id,
864
861
  'code': code,
865
862
  'info': currency,
866
863
  'name': this.safeString(currency, 'altname'),
867
- 'active': active,
864
+ 'active': this.safeString(currency, 'status') === 'enabled',
868
865
  'type': isFiat ? 'fiat' : 'crypto',
869
866
  'deposit': undefined,
870
867
  'withdraw': undefined,
871
868
  'fee': undefined,
872
- 'precision': precision,
869
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals'))),
873
870
  'limits': {
874
871
  'amount': {
875
- 'min': precision,
872
+ 'min': undefined,
876
873
  'max': undefined,
877
874
  },
878
875
  'withdraw': {
@@ -881,7 +878,7 @@ class kraken extends kraken$1 {
881
878
  },
882
879
  },
883
880
  'networks': {},
884
- };
881
+ });
885
882
  }
886
883
  return result;
887
884
  }