ccxt 4.3.45 → 4.3.46

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 (43) hide show
  1. package/README.md +127 -127
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/base/Exchange.js +1 -0
  5. package/dist/cjs/src/binance.js +2 -0
  6. package/dist/cjs/src/bingx.js +25 -17
  7. package/dist/cjs/src/bitmart.js +5 -0
  8. package/dist/cjs/src/bitteam.js +5 -7
  9. package/dist/cjs/src/coinmetro.js +8 -17
  10. package/dist/cjs/src/hyperliquid.js +29 -21
  11. package/dist/cjs/src/idex.js +1 -0
  12. package/dist/cjs/src/mexc.js +8 -6
  13. package/dist/cjs/src/okx.js +1 -0
  14. package/dist/cjs/src/oxfun.js +2 -2
  15. package/dist/cjs/src/pro/binanceus.js +0 -8
  16. package/dist/cjs/src/tokocrypto.js +8 -10
  17. package/dist/cjs/src/wavesexchange.js +1 -0
  18. package/dist/cjs/src/woofipro.js +1 -0
  19. package/js/ccxt.d.ts +1 -1
  20. package/js/ccxt.js +1 -1
  21. package/js/src/abstract/binance.d.ts +2 -0
  22. package/js/src/abstract/binancecoinm.d.ts +2 -0
  23. package/js/src/abstract/binanceus.d.ts +2 -0
  24. package/js/src/abstract/binanceusdm.d.ts +2 -0
  25. package/js/src/abstract/mexc.d.ts +2 -0
  26. package/js/src/base/Exchange.d.ts +1 -0
  27. package/js/src/base/Exchange.js +1 -0
  28. package/js/src/binance.js +2 -0
  29. package/js/src/bingx.js +26 -18
  30. package/js/src/bitmart.js +5 -0
  31. package/js/src/bitteam.js +6 -8
  32. package/js/src/coinmetro.js +9 -18
  33. package/js/src/hyperliquid.d.ts +3 -3
  34. package/js/src/hyperliquid.js +29 -21
  35. package/js/src/idex.js +1 -0
  36. package/js/src/mexc.js +8 -6
  37. package/js/src/okx.js +1 -0
  38. package/js/src/oxfun.js +2 -2
  39. package/js/src/pro/binanceus.js +0 -8
  40. package/js/src/tokocrypto.js +9 -11
  41. package/js/src/wavesexchange.js +1 -0
  42. package/js/src/woofipro.js +1 -0
  43. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -188,7 +188,7 @@ var woofipro$1 = require('./src/pro/woofipro.js');
188
188
 
189
189
  //-----------------------------------------------------------------------------
190
190
  // this is updated by vss.js when building
191
- const version = '4.3.45';
191
+ const version = '4.3.46';
192
192
  Exchange["default"].ccxtVersion = version;
193
193
  const exchanges = {
194
194
  'ace': ace,
@@ -368,6 +368,7 @@ class Exchange {
368
368
  'certified': false,
369
369
  'pro': false,
370
370
  'alias': false,
371
+ 'dex': false,
371
372
  'has': {
372
373
  'publicAPI': true,
373
374
  'privateAPI': true,
@@ -987,6 +987,8 @@ class binance extends binance$1 {
987
987
  'post': {
988
988
  'order/oco': 0.2,
989
989
  'orderList/oco': 0.2,
990
+ 'orderList/oto': 0.2,
991
+ 'orderList/otoco': 0.2,
990
992
  'sor/order': 0.2,
991
993
  'sor/order/test': 0.2,
992
994
  'order': 0.2,
@@ -385,7 +385,7 @@ class bingx extends bingx$1 {
385
385
  '1w': '1w',
386
386
  '1M': '1M',
387
387
  },
388
- 'precisionMode': number.DECIMAL_PLACES,
388
+ 'precisionMode': number.TICK_SIZE,
389
389
  'exceptions': {
390
390
  'exact': {
391
391
  '400': errors.BadRequest,
@@ -610,18 +610,26 @@ class bingx extends bingx$1 {
610
610
  // "msg": "",
611
611
  // "data": [
612
612
  // {
613
- // "contractId": "100",
614
- // "symbol": "BTC-USDT",
615
- // "size": "0.0001",
616
- // "quantityPrecision": 4,
617
- // "pricePrecision": 1,
618
- // "feeRate": 0.0005,
619
- // "tradeMinLimit": 1,
620
- // "maxLongLeverage": 150,
621
- // "maxShortLeverage": 150,
622
- // "currency": "USDT",
623
- // "asset": "BTC",
624
- // "status": 1
613
+ // "contractId": "100",
614
+ // "symbol": "BTC-USDT",
615
+ // "size": "0.0001",
616
+ // "quantityPrecision": "4",
617
+ // "pricePrecision": "1",
618
+ // "feeRate": "0.0005",
619
+ // "makerFeeRate": "0.0002",
620
+ // "takerFeeRate": "0.0005",
621
+ // "tradeMinLimit": "0",
622
+ // "tradeMinQuantity": "0.0001",
623
+ // "tradeMinUSDT": "2",
624
+ // "maxLongLeverage": "125",
625
+ // "maxShortLeverage": "125",
626
+ // "currency": "USDT",
627
+ // "asset": "BTC",
628
+ // "status": "1",
629
+ // "apiStateOpen": "true",
630
+ // "apiStateClose": "true",
631
+ // "ensureTrigger": true,
632
+ // "triggerFeeRate": "0.00020000"
625
633
  // },
626
634
  // ...
627
635
  // ]
@@ -639,13 +647,13 @@ class bingx extends bingx$1 {
639
647
  const quote = this.safeCurrencyCode(quoteId);
640
648
  const currency = this.safeString(market, 'currency');
641
649
  const settle = this.safeCurrencyCode(currency);
642
- let pricePrecision = this.safeInteger(market, 'pricePrecision');
650
+ let pricePrecision = this.safeNumber(market, 'tickSize');
643
651
  if (pricePrecision === undefined) {
644
- pricePrecision = this.precisionFromString(this.safeString(market, 'tickSize'));
652
+ pricePrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'pricePrecision')));
645
653
  }
646
- let quantityPrecision = this.safeInteger(market, 'quantityPrecision');
654
+ let quantityPrecision = this.safeNumber(market, 'stepSize');
647
655
  if (quantityPrecision === undefined) {
648
- quantityPrecision = this.precisionFromString(this.safeString(market, 'stepSize'));
656
+ quantityPrecision = this.parseNumber(this.parsePrecision(this.safeString(market, 'quantityPrecision')));
649
657
  }
650
658
  const type = (settle !== undefined) ? 'swap' : 'spot';
651
659
  const spot = type === 'spot';
@@ -2740,6 +2740,11 @@ class bitmart extends bitmart$1 {
2740
2740
  if (ioc) {
2741
2741
  request['type'] = 'ioc';
2742
2742
  }
2743
+ const clientOrderId = this.safeString(params, 'clientOrderId');
2744
+ if (clientOrderId !== undefined) {
2745
+ params = this.omit(params, 'clientOrderId');
2746
+ request['client_order_id'] = clientOrderId;
2747
+ }
2743
2748
  return this.extend(request, params);
2744
2749
  }
2745
2750
  async cancelOrder(id, symbol = undefined, params = {}) {
@@ -190,7 +190,7 @@ class bitteam extends bitteam$1 {
190
190
  'maker': this.parseNumber('0.002'),
191
191
  },
192
192
  },
193
- 'precisionMode': number.DECIMAL_PLACES,
193
+ 'precisionMode': number.TICK_SIZE,
194
194
  // exchange-specific options
195
195
  'options': {
196
196
  'networksById': {
@@ -351,8 +351,6 @@ class bitteam extends bitteam$1 {
351
351
  const base = this.safeCurrencyCode(baseId);
352
352
  const quote = this.safeCurrencyCode(quoteId);
353
353
  const active = this.safeValue(market, 'active');
354
- const amountPrecision = this.safeInteger(market, 'baseStep');
355
- const pricePrecision = this.safeInteger(market, 'quoteStep');
356
354
  const timeStart = this.safeString(market, 'timeStart');
357
355
  const created = this.parse8601(timeStart);
358
356
  let minCost = undefined;
@@ -388,8 +386,8 @@ class bitteam extends bitteam$1 {
388
386
  'strike': undefined,
389
387
  'optionType': undefined,
390
388
  'precision': {
391
- 'amount': amountPrecision,
392
- 'price': pricePrecision,
389
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'baseStep'))),
390
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quoteStep'))),
393
391
  },
394
392
  'limits': {
395
393
  'leverage': {
@@ -545,7 +543,7 @@ class bitteam extends bitteam$1 {
545
543
  const numericId = this.safeInteger(currency, 'id');
546
544
  const code = this.safeCurrencyCode(id);
547
545
  const active = this.safeBool(currency, 'active', false);
548
- const precision = this.safeInteger(currency, 'precision');
546
+ const precision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'precision')));
549
547
  const txLimits = this.safeValue(currency, 'txLimits', {});
550
548
  const minWithdraw = this.safeString(txLimits, 'minWithdraw');
551
549
  const maxWithdraw = this.safeString(txLimits, 'maxWithdraw');
@@ -567,7 +565,7 @@ class bitteam extends bitteam$1 {
567
565
  const withdraw = this.safeValue(statuses, 'withdrawStatus');
568
566
  const networkIds = Object.keys(feesByNetworkId);
569
567
  const networks = {};
570
- const networkPrecision = this.safeInteger(currency, 'decimals');
568
+ const networkPrecision = this.parseNumber(this.parsePrecision(this.safeString(currency, 'decimals')));
571
569
  for (let j = 0; j < networkIds.length; j++) {
572
570
  const networkId = networkIds[j];
573
571
  const networkCode = this.networkIdToCode(networkId, code);
@@ -205,7 +205,7 @@ class coinmetro extends coinmetro$1 {
205
205
  'maker': this.parseNumber('0'),
206
206
  },
207
207
  },
208
- 'precisionMode': number.DECIMAL_PLACES,
208
+ 'precisionMode': number.TICK_SIZE,
209
209
  // exchange-specific options
210
210
  'options': {
211
211
  'currenciesByIdForParseMarket': undefined,
@@ -309,7 +309,6 @@ class coinmetro extends coinmetro$1 {
309
309
  const deposit = this.safeValue(currency, 'canDeposit');
310
310
  const canTrade = this.safeValue(currency, 'canTrade');
311
311
  const active = canTrade ? withdraw : true;
312
- const precision = this.safeInteger(currency, 'digits');
313
312
  const minAmount = this.safeNumber(currency, 'minQty');
314
313
  result[code] = this.safeCurrencyStructure({
315
314
  'id': id,
@@ -320,7 +319,7 @@ class coinmetro extends coinmetro$1 {
320
319
  'deposit': deposit,
321
320
  'withdraw': withdraw,
322
321
  'fee': undefined,
323
- 'precision': precision,
322
+ 'precision': this.parseNumber(this.parsePrecision(this.safeString(currency, 'digits'))),
324
323
  'limits': {
325
324
  'amount': { 'min': minAmount, 'max': undefined },
326
325
  'withdraw': { 'min': undefined, 'max': undefined },
@@ -351,19 +350,14 @@ class coinmetro extends coinmetro$1 {
351
350
  //
352
351
  // [
353
352
  // {
354
- // "pair": "PERPEUR",
355
- // "precision": 5,
356
- // "margin": false
357
- // },
358
- // {
359
- // "pair": "PERPUSD",
353
+ // "pair": "YFIEUR",
360
354
  // "precision": 5,
361
355
  // "margin": false
362
356
  // },
363
357
  // {
364
- // "pair": "YFIEUR",
365
- // "precision": 5,
366
- // "margin": false
358
+ // "pair": "BTCEUR",
359
+ // "precision": 2,
360
+ // "margin": true
367
361
  // },
368
362
  // ...
369
363
  // ]
@@ -409,9 +403,7 @@ class coinmetro extends coinmetro$1 {
409
403
  'optionType': undefined,
410
404
  'precision': {
411
405
  'amount': basePrecisionAndLimits['precision'],
412
- 'price': quotePrecisionAndLimits['precision'],
413
- 'base': basePrecisionAndLimits['precision'],
414
- 'quote': quotePrecisionAndLimits['precision'],
406
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'precision'))),
415
407
  },
416
408
  'limits': {
417
409
  'leverage': {
@@ -466,12 +458,11 @@ class coinmetro extends coinmetro$1 {
466
458
  parseMarketPrecisionAndLimits(currencyId) {
467
459
  const currencies = this.safeValue(this.options, 'currenciesByIdForParseMarket', {});
468
460
  const currency = this.safeValue(currencies, currencyId, {});
469
- const precision = this.safeInteger(currency, 'precision');
470
461
  const limits = this.safeValue(currency, 'limits', {});
471
462
  const amountLimits = this.safeValue(limits, 'amount', {});
472
463
  const minLimit = this.safeNumber(amountLimits, 'min');
473
464
  const result = {
474
- 'precision': precision,
465
+ 'precision': this.safeNumber(currency, 'precision'),
475
466
  'minLimit': minLimit,
476
467
  };
477
468
  return result;
@@ -24,6 +24,7 @@ class hyperliquid extends hyperliquid$1 {
24
24
  'rateLimit': 50,
25
25
  'certified': false,
26
26
  'pro': true,
27
+ 'dex': true,
27
28
  'has': {
28
29
  'CORS': undefined,
29
30
  'spot': true,
@@ -968,11 +969,12 @@ class hyperliquid extends hyperliquid$1 {
968
969
  const signature = this.signMessage(msg, this.privateKey);
969
970
  return signature;
970
971
  }
971
- buildSig(chainId, messageTypes, message) {
972
+ signUserSignedAction(messageTypes, message) {
972
973
  const zeroAddress = this.safeString(this.options, 'zeroAddress');
974
+ const chainId = 421614; // check this out
973
975
  const domain = {
974
976
  'chainId': chainId,
975
- 'name': 'Exchange',
977
+ 'name': 'HyperliquidSignTransaction',
976
978
  'verifyingContract': zeroAddress,
977
979
  'version': '1',
978
980
  };
@@ -981,28 +983,26 @@ class hyperliquid extends hyperliquid$1 {
981
983
  return signature;
982
984
  }
983
985
  buildTransferSig(message) {
984
- const isSandboxMode = this.safeBool(this.options, 'sandboxMode');
985
- const chainId = (isSandboxMode) ? 421614 : 42161;
986
986
  const messageTypes = {
987
- 'UsdTransferSignPayload': [
987
+ 'HyperliquidTransaction:UsdSend': [
988
+ { 'name': 'hyperliquidChain', 'type': 'string' },
988
989
  { 'name': 'destination', 'type': 'string' },
989
990
  { 'name': 'amount', 'type': 'string' },
990
991
  { 'name': 'time', 'type': 'uint64' },
991
992
  ],
992
993
  };
993
- return this.buildSig(chainId, messageTypes, message);
994
+ return this.signUserSignedAction(messageTypes, message);
994
995
  }
995
996
  buildWithdrawSig(message) {
996
- const isSandboxMode = this.safeBool(this.options, 'sandboxMode');
997
- const chainId = (isSandboxMode) ? 421614 : 42161;
998
997
  const messageTypes = {
999
- 'WithdrawFromBridge2SignPayload': [
998
+ 'HyperliquidTransaction:Withdraw': [
999
+ { 'name': 'hyperliquidChain', 'type': 'string' },
1000
1000
  { 'name': 'destination', 'type': 'string' },
1001
- { 'name': 'usd', 'type': 'string' },
1001
+ { 'name': 'amount', 'type': 'string' },
1002
1002
  { 'name': 'time', 'type': 'uint64' },
1003
1003
  ],
1004
1004
  };
1005
- return this.buildSig(chainId, messageTypes, message);
1005
+ return this.signUserSignedAction(messageTypes, message);
1006
1006
  }
1007
1007
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1008
1008
  /**
@@ -2405,10 +2405,11 @@ class hyperliquid extends hyperliquid$1 {
2405
2405
  if (code !== undefined) {
2406
2406
  code = code.toUpperCase();
2407
2407
  if (code !== 'USDC') {
2408
- throw new errors.NotSupported(this.id + 'withdraw() only support USDC');
2408
+ throw new errors.NotSupported(this.id + 'transfer() only support USDC');
2409
2409
  }
2410
2410
  }
2411
2411
  const payload = {
2412
+ 'hyperliquidChain': isSandboxMode ? 'Testnet' : 'Mainnet',
2412
2413
  'destination': toAccount,
2413
2414
  'amount': this.numberToString(amount),
2414
2415
  'time': nonce,
@@ -2416,9 +2417,12 @@ class hyperliquid extends hyperliquid$1 {
2416
2417
  const sig = this.buildTransferSig(payload);
2417
2418
  const request = {
2418
2419
  'action': {
2419
- 'chain': (isSandboxMode) ? 'ArbitrumTestnet' : 'Arbitrum',
2420
- 'payload': payload,
2421
- 'type': 'usdTransfer',
2420
+ 'hyperliquidChain': payload['hyperliquidChain'],
2421
+ 'signatureChainId': '0x66eee',
2422
+ 'destination': toAccount,
2423
+ 'amount': amount.toString(),
2424
+ 'time': nonce,
2425
+ 'type': 'usdSend',
2422
2426
  },
2423
2427
  'nonce': nonce,
2424
2428
  'signature': sig,
@@ -2448,25 +2452,29 @@ class hyperliquid extends hyperliquid$1 {
2448
2452
  throw new errors.NotSupported(this.id + 'withdraw() only support USDC');
2449
2453
  }
2450
2454
  }
2451
- const isSandboxMode = this.safeBool(this.options, 'sandboxMode');
2455
+ const isSandboxMode = this.safeBool(this.options, 'sandboxMode', false);
2452
2456
  const nonce = this.milliseconds();
2453
2457
  const payload = {
2458
+ 'hyperliquidChain': isSandboxMode ? 'Testnet' : 'Mainnet',
2454
2459
  'destination': address,
2455
- 'usd': amount.toString(),
2460
+ 'amount': amount.toString(),
2456
2461
  'time': nonce,
2457
2462
  };
2458
2463
  const sig = this.buildWithdrawSig(payload);
2459
2464
  const request = {
2460
2465
  'action': {
2461
- 'chain': (isSandboxMode) ? 'ArbitrumTestnet' : 'Arbitrum',
2462
- 'payload': payload,
2463
- 'type': 'withdraw2',
2466
+ 'hyperliquidChain': payload['hyperliquidChain'],
2467
+ 'signatureChainId': '0x66eee',
2468
+ 'destination': address,
2469
+ 'amount': amount.toString(),
2470
+ 'time': nonce,
2471
+ 'type': 'withdraw3',
2464
2472
  },
2465
2473
  'nonce': nonce,
2466
2474
  'signature': sig,
2467
2475
  };
2468
2476
  const response = await this.privatePostExchange(this.extend(request, params));
2469
- return response;
2477
+ return this.parseTransaction(response);
2470
2478
  }
2471
2479
  formatVaultAddress(address = undefined) {
2472
2480
  if (address === undefined) {
@@ -24,6 +24,7 @@ class idex extends idex$1 {
24
24
  'rateLimit': 1000,
25
25
  'version': 'v3',
26
26
  'pro': true,
27
+ 'dex': true,
27
28
  'certified': false,
28
29
  'requiresWeb3': true,
29
30
  'has': {
@@ -221,6 +221,7 @@ class mexc extends mexc$1 {
221
221
  'sub-account/margin': 1,
222
222
  'batchOrders': 10,
223
223
  'capital/withdraw/apply': 1,
224
+ 'capital/withdraw': 1,
224
225
  'capital/transfer': 1,
225
226
  'capital/transfer/internal': 1,
226
227
  'capital/deposit/address': 1,
@@ -239,6 +240,7 @@ class mexc extends mexc$1 {
239
240
  'margin/order': 1,
240
241
  'margin/openOrders': 1,
241
242
  'userDataStream': 1,
243
+ 'capital/withdraw': 1,
242
244
  },
243
245
  },
244
246
  },
@@ -1066,7 +1068,7 @@ class mexc extends mexc$1 {
1066
1068
  const chains = this.safeValue(currency, 'networkList', []);
1067
1069
  for (let j = 0; j < chains.length; j++) {
1068
1070
  const chain = chains[j];
1069
- const networkId = this.safeString(chain, 'network');
1071
+ const networkId = this.safeString2(chain, 'network', 'netWork');
1070
1072
  const network = this.networkIdToCode(networkId);
1071
1073
  const isDepositEnabled = this.safeBool(chain, 'depositEnable', false);
1072
1074
  const isWithdrawEnabled = this.safeBool(chain, 'withdrawEnable', false);
@@ -5221,7 +5223,7 @@ class mexc extends mexc$1 {
5221
5223
  * @method
5222
5224
  * @name mexc#withdraw
5223
5225
  * @description make a withdrawal
5224
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#withdraw
5226
+ * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#withdraw-new
5225
5227
  * @param {string} code unified currency code
5226
5228
  * @param {float} amount the amount to withdraw
5227
5229
  * @param {string} address the address to withdraw to
@@ -5231,7 +5233,7 @@ class mexc extends mexc$1 {
5231
5233
  */
5232
5234
  [tag, params] = this.handleWithdrawTagAndParams(tag, params);
5233
5235
  const networks = this.safeValue(this.options, 'networks', {});
5234
- let network = this.safeString2(params, 'network', 'chain'); // this line allows the user to specify either ERC20 or ETH
5236
+ let network = this.safeString2(params, 'network', 'netWork'); // this line allows the user to specify either ERC20 or ETH
5235
5237
  network = this.safeString(networks, network, network); // handle ETH > ERC-20 alias
5236
5238
  this.checkAddress(address);
5237
5239
  await this.loadMarkets();
@@ -5245,10 +5247,10 @@ class mexc extends mexc$1 {
5245
5247
  request['memo'] = tag;
5246
5248
  }
5247
5249
  if (network !== undefined) {
5248
- request['network'] = network;
5249
- params = this.omit(params, ['network', 'chain']);
5250
+ request['netWork'] = network;
5251
+ params = this.omit(params, ['network', 'netWork']);
5250
5252
  }
5251
- const response = await this.spotPrivatePostCapitalWithdrawApply(this.extend(request, params));
5253
+ const response = await this.spotPrivatePostCapitalWithdraw(this.extend(request, params));
5252
5254
  //
5253
5255
  // {
5254
5256
  // "id":"7213fea8e94b4a5593d507237e5a555b"
@@ -2458,6 +2458,7 @@ class okx extends okx$1 {
2458
2458
  * @see https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-balance
2459
2459
  * @see https://www.okx.com/docs-v5/en/#trading-account-rest-api-get-balance
2460
2460
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2461
+ * @param {string} [params.type] wallet type, ['funding' or 'trading'] default is 'trading'
2461
2462
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2462
2463
  */
2463
2464
  await this.loadMarkets();
@@ -16,7 +16,7 @@ class oxfun extends oxfun$1 {
16
16
  describe() {
17
17
  return this.deepExtend(super.describe(), {
18
18
  'id': 'oxfun',
19
- 'name': 'Oxfun',
19
+ 'name': 'OXFUN',
20
20
  'countries': ['PA'],
21
21
  'version': 'v3',
22
22
  'rateLimit': 120,
@@ -136,7 +136,7 @@ class oxfun extends oxfun$1 {
136
136
  '1d': '86400s',
137
137
  },
138
138
  'urls': {
139
- 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/9c7114b3-ec32-4cf7-a716-f807d7d071cd',
139
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/6a196124-c1ee-4fae-8573-962071b61a85',
140
140
  'referral': 'https://ox.fun/register?shareAccountId=5ZUD4a7G',
141
141
  'api': {
142
142
  'public': 'https://api.ox.fun',
@@ -41,14 +41,6 @@ class binanceus extends binance {
41
41
  'defaultType': 'spot',
42
42
  'fetchMarkets': ['spot'],
43
43
  },
44
- 'fees': {
45
- 'trading': {
46
- 'tierBased': false,
47
- 'percentage': true,
48
- 'taker': 0.0,
49
- 'maker': 0.0, // 0.1% trading fee, zero fees for all trading pairs before November 1
50
- },
51
- },
52
44
  });
53
45
  }
54
46
  }
@@ -210,7 +210,7 @@ class tokocrypto extends tokocrypto$1 {
210
210
  'maker': this.parseNumber('0.0075'), // 0.1% trading fee, zero fees for all trading pairs before November 1
211
211
  },
212
212
  },
213
- 'precisionMode': number.DECIMAL_PLACES,
213
+ 'precisionMode': number.TICK_SIZE,
214
214
  'options': {
215
215
  // 'fetchTradesMethod': 'binanceGetTrades', // binanceGetTrades, binanceGetAggTrades
216
216
  'createMarketBuyOrderRequiresPrice': true,
@@ -717,10 +717,10 @@ class tokocrypto extends tokocrypto$1 {
717
717
  'strike': undefined,
718
718
  'optionType': undefined,
719
719
  'precision': {
720
- 'amount': this.safeInteger(market, 'quantityPrecision'),
721
- 'price': this.safeInteger(market, 'pricePrecision'),
722
- 'base': this.safeInteger(market, 'baseAssetPrecision'),
723
- 'quote': this.safeInteger(market, 'quotePrecision'),
720
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'quantityPrecision'))),
721
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'pricePrecision'))),
722
+ 'base': this.parseNumber(this.parsePrecision(this.safeString(market, 'baseAssetPrecision'))),
723
+ 'quote': this.parseNumber(this.parsePrecision(this.safeString(market, 'quotePrecision'))),
724
724
  },
725
725
  'limits': {
726
726
  'leverage': {
@@ -745,8 +745,7 @@ class tokocrypto extends tokocrypto$1 {
745
745
  };
746
746
  if ('PRICE_FILTER' in filtersByType) {
747
747
  const filter = this.safeValue(filtersByType, 'PRICE_FILTER', {});
748
- const tickSize = this.safeString(filter, 'tickSize');
749
- entry['precision']['price'] = this.precisionFromString(tickSize);
748
+ entry['precision']['price'] = this.safeNumber(filter, 'tickSize');
750
749
  // PRICE_FILTER reports zero values for maxPrice
751
750
  // since they updated filter types in November 2018
752
751
  // https://github.com/ccxt/ccxt/issues/4286
@@ -755,12 +754,11 @@ class tokocrypto extends tokocrypto$1 {
755
754
  'min': this.safeNumber(filter, 'minPrice'),
756
755
  'max': this.safeNumber(filter, 'maxPrice'),
757
756
  };
758
- entry['precision']['price'] = this.precisionFromString(filter['tickSize']);
757
+ entry['precision']['price'] = filter['tickSize'];
759
758
  }
760
759
  if ('LOT_SIZE' in filtersByType) {
761
760
  const filter = this.safeValue(filtersByType, 'LOT_SIZE', {});
762
- const stepSize = this.safeString(filter, 'stepSize');
763
- entry['precision']['amount'] = this.precisionFromString(stepSize);
761
+ entry['precision']['amount'] = this.safeNumber(filter, 'stepSize');
764
762
  entry['limits']['amount'] = {
765
763
  'min': this.safeNumber(filter, 'minQty'),
766
764
  'max': this.safeNumber(filter, 'maxQty'),
@@ -20,6 +20,7 @@ class wavesexchange extends wavesexchange$1 {
20
20
  'countries': ['CH'],
21
21
  'certified': false,
22
22
  'pro': false,
23
+ 'dex': true,
23
24
  'has': {
24
25
  'CORS': undefined,
25
26
  'spot': true,
@@ -25,6 +25,7 @@ class woofipro extends woofipro$1 {
25
25
  'version': 'v1',
26
26
  'certified': true,
27
27
  'pro': true,
28
+ 'dex': true,
28
29
  'hostname': 'dex.woo.org',
29
30
  'has': {
30
31
  'CORS': undefined,
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import type { Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketInterface, Trade, Order, OrderBook, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, DepositAddressResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, TransferEntries, LeverageTiers } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
7
- declare const version = "4.3.44";
7
+ declare const version = "4.3.45";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, ProxyError, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.3.45';
41
+ const version = '4.3.46';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -615,6 +615,8 @@ interface Exchange {
615
615
  privateGetAccountCommission(params?: {}): Promise<implicitReturnType>;
616
616
  privatePostOrderOco(params?: {}): Promise<implicitReturnType>;
617
617
  privatePostOrderListOco(params?: {}): Promise<implicitReturnType>;
618
+ privatePostOrderListOto(params?: {}): Promise<implicitReturnType>;
619
+ privatePostOrderListOtoco(params?: {}): Promise<implicitReturnType>;
618
620
  privatePostSorOrder(params?: {}): Promise<implicitReturnType>;
619
621
  privatePostSorOrderTest(params?: {}): Promise<implicitReturnType>;
620
622
  privatePostOrder(params?: {}): Promise<implicitReturnType>;
@@ -615,6 +615,8 @@ interface binance {
615
615
  privateGetAccountCommission(params?: {}): Promise<implicitReturnType>;
616
616
  privatePostOrderOco(params?: {}): Promise<implicitReturnType>;
617
617
  privatePostOrderListOco(params?: {}): Promise<implicitReturnType>;
618
+ privatePostOrderListOto(params?: {}): Promise<implicitReturnType>;
619
+ privatePostOrderListOtoco(params?: {}): Promise<implicitReturnType>;
618
620
  privatePostSorOrder(params?: {}): Promise<implicitReturnType>;
619
621
  privatePostSorOrderTest(params?: {}): Promise<implicitReturnType>;
620
622
  privatePostOrder(params?: {}): Promise<implicitReturnType>;
@@ -667,6 +667,8 @@ interface binance {
667
667
  privateGetAccountCommission(params?: {}): Promise<implicitReturnType>;
668
668
  privatePostOrderOco(params?: {}): Promise<implicitReturnType>;
669
669
  privatePostOrderListOco(params?: {}): Promise<implicitReturnType>;
670
+ privatePostOrderListOto(params?: {}): Promise<implicitReturnType>;
671
+ privatePostOrderListOtoco(params?: {}): Promise<implicitReturnType>;
670
672
  privatePostSorOrder(params?: {}): Promise<implicitReturnType>;
671
673
  privatePostSorOrderTest(params?: {}): Promise<implicitReturnType>;
672
674
  privatePostOrder(params?: {}): Promise<implicitReturnType>;
@@ -615,6 +615,8 @@ interface binance {
615
615
  privateGetAccountCommission(params?: {}): Promise<implicitReturnType>;
616
616
  privatePostOrderOco(params?: {}): Promise<implicitReturnType>;
617
617
  privatePostOrderListOco(params?: {}): Promise<implicitReturnType>;
618
+ privatePostOrderListOto(params?: {}): Promise<implicitReturnType>;
619
+ privatePostOrderListOtoco(params?: {}): Promise<implicitReturnType>;
618
620
  privatePostSorOrder(params?: {}): Promise<implicitReturnType>;
619
621
  privatePostSorOrderTest(params?: {}): Promise<implicitReturnType>;
620
622
  privatePostOrder(params?: {}): Promise<implicitReturnType>;
@@ -63,6 +63,7 @@ interface Exchange {
63
63
  spotPrivatePostSubAccountMargin(params?: {}): Promise<implicitReturnType>;
64
64
  spotPrivatePostBatchOrders(params?: {}): Promise<implicitReturnType>;
65
65
  spotPrivatePostCapitalWithdrawApply(params?: {}): Promise<implicitReturnType>;
66
+ spotPrivatePostCapitalWithdraw(params?: {}): Promise<implicitReturnType>;
66
67
  spotPrivatePostCapitalTransfer(params?: {}): Promise<implicitReturnType>;
67
68
  spotPrivatePostCapitalTransferInternal(params?: {}): Promise<implicitReturnType>;
68
69
  spotPrivatePostCapitalDepositAddress(params?: {}): Promise<implicitReturnType>;
@@ -77,6 +78,7 @@ interface Exchange {
77
78
  spotPrivateDeleteMarginOrder(params?: {}): Promise<implicitReturnType>;
78
79
  spotPrivateDeleteMarginOpenOrders(params?: {}): Promise<implicitReturnType>;
79
80
  spotPrivateDeleteUserDataStream(params?: {}): Promise<implicitReturnType>;
81
+ spotPrivateDeleteCapitalWithdraw(params?: {}): Promise<implicitReturnType>;
80
82
  contractPublicGetPing(params?: {}): Promise<implicitReturnType>;
81
83
  contractPublicGetDetail(params?: {}): Promise<implicitReturnType>;
82
84
  contractPublicGetSupportCurrencies(params?: {}): Promise<implicitReturnType>;
@@ -291,6 +291,7 @@ export default class Exchange {
291
291
  certified: boolean;
292
292
  pro: boolean;
293
293
  alias: boolean;
294
+ dex: boolean;
294
295
  has: {
295
296
  publicAPI: boolean;
296
297
  privateAPI: boolean;
@@ -353,6 +353,7 @@ export default class Exchange {
353
353
  'certified': false,
354
354
  'pro': false,
355
355
  'alias': false,
356
+ 'dex': false,
356
357
  'has': {
357
358
  'publicAPI': true,
358
359
  'privateAPI': true,