ccxt 4.3.84 → 4.3.86
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 +7 -5
- package/dist/ccxt.browser.min.js +15 -15
- package/dist/cjs/ccxt.js +7 -1
- package/dist/cjs/src/abstract/hashkey.js +9 -0
- package/dist/cjs/src/base/Exchange.js +1 -1
- package/dist/cjs/src/base/errors.js +8 -1
- package/dist/cjs/src/binance.js +4 -2
- package/dist/cjs/src/bitfinex.js +2 -2
- package/dist/cjs/src/bitmex.js +4 -0
- package/dist/cjs/src/bybit.js +15 -14
- package/dist/cjs/src/cryptocom.js +117 -2
- package/dist/cjs/src/hashkey.js +4328 -0
- package/dist/cjs/src/hyperliquid.js +85 -65
- package/dist/cjs/src/indodax.js +37 -9
- package/dist/cjs/src/kraken.js +29 -1
- package/dist/cjs/src/krakenfutures.js +12 -10
- package/dist/cjs/src/kucoinfutures.js +5 -0
- package/dist/cjs/src/mexc.js +2 -2
- package/dist/cjs/src/pro/ascendex.js +45 -5
- package/dist/cjs/src/pro/binance.js +1 -1
- package/dist/cjs/src/pro/bingx.js +13 -12
- package/dist/cjs/src/pro/bitget.js +113 -4
- package/dist/cjs/src/pro/hashkey.js +839 -0
- package/dist/cjs/src/pro/hyperliquid.js +123 -0
- package/dist/cjs/src/pro/mexc.js +13 -7
- package/dist/cjs/src/pro/okx.js +25 -4
- package/dist/cjs/src/pro/woo.js +1 -0
- package/dist/cjs/src/pro/woofipro.js +1 -0
- package/dist/cjs/src/pro/xt.js +1 -0
- package/js/ccxt.d.ts +9 -3
- package/js/ccxt.js +7 -3
- package/js/src/abstract/cryptocom.d.ts +2 -0
- package/js/src/abstract/hashkey.d.ts +70 -0
- package/js/src/abstract/hashkey.js +11 -0
- package/js/src/abstract/kucoinfutures.d.ts +2 -0
- package/js/src/base/Exchange.js +1 -1
- package/js/src/base/errorHierarchy.d.ts +1 -0
- package/js/src/base/errorHierarchy.js +1 -0
- package/js/src/base/errors.d.ts +5 -1
- package/js/src/base/errors.js +8 -2
- package/js/src/binance.js +4 -2
- package/js/src/bitfinex.js +2 -2
- package/js/src/bitmex.js +4 -0
- package/js/src/bybit.js +16 -15
- package/js/src/cryptocom.d.ts +5 -1
- package/js/src/cryptocom.js +117 -2
- package/js/src/hashkey.d.ts +178 -0
- package/js/src/hashkey.js +4329 -0
- package/js/src/hyperliquid.d.ts +3 -0
- package/js/src/hyperliquid.js +85 -65
- package/js/src/indodax.js +37 -9
- package/js/src/kraken.js +29 -1
- package/js/src/krakenfutures.js +12 -10
- package/js/src/kucoinfutures.js +5 -0
- package/js/src/mexc.js +2 -2
- package/js/src/pro/ascendex.d.ts +2 -0
- package/js/src/pro/ascendex.js +45 -5
- package/js/src/pro/binance.js +1 -1
- package/js/src/pro/bingx.js +13 -12
- package/js/src/pro/bitget.d.ts +4 -0
- package/js/src/pro/bitget.js +113 -4
- package/js/src/pro/hashkey.d.ts +34 -0
- package/js/src/pro/hashkey.js +840 -0
- package/js/src/pro/hyperliquid.d.ts +7 -1
- package/js/src/pro/hyperliquid.js +123 -0
- package/js/src/pro/mexc.js +13 -7
- package/js/src/pro/okx.js +25 -4
- package/js/src/pro/woo.js +1 -0
- package/js/src/pro/woofipro.js +1 -0
- package/js/src/pro/xt.js +1 -0
- package/package.json +1 -1
package/dist/cjs/ccxt.js
CHANGED
|
@@ -72,6 +72,7 @@ var fmfwio = require('./src/fmfwio.js');
|
|
|
72
72
|
var gate = require('./src/gate.js');
|
|
73
73
|
var gateio = require('./src/gateio.js');
|
|
74
74
|
var gemini = require('./src/gemini.js');
|
|
75
|
+
var hashkey = require('./src/hashkey.js');
|
|
75
76
|
var hitbtc = require('./src/hitbtc.js');
|
|
76
77
|
var hitbtc3 = require('./src/hitbtc3.js');
|
|
77
78
|
var hollaex = require('./src/hollaex.js');
|
|
@@ -158,6 +159,7 @@ var exmo$1 = require('./src/pro/exmo.js');
|
|
|
158
159
|
var gate$1 = require('./src/pro/gate.js');
|
|
159
160
|
var gateio$1 = require('./src/pro/gateio.js');
|
|
160
161
|
var gemini$1 = require('./src/pro/gemini.js');
|
|
162
|
+
var hashkey$1 = require('./src/pro/hashkey.js');
|
|
161
163
|
var hitbtc$1 = require('./src/pro/hitbtc.js');
|
|
162
164
|
var hollaex$1 = require('./src/pro/hollaex.js');
|
|
163
165
|
var htx$1 = require('./src/pro/htx.js');
|
|
@@ -194,7 +196,7 @@ var xt$1 = require('./src/pro/xt.js');
|
|
|
194
196
|
|
|
195
197
|
//-----------------------------------------------------------------------------
|
|
196
198
|
// this is updated by vss.js when building
|
|
197
|
-
const version = '4.3.
|
|
199
|
+
const version = '4.3.86';
|
|
198
200
|
Exchange["default"].ccxtVersion = version;
|
|
199
201
|
const exchanges = {
|
|
200
202
|
'ace': ace,
|
|
@@ -257,6 +259,7 @@ const exchanges = {
|
|
|
257
259
|
'gate': gate,
|
|
258
260
|
'gateio': gateio,
|
|
259
261
|
'gemini': gemini,
|
|
262
|
+
'hashkey': hashkey,
|
|
260
263
|
'hitbtc': hitbtc,
|
|
261
264
|
'hitbtc3': hitbtc3,
|
|
262
265
|
'hollaex': hollaex,
|
|
@@ -345,6 +348,7 @@ const pro = {
|
|
|
345
348
|
'gate': gate$1,
|
|
346
349
|
'gateio': gateio$1,
|
|
347
350
|
'gemini': gemini$1,
|
|
351
|
+
'hashkey': hashkey$1,
|
|
348
352
|
'hitbtc': hitbtc$1,
|
|
349
353
|
'hollaex': hollaex$1,
|
|
350
354
|
'htx': htx$1,
|
|
@@ -410,6 +414,7 @@ exports.InvalidAddress = errors.InvalidAddress;
|
|
|
410
414
|
exports.InvalidNonce = errors.InvalidNonce;
|
|
411
415
|
exports.InvalidOrder = errors.InvalidOrder;
|
|
412
416
|
exports.InvalidProxySettings = errors.InvalidProxySettings;
|
|
417
|
+
exports.ManualInteractionNeeded = errors.ManualInteractionNeeded;
|
|
413
418
|
exports.MarginModeAlreadySet = errors.MarginModeAlreadySet;
|
|
414
419
|
exports.MarketClosed = errors.MarketClosed;
|
|
415
420
|
exports.NetworkError = errors.NetworkError;
|
|
@@ -487,6 +492,7 @@ exports.fmfwio = fmfwio;
|
|
|
487
492
|
exports.gate = gate;
|
|
488
493
|
exports.gateio = gateio;
|
|
489
494
|
exports.gemini = gemini;
|
|
495
|
+
exports.hashkey = hashkey;
|
|
490
496
|
exports.hitbtc = hitbtc;
|
|
491
497
|
exports.hitbtc3 = hitbtc3;
|
|
492
498
|
exports.hollaex = hollaex;
|
|
@@ -6104,7 +6104,7 @@ class Exchange {
|
|
|
6104
6104
|
if (method === 'fetchAccounts') {
|
|
6105
6105
|
response = await this[method](params);
|
|
6106
6106
|
}
|
|
6107
|
-
else if (method === 'getLeverageTiersPaginated') {
|
|
6107
|
+
else if (method === 'getLeverageTiersPaginated' || method === 'fetchPositions') {
|
|
6108
6108
|
response = await this[method](symbol, params);
|
|
6109
6109
|
}
|
|
6110
6110
|
else {
|
|
@@ -81,6 +81,12 @@ class MarketClosed extends OperationRejected {
|
|
|
81
81
|
this.name = 'MarketClosed';
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
+
class ManualInteractionNeeded extends OperationRejected {
|
|
85
|
+
constructor(message) {
|
|
86
|
+
super(message);
|
|
87
|
+
this.name = 'ManualInteractionNeeded';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
84
90
|
class InsufficientFunds extends ExchangeError {
|
|
85
91
|
constructor(message) {
|
|
86
92
|
super(message);
|
|
@@ -231,7 +237,7 @@ class CancelPending extends OperationFailed {
|
|
|
231
237
|
this.name = 'CancelPending';
|
|
232
238
|
}
|
|
233
239
|
}
|
|
234
|
-
var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
240
|
+
var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
235
241
|
|
|
236
242
|
exports.AccountNotEnabled = AccountNotEnabled;
|
|
237
243
|
exports.AccountSuspended = AccountSuspended;
|
|
@@ -255,6 +261,7 @@ exports.InvalidAddress = InvalidAddress;
|
|
|
255
261
|
exports.InvalidNonce = InvalidNonce;
|
|
256
262
|
exports.InvalidOrder = InvalidOrder;
|
|
257
263
|
exports.InvalidProxySettings = InvalidProxySettings;
|
|
264
|
+
exports.ManualInteractionNeeded = ManualInteractionNeeded;
|
|
258
265
|
exports.MarginModeAlreadySet = MarginModeAlreadySet;
|
|
259
266
|
exports.MarketClosed = MarketClosed;
|
|
260
267
|
exports.NetworkError = NetworkError;
|
package/dist/cjs/src/binance.js
CHANGED
|
@@ -3852,12 +3852,14 @@ class binance extends binance$1 {
|
|
|
3852
3852
|
const marketId = this.safeString(ticker, 'symbol');
|
|
3853
3853
|
const symbol = this.safeSymbol(marketId, market, undefined, marketType);
|
|
3854
3854
|
const last = this.safeString(ticker, 'lastPrice');
|
|
3855
|
+
const wAvg = this.safeString(ticker, 'weightedAvgPrice');
|
|
3855
3856
|
const isCoinm = ('baseVolume' in ticker);
|
|
3856
3857
|
let baseVolume = undefined;
|
|
3857
3858
|
let quoteVolume = undefined;
|
|
3858
3859
|
if (isCoinm) {
|
|
3859
3860
|
baseVolume = this.safeString(ticker, 'baseVolume');
|
|
3860
|
-
quoteVolume
|
|
3861
|
+
// 'volume' field in inverse markets is not quoteVolume, but traded amount (per contracts)
|
|
3862
|
+
quoteVolume = Precise["default"].stringMul(baseVolume, wAvg);
|
|
3861
3863
|
}
|
|
3862
3864
|
else {
|
|
3863
3865
|
baseVolume = this.safeString(ticker, 'volume');
|
|
@@ -3873,7 +3875,7 @@ class binance extends binance$1 {
|
|
|
3873
3875
|
'bidVolume': this.safeString(ticker, 'bidQty'),
|
|
3874
3876
|
'ask': this.safeString(ticker, 'askPrice'),
|
|
3875
3877
|
'askVolume': this.safeString(ticker, 'askQty'),
|
|
3876
|
-
'vwap':
|
|
3878
|
+
'vwap': wAvg,
|
|
3877
3879
|
'open': this.safeString2(ticker, 'openPrice', 'open'),
|
|
3878
3880
|
'close': last,
|
|
3879
3881
|
'last': last,
|
package/dist/cjs/src/bitfinex.js
CHANGED
|
@@ -851,7 +851,7 @@ class bitfinex extends bitfinex$1 {
|
|
|
851
851
|
* @method
|
|
852
852
|
* @name bitfinex#fetchTickers
|
|
853
853
|
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
854
|
-
* @param {string[]
|
|
854
|
+
* @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
855
855
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
856
856
|
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
857
857
|
*/
|
|
@@ -860,7 +860,7 @@ class bitfinex extends bitfinex$1 {
|
|
|
860
860
|
const response = await this.publicGetTickers(params);
|
|
861
861
|
const result = {};
|
|
862
862
|
for (let i = 0; i < response.length; i++) {
|
|
863
|
-
const ticker = this.parseTicker(
|
|
863
|
+
const ticker = this.parseTicker(response[i]);
|
|
864
864
|
const symbol = ticker['symbol'];
|
|
865
865
|
result[symbol] = ticker;
|
|
866
866
|
}
|
package/dist/cjs/src/bitmex.js
CHANGED
|
@@ -5,6 +5,7 @@ var number = require('./base/functions/number.js');
|
|
|
5
5
|
var errors = require('./base/errors.js');
|
|
6
6
|
var Precise = require('./base/Precise.js');
|
|
7
7
|
var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
|
|
8
|
+
var totp = require('./base/functions/totp.js');
|
|
8
9
|
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// ---------------------------------------------------------------------------
|
|
@@ -2455,6 +2456,9 @@ class bitmex extends bitmex$1 {
|
|
|
2455
2456
|
// 'otpToken': '123456', // requires if two-factor auth (OTP) is enabled
|
|
2456
2457
|
// 'fee': 0.001, // bitcoin network fee
|
|
2457
2458
|
};
|
|
2459
|
+
if (this.twofa !== undefined) {
|
|
2460
|
+
request['otpToken'] = totp.totp(this.twofa);
|
|
2461
|
+
}
|
|
2458
2462
|
const response = await this.privatePostUserRequestWithdrawal(this.extend(request, params));
|
|
2459
2463
|
//
|
|
2460
2464
|
// {
|
package/dist/cjs/src/bybit.js
CHANGED
|
@@ -753,8 +753,11 @@ class bybit extends bybit$1 {
|
|
|
753
753
|
'140069': errors.PermissionDenied,
|
|
754
754
|
'140070': errors.InvalidOrder,
|
|
755
755
|
'170001': errors.ExchangeError,
|
|
756
|
-
'170007': errors.RequestTimeout,
|
|
757
756
|
'170005': errors.InvalidOrder,
|
|
757
|
+
'170007': errors.RequestTimeout,
|
|
758
|
+
'170010': errors.InvalidOrder,
|
|
759
|
+
'170011': errors.InvalidOrder,
|
|
760
|
+
'170019': errors.InvalidOrder,
|
|
758
761
|
'170031': errors.ExchangeError,
|
|
759
762
|
'170032': errors.ExchangeError,
|
|
760
763
|
'170033': errors.InsufficientFunds,
|
|
@@ -767,6 +770,7 @@ class bybit extends bybit$1 {
|
|
|
767
770
|
'170116': errors.InvalidOrder,
|
|
768
771
|
'170117': errors.InvalidOrder,
|
|
769
772
|
'170121': errors.InvalidOrder,
|
|
773
|
+
'170124': errors.InvalidOrder,
|
|
770
774
|
'170130': errors.BadRequest,
|
|
771
775
|
'170131': errors.InsufficientFunds,
|
|
772
776
|
'170132': errors.InvalidOrder,
|
|
@@ -777,7 +781,6 @@ class bybit extends bybit$1 {
|
|
|
777
781
|
'170137': errors.InvalidOrder,
|
|
778
782
|
'170139': errors.InvalidOrder,
|
|
779
783
|
'170140': errors.InvalidOrder,
|
|
780
|
-
'170124': errors.InvalidOrder,
|
|
781
784
|
'170141': errors.InvalidOrder,
|
|
782
785
|
'170142': errors.InvalidOrder,
|
|
783
786
|
'170143': errors.InvalidOrder,
|
|
@@ -802,6 +805,15 @@ class bybit extends bybit$1 {
|
|
|
802
805
|
'170198': errors.InvalidOrder,
|
|
803
806
|
'170199': errors.InvalidOrder,
|
|
804
807
|
'170200': errors.InvalidOrder,
|
|
808
|
+
'170201': errors.PermissionDenied,
|
|
809
|
+
'170202': errors.InvalidOrder,
|
|
810
|
+
'170203': errors.InvalidOrder,
|
|
811
|
+
'170204': errors.InvalidOrder,
|
|
812
|
+
'170206': errors.InvalidOrder,
|
|
813
|
+
'170210': errors.InvalidOrder,
|
|
814
|
+
'170213': errors.OrderNotFound,
|
|
815
|
+
'170217': errors.InvalidOrder,
|
|
816
|
+
'170218': errors.InvalidOrder,
|
|
805
817
|
'170221': errors.BadRequest,
|
|
806
818
|
'170222': errors.RateLimitExceeded,
|
|
807
819
|
'170223': errors.InsufficientFunds,
|
|
@@ -811,18 +823,7 @@ class bybit extends bybit$1 {
|
|
|
811
823
|
'170228': errors.InvalidOrder,
|
|
812
824
|
'170229': errors.InvalidOrder,
|
|
813
825
|
'170234': errors.ExchangeError,
|
|
814
|
-
'
|
|
815
|
-
'170213': errors.OrderNotFound,
|
|
816
|
-
'170217': errors.InvalidOrder,
|
|
817
|
-
'170218': errors.InvalidOrder,
|
|
818
|
-
'170010': errors.InvalidOrder,
|
|
819
|
-
'170011': errors.InvalidOrder,
|
|
820
|
-
'170019': errors.InvalidOrder,
|
|
821
|
-
'170201': errors.PermissionDenied,
|
|
822
|
-
'170202': errors.InvalidOrder,
|
|
823
|
-
'170203': errors.InvalidOrder,
|
|
824
|
-
'170204': errors.InvalidOrder,
|
|
825
|
-
'170206': errors.InvalidOrder,
|
|
826
|
+
'170241': errors.ManualInteractionNeeded,
|
|
826
827
|
'175000': errors.InvalidOrder,
|
|
827
828
|
'175001': errors.InvalidOrder,
|
|
828
829
|
'175002': errors.InvalidOrder,
|
|
@@ -91,8 +91,8 @@ class cryptocom extends cryptocom$1 {
|
|
|
91
91
|
'fetchTickers': true,
|
|
92
92
|
'fetchTime': false,
|
|
93
93
|
'fetchTrades': true,
|
|
94
|
-
'fetchTradingFee':
|
|
95
|
-
'fetchTradingFees':
|
|
94
|
+
'fetchTradingFee': true,
|
|
95
|
+
'fetchTradingFees': true,
|
|
96
96
|
'fetchTransactionFees': false,
|
|
97
97
|
'fetchTransactions': false,
|
|
98
98
|
'fetchTransfers': false,
|
|
@@ -193,6 +193,8 @@ class cryptocom extends cryptocom$1 {
|
|
|
193
193
|
'private/get-accounts': 10 / 3,
|
|
194
194
|
'private/get-withdrawal-history': 10 / 3,
|
|
195
195
|
'private/get-deposit-history': 10 / 3,
|
|
196
|
+
'private/get-fee-rate': 2,
|
|
197
|
+
'private/get-instrument-fee-rate': 2,
|
|
196
198
|
'private/staking/stake': 2,
|
|
197
199
|
'private/staking/unstake': 2,
|
|
198
200
|
'private/staking/get-staking-position': 2,
|
|
@@ -3019,6 +3021,119 @@ class cryptocom extends cryptocom$1 {
|
|
|
3019
3021
|
const result = this.safeDict(response, 'result');
|
|
3020
3022
|
return this.parseOrder(result, market);
|
|
3021
3023
|
}
|
|
3024
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
3025
|
+
/**
|
|
3026
|
+
* @method
|
|
3027
|
+
* @name cryptocom#fetchTradingFee
|
|
3028
|
+
* @description fetch the trading fees for a market
|
|
3029
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-instrument-fee-rate
|
|
3030
|
+
* @param {string} symbol unified market symbol
|
|
3031
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3032
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
3033
|
+
*/
|
|
3034
|
+
await this.loadMarkets();
|
|
3035
|
+
const market = this.market(symbol);
|
|
3036
|
+
const request = {
|
|
3037
|
+
'instrument_name': market['id'],
|
|
3038
|
+
};
|
|
3039
|
+
const response = await this.v1PrivatePostPrivateGetInstrumentFeeRate(this.extend(request, params));
|
|
3040
|
+
//
|
|
3041
|
+
// {
|
|
3042
|
+
// "id": 1,
|
|
3043
|
+
// "code": 0,
|
|
3044
|
+
// "method": "private/staking/unstake",
|
|
3045
|
+
// "result": {
|
|
3046
|
+
// "staking_id": "1",
|
|
3047
|
+
// "instrument_name": "SOL.staked",
|
|
3048
|
+
// "status": "NEW",
|
|
3049
|
+
// "quantity": "1",
|
|
3050
|
+
// "underlying_inst_name": "SOL",
|
|
3051
|
+
// "reason": "NO_ERROR"
|
|
3052
|
+
// }
|
|
3053
|
+
// }
|
|
3054
|
+
//
|
|
3055
|
+
const data = this.safeDict(response, 'result', {});
|
|
3056
|
+
return this.parseTradingFee(data, market);
|
|
3057
|
+
}
|
|
3058
|
+
async fetchTradingFees(params = {}) {
|
|
3059
|
+
/**
|
|
3060
|
+
* @method
|
|
3061
|
+
* @name cryptocom#fetchTradingFees
|
|
3062
|
+
* @see https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-get-fee-rate
|
|
3063
|
+
* @description fetch the trading fees for multiple markets
|
|
3064
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3065
|
+
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
3066
|
+
*/
|
|
3067
|
+
await this.loadMarkets();
|
|
3068
|
+
const response = await this.v1PrivatePostPrivateGetFeeRate(params);
|
|
3069
|
+
//
|
|
3070
|
+
// {
|
|
3071
|
+
// "id": 1,
|
|
3072
|
+
// "method": "/private/get-fee-rate",
|
|
3073
|
+
// "code": 0,
|
|
3074
|
+
// "result": {
|
|
3075
|
+
// "spot_tier": "3",
|
|
3076
|
+
// "deriv_tier": "3",
|
|
3077
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3078
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3079
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3080
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3081
|
+
// }
|
|
3082
|
+
// }
|
|
3083
|
+
//
|
|
3084
|
+
const result = this.safeDict(response, 'result', {});
|
|
3085
|
+
return this.parseTradingFees(result);
|
|
3086
|
+
}
|
|
3087
|
+
parseTradingFees(response) {
|
|
3088
|
+
//
|
|
3089
|
+
// {
|
|
3090
|
+
// "spot_tier": "3",
|
|
3091
|
+
// "deriv_tier": "3",
|
|
3092
|
+
// "effective_spot_maker_rate_bps": "6.5",
|
|
3093
|
+
// "effective_spot_taker_rate_bps": "6.9",
|
|
3094
|
+
// "effective_deriv_maker_rate_bps": "1.1",
|
|
3095
|
+
// "effective_deriv_taker_rate_bps": "3"
|
|
3096
|
+
// }
|
|
3097
|
+
//
|
|
3098
|
+
const result = {};
|
|
3099
|
+
result['info'] = response;
|
|
3100
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
3101
|
+
const symbol = this.symbols[i];
|
|
3102
|
+
const market = this.market(symbol);
|
|
3103
|
+
const isSwap = market['swap'];
|
|
3104
|
+
const takerFeeKey = isSwap ? 'effective_deriv_taker_rate_bps' : 'effective_spot_taker_rate_bps';
|
|
3105
|
+
const makerFeeKey = isSwap ? 'effective_deriv_maker_rate_bps' : 'effective_spot_maker_rate_bps';
|
|
3106
|
+
const tradingFee = {
|
|
3107
|
+
'info': response,
|
|
3108
|
+
'symbol': symbol,
|
|
3109
|
+
'maker': this.parseNumber(Precise["default"].stringDiv(this.safeString(response, makerFeeKey), '10000')),
|
|
3110
|
+
'taker': this.parseNumber(Precise["default"].stringDiv(this.safeString(response, takerFeeKey), '10000')),
|
|
3111
|
+
'percentage': undefined,
|
|
3112
|
+
'tierBased': undefined,
|
|
3113
|
+
};
|
|
3114
|
+
result[symbol] = tradingFee;
|
|
3115
|
+
}
|
|
3116
|
+
return result;
|
|
3117
|
+
}
|
|
3118
|
+
parseTradingFee(fee, market = undefined) {
|
|
3119
|
+
//
|
|
3120
|
+
// {
|
|
3121
|
+
// "instrument_name": "BTC_USD",
|
|
3122
|
+
// "effective_maker_rate_bps": "6.5",
|
|
3123
|
+
// "effective_taker_rate_bps": "6.9"
|
|
3124
|
+
// }
|
|
3125
|
+
//
|
|
3126
|
+
const marketId = this.safeString(fee, 'instrument_name');
|
|
3127
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
3128
|
+
return {
|
|
3129
|
+
'info': fee,
|
|
3130
|
+
'symbol': symbol,
|
|
3131
|
+
'maker': this.parseNumber(Precise["default"].stringDiv(this.safeString(fee, 'effective_maker_rate_bps'), '10000')),
|
|
3132
|
+
'taker': this.parseNumber(Precise["default"].stringDiv(this.safeString(fee, 'effective_taker_rate_bps'), '10000')),
|
|
3133
|
+
'percentage': undefined,
|
|
3134
|
+
'tierBased': undefined,
|
|
3135
|
+
};
|
|
3136
|
+
}
|
|
3022
3137
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
3023
3138
|
const type = this.safeString(api, 0);
|
|
3024
3139
|
const access = this.safeString(api, 1);
|