ccxt 4.3.58 → 4.3.59
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.
- package/README.md +4 -4
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +4 -2
- package/dist/cjs/src/base/Exchange.js +4 -4
- package/dist/cjs/src/base/errors.js +22 -22
- package/dist/cjs/src/bingx.js +52 -7
- package/dist/cjs/src/bitmart.js +1 -0
- package/dist/cjs/src/btcbox.js +149 -7
- package/dist/cjs/src/bybit.js +2 -2
- package/dist/cjs/src/deribit.js +15 -1
- package/dist/cjs/src/digifinex.js +32 -7
- package/dist/cjs/src/gate.js +15 -15
- package/dist/cjs/src/htx.js +7 -7
- package/dist/cjs/src/hyperliquid.js +107 -1
- package/dist/cjs/src/mexc.js +11 -11
- package/dist/cjs/src/pro/binance.js +11 -13
- package/dist/cjs/src/pro/bingx.js +11 -8
- package/dist/cjs/src/pro/xt.js +1108 -0
- package/dist/cjs/src/upbit.js +148 -49
- package/dist/cjs/src/xt.js +72 -7
- package/js/ccxt.d.ts +6 -3
- package/js/ccxt.js +5 -3
- package/js/src/abstract/bitmart.d.ts +1 -0
- package/js/src/abstract/btcbox.d.ts +1 -0
- package/js/src/abstract/upbit.d.ts +3 -0
- package/js/src/abstract/xt.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +3 -3
- package/js/src/base/Exchange.js +5 -5
- package/js/src/base/errorHierarchy.d.ts +5 -5
- package/js/src/base/errorHierarchy.js +5 -5
- package/js/src/base/errors.d.ts +15 -15
- package/js/src/base/errors.js +22 -22
- package/js/src/bingx.js +52 -7
- package/js/src/bitmart.js +1 -0
- package/js/src/btcbox.d.ts +4 -1
- package/js/src/btcbox.js +149 -7
- package/js/src/bybit.js +2 -2
- package/js/src/deribit.d.ts +1 -1
- package/js/src/deribit.js +15 -1
- package/js/src/digifinex.d.ts +3 -2
- package/js/src/digifinex.js +32 -7
- package/js/src/gate.js +15 -15
- package/js/src/htx.js +7 -7
- package/js/src/hyperliquid.d.ts +3 -1
- package/js/src/hyperliquid.js +107 -1
- package/js/src/mexc.js +11 -11
- package/js/src/pro/binance.js +11 -13
- package/js/src/pro/bingx.js +11 -8
- package/js/src/pro/bitmart.d.ts +3 -3
- package/js/src/pro/bitopro.d.ts +2 -2
- package/js/src/pro/coincheck.d.ts +2 -2
- package/js/src/pro/coinone.d.ts +2 -2
- package/js/src/pro/hyperliquid.d.ts +2 -2
- package/js/src/pro/xt.d.ts +31 -0
- package/js/src/pro/xt.js +1109 -0
- package/js/src/upbit.d.ts +0 -1
- package/js/src/upbit.js +148 -49
- package/js/src/xt.js +72 -7
- package/package.json +1 -1
|
@@ -98,7 +98,7 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
98
98
|
'fetchTickers': false,
|
|
99
99
|
'fetchTime': false,
|
|
100
100
|
'fetchTrades': true,
|
|
101
|
-
'fetchTradingFee':
|
|
101
|
+
'fetchTradingFee': true,
|
|
102
102
|
'fetchTradingFees': false,
|
|
103
103
|
'fetchTransfer': false,
|
|
104
104
|
'fetchTransfers': false,
|
|
@@ -2516,6 +2516,112 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
2516
2516
|
'fee': undefined,
|
|
2517
2517
|
};
|
|
2518
2518
|
}
|
|
2519
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
2520
|
+
/**
|
|
2521
|
+
* @method
|
|
2522
|
+
* @name hyperliquid#fetchTradingFee
|
|
2523
|
+
* @description fetch the trading fees for a market
|
|
2524
|
+
* @param {string} symbol unified market symbol
|
|
2525
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2526
|
+
* @param {string} [params.user] user address, will default to this.walletAddress if not provided
|
|
2527
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2528
|
+
*/
|
|
2529
|
+
await this.loadMarkets();
|
|
2530
|
+
let userAddress = undefined;
|
|
2531
|
+
[userAddress, params] = this.handlePublicAddress('fetchTradingFee', params);
|
|
2532
|
+
const market = this.market(symbol);
|
|
2533
|
+
const request = {
|
|
2534
|
+
'type': 'userFees',
|
|
2535
|
+
'user': userAddress,
|
|
2536
|
+
};
|
|
2537
|
+
const response = await this.publicPostInfo(this.extend(request, params));
|
|
2538
|
+
//
|
|
2539
|
+
// {
|
|
2540
|
+
// "dailyUserVlm": [
|
|
2541
|
+
// {
|
|
2542
|
+
// "date": "2024-07-08",
|
|
2543
|
+
// "userCross": "0.0",
|
|
2544
|
+
// "userAdd": "0.0",
|
|
2545
|
+
// "exchange": "90597185.23639999"
|
|
2546
|
+
// }
|
|
2547
|
+
// ],
|
|
2548
|
+
// "feeSchedule": {
|
|
2549
|
+
// "cross": "0.00035",
|
|
2550
|
+
// "add": "0.0001",
|
|
2551
|
+
// "tiers": {
|
|
2552
|
+
// "vip": [
|
|
2553
|
+
// {
|
|
2554
|
+
// "ntlCutoff": "5000000.0",
|
|
2555
|
+
// "cross": "0.0003",
|
|
2556
|
+
// "add": "0.00005"
|
|
2557
|
+
// }
|
|
2558
|
+
// ],
|
|
2559
|
+
// "mm": [
|
|
2560
|
+
// {
|
|
2561
|
+
// "makerFractionCutoff": "0.005",
|
|
2562
|
+
// "add": "-0.00001"
|
|
2563
|
+
// }
|
|
2564
|
+
// ]
|
|
2565
|
+
// },
|
|
2566
|
+
// "referralDiscount": "0.04"
|
|
2567
|
+
// },
|
|
2568
|
+
// "userCrossRate": "0.00035",
|
|
2569
|
+
// "userAddRate": "0.0001",
|
|
2570
|
+
// "activeReferralDiscount": "0.0"
|
|
2571
|
+
// }
|
|
2572
|
+
//
|
|
2573
|
+
const data = {
|
|
2574
|
+
'userCrossRate': this.safeString(response, 'userCrossRate'),
|
|
2575
|
+
'userAddRate': this.safeString(response, 'userAddRate'),
|
|
2576
|
+
};
|
|
2577
|
+
return this.parseTradingFee(data, market);
|
|
2578
|
+
}
|
|
2579
|
+
parseTradingFee(fee, market = undefined) {
|
|
2580
|
+
//
|
|
2581
|
+
// {
|
|
2582
|
+
// "dailyUserVlm": [
|
|
2583
|
+
// {
|
|
2584
|
+
// "date": "2024-07-08",
|
|
2585
|
+
// "userCross": "0.0",
|
|
2586
|
+
// "userAdd": "0.0",
|
|
2587
|
+
// "exchange": "90597185.23639999"
|
|
2588
|
+
// }
|
|
2589
|
+
// ],
|
|
2590
|
+
// "feeSchedule": {
|
|
2591
|
+
// "cross": "0.00035",
|
|
2592
|
+
// "add": "0.0001",
|
|
2593
|
+
// "tiers": {
|
|
2594
|
+
// "vip": [
|
|
2595
|
+
// {
|
|
2596
|
+
// "ntlCutoff": "5000000.0",
|
|
2597
|
+
// "cross": "0.0003",
|
|
2598
|
+
// "add": "0.00005"
|
|
2599
|
+
// }
|
|
2600
|
+
// ],
|
|
2601
|
+
// "mm": [
|
|
2602
|
+
// {
|
|
2603
|
+
// "makerFractionCutoff": "0.005",
|
|
2604
|
+
// "add": "-0.00001"
|
|
2605
|
+
// }
|
|
2606
|
+
// ]
|
|
2607
|
+
// },
|
|
2608
|
+
// "referralDiscount": "0.04"
|
|
2609
|
+
// },
|
|
2610
|
+
// "userCrossRate": "0.00035",
|
|
2611
|
+
// "userAddRate": "0.0001",
|
|
2612
|
+
// "activeReferralDiscount": "0.0"
|
|
2613
|
+
// }
|
|
2614
|
+
//
|
|
2615
|
+
const symbol = this.safeSymbol(undefined, market);
|
|
2616
|
+
return {
|
|
2617
|
+
'info': fee,
|
|
2618
|
+
'symbol': symbol,
|
|
2619
|
+
'maker': this.safeNumber(fee, 'userAddRate'),
|
|
2620
|
+
'taker': this.safeNumber(fee, 'userCrossRate'),
|
|
2621
|
+
'percentage': undefined,
|
|
2622
|
+
'tierBased': undefined,
|
|
2623
|
+
};
|
|
2624
|
+
}
|
|
2519
2625
|
formatVaultAddress(address = undefined) {
|
|
2520
2626
|
if (address === undefined) {
|
|
2521
2627
|
return undefined;
|
package/dist/cjs/src/mexc.js
CHANGED
|
@@ -796,24 +796,24 @@ class mexc extends mexc$1 {
|
|
|
796
796
|
'commonCurrencies': {
|
|
797
797
|
'BEYONDPROTOCOL': 'BEYOND',
|
|
798
798
|
'BIFI': 'BIFIF',
|
|
799
|
-
'BYN': '
|
|
799
|
+
'BYN': 'BEYONDFI',
|
|
800
800
|
'COFI': 'COFIX',
|
|
801
|
-
'DFI': '
|
|
802
|
-
'DFT': '
|
|
801
|
+
'DFI': 'DFISTARTER',
|
|
802
|
+
'DFT': 'DFUTURE',
|
|
803
803
|
'DRK': 'DRK',
|
|
804
|
-
'EGC': '
|
|
804
|
+
'EGC': 'EGORASCREDIT',
|
|
805
805
|
'FLUX1': 'FLUX',
|
|
806
806
|
'FLUX': 'FLUX1',
|
|
807
|
-
'FREE': '
|
|
807
|
+
'FREE': 'FREEROSSDAO',
|
|
808
808
|
'GAS': 'GASDAO',
|
|
809
809
|
'GASNEO': 'GAS',
|
|
810
|
-
'GMT': '
|
|
810
|
+
'GMT': 'GMTTOKEN',
|
|
811
811
|
'STEPN': 'GMT',
|
|
812
|
-
'HERO': '
|
|
813
|
-
'MIMO': '
|
|
814
|
-
'PROS': '
|
|
815
|
-
'SIN': '
|
|
816
|
-
'SOUL': '
|
|
812
|
+
'HERO': 'STEPHERO',
|
|
813
|
+
'MIMO': 'MIMOSA',
|
|
814
|
+
'PROS': 'PROSFINANCE',
|
|
815
|
+
'SIN': 'SINCITYTOKEN',
|
|
816
|
+
'SOUL': 'SOULSWAP',
|
|
817
817
|
},
|
|
818
818
|
'exceptions': {
|
|
819
819
|
'exact': {
|
|
@@ -611,9 +611,9 @@ class binance extends binance$1 {
|
|
|
611
611
|
for (let i = 0; i < symbols.length; i++) {
|
|
612
612
|
const symbol = symbols[i];
|
|
613
613
|
const market = this.market(symbol);
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
const symbolHash =
|
|
614
|
+
messageHashes.push('orderbook::' + symbol);
|
|
615
|
+
const subscriptionHash = market['lowercaseId'] + '@' + name;
|
|
616
|
+
const symbolHash = subscriptionHash + '@' + watchOrderBookRate + 'ms';
|
|
617
617
|
subParams.push(symbolHash);
|
|
618
618
|
}
|
|
619
619
|
const messageHashesLength = messageHashes.length;
|
|
@@ -633,8 +633,7 @@ class binance extends binance$1 {
|
|
|
633
633
|
'type': type,
|
|
634
634
|
'params': params,
|
|
635
635
|
};
|
|
636
|
-
const
|
|
637
|
-
const orderbook = await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
|
|
636
|
+
const orderbook = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes, subscription);
|
|
638
637
|
return orderbook.limit();
|
|
639
638
|
}
|
|
640
639
|
async fetchOrderBookWs(symbol, limit = undefined, params = {}) {
|
|
@@ -813,8 +812,7 @@ class binance extends binance$1 {
|
|
|
813
812
|
const marketId = this.safeString(message, 's');
|
|
814
813
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
815
814
|
const symbol = market['symbol'];
|
|
816
|
-
const
|
|
817
|
-
const messageHash = market['lowercaseId'] + '@' + name;
|
|
815
|
+
const messageHash = 'orderbook::' + symbol;
|
|
818
816
|
if (!(symbol in this.orderbooks)) {
|
|
819
817
|
//
|
|
820
818
|
// https://github.com/ccxt/ccxt/issues/6672
|
|
@@ -957,12 +955,14 @@ class binance extends binance$1 {
|
|
|
957
955
|
if (firstMarket['contract']) {
|
|
958
956
|
type = firstMarket['linear'] ? 'future' : 'delivery';
|
|
959
957
|
}
|
|
958
|
+
const messageHashes = [];
|
|
960
959
|
const subParams = [];
|
|
961
960
|
for (let i = 0; i < symbols.length; i++) {
|
|
962
961
|
const symbol = symbols[i];
|
|
963
962
|
const market = this.market(symbol);
|
|
964
|
-
|
|
965
|
-
|
|
963
|
+
messageHashes.push('trade::' + symbol);
|
|
964
|
+
const rawHash = market['lowercaseId'] + '@' + name;
|
|
965
|
+
subParams.push(rawHash);
|
|
966
966
|
}
|
|
967
967
|
const query = this.omit(params, 'type');
|
|
968
968
|
const subParamsLength = subParams.length;
|
|
@@ -976,7 +976,7 @@ class binance extends binance$1 {
|
|
|
976
976
|
const subscribe = {
|
|
977
977
|
'id': requestId,
|
|
978
978
|
};
|
|
979
|
-
const trades = await this.watchMultiple(url,
|
|
979
|
+
const trades = await this.watchMultiple(url, messageHashes, this.extend(request, query), messageHashes, subscribe);
|
|
980
980
|
if (this.newUpdates) {
|
|
981
981
|
const first = this.safeValue(trades, 0);
|
|
982
982
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -1167,9 +1167,7 @@ class binance extends binance$1 {
|
|
|
1167
1167
|
const marketId = this.safeString(message, 's');
|
|
1168
1168
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
1169
1169
|
const symbol = market['symbol'];
|
|
1170
|
-
const
|
|
1171
|
-
const event = this.safeString(message, 'e');
|
|
1172
|
-
const messageHash = lowerCaseId + '@' + event;
|
|
1170
|
+
const messageHash = 'trade::' + symbol;
|
|
1173
1171
|
const trade = this.parseWsTrade(message, market);
|
|
1174
1172
|
let tradesArray = this.safeValue(this.trades, symbol);
|
|
1175
1173
|
if (tradesArray === undefined) {
|
|
@@ -94,10 +94,10 @@ class bingx extends bingx$1 {
|
|
|
94
94
|
*/
|
|
95
95
|
await this.loadMarkets();
|
|
96
96
|
const market = this.market(symbol);
|
|
97
|
-
const [marketType, query] = this.handleMarketTypeAndParams('
|
|
97
|
+
const [marketType, query] = this.handleMarketTypeAndParams('watchTicker', market, params);
|
|
98
98
|
const url = this.safeValue(this.urls['api']['ws'], marketType);
|
|
99
99
|
if (url === undefined) {
|
|
100
|
-
throw new errors.BadRequest(this.id + '
|
|
100
|
+
throw new errors.BadRequest(this.id + ' watchTicker is not supported for ' + marketType + ' markets.');
|
|
101
101
|
}
|
|
102
102
|
const subscriptionHash = market['id'] + '@ticker';
|
|
103
103
|
const messageHash = this.getMessageHash('ticker', market['symbol']);
|
|
@@ -445,21 +445,23 @@ class bingx extends bingx$1 {
|
|
|
445
445
|
*/
|
|
446
446
|
await this.loadMarkets();
|
|
447
447
|
const market = this.market(symbol);
|
|
448
|
-
|
|
448
|
+
let marketType = undefined;
|
|
449
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchTrades', market, params);
|
|
449
450
|
const url = this.safeValue(this.urls['api']['ws'], marketType);
|
|
450
451
|
if (url === undefined) {
|
|
451
452
|
throw new errors.BadRequest(this.id + ' watchTrades is not supported for ' + marketType + ' markets.');
|
|
452
453
|
}
|
|
453
|
-
const
|
|
454
|
+
const rawHash = market['id'] + '@trade';
|
|
455
|
+
const messageHash = 'trade::' + symbol;
|
|
454
456
|
const uuid = this.uuid();
|
|
455
457
|
const request = {
|
|
456
458
|
'id': uuid,
|
|
457
|
-
'dataType':
|
|
459
|
+
'dataType': rawHash,
|
|
458
460
|
};
|
|
459
461
|
if (marketType === 'swap') {
|
|
460
462
|
request['reqType'] = 'sub';
|
|
461
463
|
}
|
|
462
|
-
const trades = await this.watch(url, messageHash, this.extend(request,
|
|
464
|
+
const trades = await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
463
465
|
if (this.newUpdates) {
|
|
464
466
|
limit = trades.getLimit(symbol, limit);
|
|
465
467
|
}
|
|
@@ -526,12 +528,13 @@ class bingx extends bingx$1 {
|
|
|
526
528
|
// }
|
|
527
529
|
//
|
|
528
530
|
const data = this.safeValue(message, 'data', []);
|
|
529
|
-
const
|
|
530
|
-
const marketId =
|
|
531
|
+
const rawHash = this.safeString(message, 'dataType');
|
|
532
|
+
const marketId = rawHash.split('@')[0];
|
|
531
533
|
const isSwap = client.url.indexOf('swap') >= 0;
|
|
532
534
|
const marketType = isSwap ? 'swap' : 'spot';
|
|
533
535
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
534
536
|
const symbol = market['symbol'];
|
|
537
|
+
const messageHash = 'trade::' + symbol;
|
|
535
538
|
let trades = undefined;
|
|
536
539
|
if (Array.isArray(data)) {
|
|
537
540
|
trades = this.parseTrades(data, market);
|