ccxt 4.0.77 → 4.0.79

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/js/src/binance.js CHANGED
@@ -189,12 +189,11 @@ export default class binance extends Exchange {
189
189
  'api': {
190
190
  // the API structure below will need 3-layer apidefs
191
191
  'sapi': {
192
- // IP (api) = 1200 per minute => (rateLimit = 50)
193
192
  // IP (sapi) request rate limit of 12 000 per minute
194
- // 1 IP (sapi) => cost = 0.1
193
+ // 1 IP (sapi) => cost = 0.1 => (1000 / (50 * 0.1)) * 60 = 12000
195
194
  // 10 IP (sapi) => cost = 1
196
195
  // UID (sapi) request rate limit of 180 000 per minute
197
- // 1 UID (sapi) => cost = 1200 / 180 000 = 0.006667
196
+ // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000
198
197
  'get': {
199
198
  'system/status': 0.1,
200
199
  // these endpoints require this.apiKey
@@ -210,7 +209,7 @@ export default class binance extends Exchange {
210
209
  'asset/transfer': 0.1,
211
210
  'asset/assetDetail': 0.1,
212
211
  'asset/tradeFee': 0.1,
213
- 'asset/ledger-transfer/cloud-mining/queryByPage': 4,
212
+ 'asset/ledger-transfer/cloud-mining/queryByPage': 4.0002,
214
213
  'asset/convert-transfer/queryByPage': 0.033335,
215
214
  'margin/loan': 1,
216
215
  'margin/repay': 1,
@@ -239,15 +238,16 @@ export default class binance extends Exchange {
239
238
  'margin/isolatedMarginTier': 0.1,
240
239
  'margin/rateLimit/order': 2,
241
240
  'margin/dribblet': 0.1,
242
- 'margin/dust': 20,
241
+ 'margin/dust': 20.001,
243
242
  'margin/crossMarginCollateralRatio': 10,
244
243
  'margin/exchange-small-liability': 0.6667,
245
244
  'margin/exchange-small-liability-history': 0.6667,
246
245
  'margin/next-hourly-interest-rate': 0.6667,
246
+ 'margin/delist-schedule': 0.6667,
247
247
  'loan/vip/loanable/data': 40,
248
248
  'loan/vip/collateral/data': 40,
249
- 'loan/vip/request/data': 40,
250
- 'loan/income': 40,
249
+ 'loan/vip/request/data': 2.6668,
250
+ 'loan/income': 40.002,
251
251
  'loan/ongoing/orders': 40,
252
252
  'loan/ltv/adjustment/history': 40,
253
253
  'loan/borrow/history': 40,
@@ -266,7 +266,7 @@ export default class binance extends Exchange {
266
266
  'futures/loan/wallet': 1,
267
267
  'futures/loan/adjustCollateral/history': 1,
268
268
  'futures/loan/liquidationHistory': 1,
269
- 'rebate/taxQuery': 20.001,
269
+ 'rebate/taxQuery': 80.004,
270
270
  // https://binance-docs.github.io/apidocs/spot/en/#withdraw-sapi
271
271
  'capital/config/getall': 1,
272
272
  'capital/deposit/address': 1,
@@ -275,7 +275,7 @@ export default class binance extends Exchange {
275
275
  'capital/deposit/subHisrec': 0.1,
276
276
  'capital/withdraw/history': 0.1,
277
277
  'capital/contract/convertible-coins': 4.0002,
278
- 'convert/tradeFlow': 20.0001,
278
+ 'convert/tradeFlow': 20.001,
279
279
  'convert/exchangeInfo': 50,
280
280
  'convert/assetInfo': 10,
281
281
  'convert/orderStatus': 0.6667,
@@ -283,7 +283,6 @@ export default class binance extends Exchange {
283
283
  'account/apiTradingStatus': 0.1,
284
284
  'account/apiRestrictions/ipRestriction': 0.1,
285
285
  'bnbBurn': 0.1,
286
- // 'sub-account/assets': 1, (v3 endpoint)
287
286
  'sub-account/futures/account': 1,
288
287
  'sub-account/futures/accountSummary': 0.1,
289
288
  'sub-account/futures/positionRisk': 1,
@@ -297,15 +296,16 @@ export default class binance extends Exchange {
297
296
  'sub-account/transfer/subUserHistory': 0.1,
298
297
  'sub-account/universalTransfer': 0.1,
299
298
  'sub-account/apiRestrictions/ipRestriction/thirdPartyList': 1,
300
- 'sub-account/transaction-tatistics': 0.4,
299
+ 'sub-account/transaction-statistics': 0.40002,
300
+ 'sub-account/subAccountApi/ipRestriction': 20.001,
301
301
  'managed-subaccount/asset': 0.1,
302
302
  'managed-subaccount/accountSnapshot': 240,
303
303
  'managed-subaccount/queryTransLogForInvestor': 0.1,
304
- 'managed-subaccount/queryTransLogForTradeParent': 0.1,
305
- 'managed-subaccount/fetch-future-asset': 0.1,
304
+ 'managed-subaccount/queryTransLogForTradeParent': 0.40002,
305
+ 'managed-subaccount/fetch-future-asset': 0.40002,
306
306
  'managed-subaccount/marginAsset': 0.1,
307
- 'managed-subaccount/info': 0.4,
308
- 'managed-subaccount/deposit/address': 0.1,
307
+ 'managed-subaccount/info': 0.40002,
308
+ 'managed-subaccount/deposit/address': 0.006667,
309
309
  'managed-subaccount/query-trans-log': 0.40002,
310
310
  // lending endpoints
311
311
  'lending/daily/product/list': 0.1,
@@ -383,6 +383,9 @@ export default class binance extends Exchange {
383
383
  'giftcard/verify': 0.1,
384
384
  'giftcard/cryptography/rsa-public-key': 0.1,
385
385
  'giftcard/buyCode/token-limit': 0.1,
386
+ 'algo/spot/openOrders': 0.1,
387
+ 'algo/spot/historicalOrders': 0.1,
388
+ 'algo/spot/subOrders': 0.1,
386
389
  'algo/futures/openOrders': 0.1,
387
390
  'algo/futures/historicalOrders': 0.1,
388
391
  'algo/futures/subOrders': 0.1,
@@ -424,9 +427,9 @@ export default class binance extends Exchange {
424
427
  'simple-earn/flexible/history/collateralRecord': 0.1,
425
428
  },
426
429
  'post': {
427
- 'asset/dust': 1,
430
+ 'asset/dust': 0.06667,
428
431
  'asset/dust-btc': 0.1,
429
- 'asset/transfer': 0.1,
432
+ 'asset/transfer': 6.0003,
430
433
  'asset/get-funding-asset': 0.1,
431
434
  'asset/convert-transfer': 0.033335,
432
435
  'account/disableFastWithdrawSwitch': 0.1,
@@ -436,12 +439,12 @@ export default class binance extends Exchange {
436
439
  'capital/withdraw/apply': 4.0002,
437
440
  'capital/contract/convertible-coins': 4.0002,
438
441
  'capital/deposit/credit-apply': 0.1,
439
- 'margin/transfer': 1,
442
+ 'margin/transfer': 4.0002,
440
443
  'margin/loan': 20.001,
441
444
  'margin/repay': 20.001,
442
445
  'margin/order': 0.040002,
443
446
  'margin/order/oco': 0.040002,
444
- 'margin/dust': 20,
447
+ 'margin/dust': 20.001,
445
448
  'margin/exchange-small-liability': 20.001,
446
449
  // 'margin/isolated/create': 1, discontinued
447
450
  'margin/isolated/transfer': 4.0002,
@@ -458,8 +461,6 @@ export default class binance extends Exchange {
458
461
  'sub-account/transfer/subToMaster': 0.1,
459
462
  'sub-account/universalTransfer': 0.1,
460
463
  'sub-account/options/enable': 0.1,
461
- // v2 not supported yet
462
- // 'sub-account/subAccountApi/ipRestriction': 20,
463
464
  'managed-subaccount/deposit': 0.1,
464
465
  'managed-subaccount/withdraw': 0.1,
465
466
  'userDataStream': 0.1,
@@ -505,6 +506,7 @@ export default class binance extends Exchange {
505
506
  'giftcard/createCode': 0.1,
506
507
  'giftcard/redeemCode': 0.1,
507
508
  'giftcard/buyCode': 0.1,
509
+ 'algo/spot/newOrderTwap': 20.001,
508
510
  'algo/futures/newOrderVp': 20.001,
509
511
  'algo/futures/newOrderTwap': 20.001,
510
512
  // staking
@@ -512,14 +514,14 @@ export default class binance extends Exchange {
512
514
  'staking/redeem': 0.1,
513
515
  'staking/setAutoStaking': 0.1,
514
516
  'portfolio/repay': 20.001,
515
- 'loan/vip/renew': 40,
516
- 'loan/vip/borrow': 40,
517
- 'loan/borrow': 40,
518
- 'loan/repay': 40,
519
- 'loan/adjust/ltv': 40,
520
- 'loan/customize/margin_call': 40,
521
- 'loan/vip/repay': 40,
522
- 'convert/getQuote': 20.001,
517
+ 'loan/vip/renew': 40.002,
518
+ 'loan/vip/borrow': 40.002,
519
+ 'loan/borrow': 40.002,
520
+ 'loan/repay': 40.002,
521
+ 'loan/adjust/ltv': 40.002,
522
+ 'loan/customize/margin_call': 40.002,
523
+ 'loan/vip/repay': 40.002,
524
+ 'convert/getQuote': 1.3334,
523
525
  'convert/acceptQuote': 3.3335,
524
526
  'portfolio/auto-collection': 150,
525
527
  'portfolio/asset-collection': 6,
@@ -544,15 +546,17 @@ export default class binance extends Exchange {
544
546
  'delete': {
545
547
  // 'account/apiRestrictions/ipRestriction/ipList': 1, discontinued
546
548
  'margin/openOrders': 0.1,
547
- 'margin/order': 0.0066667,
548
- 'margin/orderList': 0.0066667,
549
+ 'margin/order': 0.006667,
550
+ 'margin/orderList': 0.006667,
549
551
  'margin/isolated/account': 2.0001,
550
552
  'userDataStream': 0.1,
551
553
  'userDataStream/isolated': 0.1,
552
554
  // brokerage API TODO NO MENTION OF RATELIMIT IN BROKERAGE DOCS
553
555
  'broker/subAccountApi': 1,
554
556
  'broker/subAccountApi/ipRestriction/ipList': 1,
557
+ 'algo/spot/order': 0.1,
555
558
  'algo/futures/order': 0.1,
559
+ 'sub-account/subAccountApi/ipRestriction/ipList': 20.001, // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001
556
560
  },
557
561
  },
558
562
  'sapiV2': {
@@ -560,10 +564,13 @@ export default class binance extends Exchange {
560
564
  'sub-account/futures/account': 0.1,
561
565
  'sub-account/futures/positionRisk': 0.1,
562
566
  },
567
+ 'post': {
568
+ 'sub-account/subAccountApi/ipRestriction': 20.001, // Weight(UID): 3000 => cost = 0.006667 * 3000 = 20.001
569
+ },
563
570
  },
564
571
  'sapiV3': {
565
572
  'get': {
566
- 'sub-account/assets': 1,
573
+ 'sub-account/assets': 0.40002, // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002
567
574
  },
568
575
  'post': {
569
576
  'asset/getUserAsset': 0.5,
@@ -571,7 +578,7 @@ export default class binance extends Exchange {
571
578
  },
572
579
  'sapiV4': {
573
580
  'get': {
574
- 'sub-account/assets': 1,
581
+ 'sub-account/assets': 0.40002, // Weight(UID): 60 => cost = 0.006667 * 60 = 0.40002
575
582
  },
576
583
  },
577
584
  // deprecated
@@ -826,55 +833,59 @@ export default class binance extends Exchange {
826
833
  },
827
834
  },
828
835
  'public': {
836
+ // IP (api) request rate limit of 6000 per minute
837
+ // 1 IP (api) => cost = 0.2 => (1000 / (50 * 0.2)) * 60 = 6000
829
838
  'get': {
830
- 'ping': 1,
831
- 'time': 1,
832
- 'depth': { 'cost': 1, 'byLimit': [[100, 1], [500, 5], [1000, 10], [5000, 50]] },
833
- 'trades': 1,
834
- 'aggTrades': 1,
835
- 'historicalTrades': 5,
836
- 'klines': 1,
837
- 'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },
838
- 'ticker/price': { 'cost': 1, 'noSymbol': 2 },
839
- 'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },
840
- 'exchangeInfo': 10,
839
+ 'ping': 0.2,
840
+ 'time': 0.2,
841
+ 'depth': { 'cost': 0.4, 'byLimit': [[100, 0.4], [500, 2], [1000, 4], [5000, 20]] },
842
+ 'trades': 0.4,
843
+ 'aggTrades': 0.4,
844
+ 'historicalTrades': 2,
845
+ 'klines': 0.4,
846
+ 'uiKlines': 0.4,
847
+ 'ticker/24hr': { 'cost': 0.4, 'noSymbol': 16 },
848
+ 'ticker/price': { 'cost': 0.4, 'noSymbol': 0.8 },
849
+ 'ticker/bookTicker': { 'cost': 0.4, 'noSymbol': 0.8 },
850
+ 'exchangeInfo': 4,
851
+ 'avgPrice': 0.4,
841
852
  },
842
853
  'put': {
843
- 'userDataStream': 1,
854
+ 'userDataStream': 0.4,
844
855
  },
845
856
  'post': {
846
- 'userDataStream': 1,
857
+ 'userDataStream': 0.4,
847
858
  },
848
859
  'delete': {
849
- 'userDataStream': 1,
860
+ 'userDataStream': 0.4,
850
861
  },
851
862
  },
852
863
  'private': {
853
864
  'get': {
854
- 'allOrderList': 10,
855
- 'openOrderList': 3,
856
- 'orderList': 2,
857
- 'order': 2,
858
- 'openOrders': { 'cost': 3, 'noSymbol': 40 },
859
- 'allOrders': 10,
860
- 'account': 10,
861
- 'myTrades': 10,
862
- 'rateLimit/order': 20,
863
- 'myPreventedMatches': 1,
864
- 'myAllocations': 10,
865
+ 'allOrderList': 4,
866
+ 'openOrderList': 1.2,
867
+ 'orderList': 0.8,
868
+ 'order': 0.8,
869
+ 'openOrders': { 'cost': 1.2, 'noSymbol': 16 },
870
+ 'allOrders': 4,
871
+ 'account': 4,
872
+ 'myTrades': 4,
873
+ 'rateLimit/order': 8,
874
+ 'myPreventedMatches': 4,
875
+ 'myAllocations': 4,
865
876
  },
866
877
  'post': {
867
- 'order/oco': 1,
868
- 'sor/order': 1,
869
- 'sor/order/test': 1,
870
- 'order': 1,
871
- 'order/cancelReplace': 1,
872
- 'order/test': 1,
878
+ 'order/oco': 0.2,
879
+ 'sor/order': 0.2,
880
+ 'sor/order/test': 0.2,
881
+ 'order': 0.2,
882
+ 'order/cancelReplace': 0.2,
883
+ 'order/test': 0.2,
873
884
  },
874
885
  'delete': {
875
- 'openOrders': 1,
876
- 'orderList': 1,
877
- 'order': 1,
886
+ 'openOrders': 0.2,
887
+ 'orderList': 0.2,
888
+ 'order': 0.2,
878
889
  },
879
890
  },
880
891
  'papi': {
package/js/src/bingx.d.ts CHANGED
@@ -205,7 +205,7 @@ export default class bingx extends Exchange {
205
205
  };
206
206
  fetchDepositWithdrawFees(codes?: string[], params?: {}): Promise<any>;
207
207
  withdraw(code: string, amount: any, address: any, tag?: any, params?: {}): Promise<void>;
208
- parseParams(params: any): string;
208
+ parseParams(params: any): {};
209
209
  sign(path: any, section?: string, method?: string, params?: {}, headers?: any, body?: any): {
210
210
  url: any;
211
211
  method: string;
package/js/src/bingx.js CHANGED
@@ -93,6 +93,7 @@ export default class bingx extends Exchange {
93
93
  'market/trades': 3,
94
94
  'market/depth': 3,
95
95
  'market/kline': 3,
96
+ 'ticker/24hr': 1,
96
97
  },
97
98
  },
98
99
  'private': {
@@ -101,7 +102,6 @@ export default class bingx extends Exchange {
101
102
  'trade/openOrders': 3,
102
103
  'trade/historyOrders': 3,
103
104
  'account/balance': 3,
104
- 'ticker/24hr': 1,
105
105
  },
106
106
  'post': {
107
107
  'trade/order': 3,
@@ -258,6 +258,7 @@ export default class bingx extends Exchange {
258
258
  '500': ExchangeError,
259
259
  '504': ExchangeError,
260
260
  '100001': AuthenticationError,
261
+ '100412': AuthenticationError,
261
262
  '100202': InsufficientFunds,
262
263
  '100400': BadRequest,
263
264
  '100440': ExchangeError,
@@ -1100,7 +1101,7 @@ export default class bingx extends Exchange {
1100
1101
  };
1101
1102
  let response = undefined;
1102
1103
  if (market['spot']) {
1103
- response = await this.spotV1PrivateGetTicker24hr(this.extend(request, params));
1104
+ response = await this.spotV1PublicGetTicker24hr(this.extend(request, params));
1104
1105
  }
1105
1106
  else {
1106
1107
  response = await this.swapV2PublicGetQuoteTicker(this.extend(request, params));
@@ -1140,15 +1141,21 @@ export default class bingx extends Exchange {
1140
1141
  * @returns {object} a dictionary of [ticker structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure}
1141
1142
  */
1142
1143
  await this.loadMarkets();
1144
+ let market = undefined;
1143
1145
  if (symbols !== undefined) {
1144
1146
  symbols = this.marketSymbols(symbols);
1145
1147
  const firstSymbol = this.safeString(symbols, 0);
1146
- const market = this.market(firstSymbol);
1147
- if (!market['swap']) {
1148
- throw new BadRequest(this.id + ' fetchTicker is only supported for swap markets.');
1149
- }
1148
+ market = this.market(firstSymbol);
1149
+ }
1150
+ let type = undefined;
1151
+ [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1152
+ let response = undefined;
1153
+ if (type === 'spot') {
1154
+ response = await this.spotV1PublicGetTicker24hr(params);
1155
+ }
1156
+ else {
1157
+ response = await this.swapV2PublicGetQuoteTicker(params);
1150
1158
  }
1151
- const response = await this.swapV2PublicGetQuoteTicker(params);
1152
1159
  //
1153
1160
  // {
1154
1161
  // "code": 0,
@@ -2829,31 +2836,25 @@ export default class bingx extends Exchange {
2829
2836
  this.parseTransaction(data);
2830
2837
  }
2831
2838
  parseParams(params) {
2832
- let result = '';
2833
2839
  const sortedParams = this.keysort(params);
2834
2840
  const keys = Object.keys(sortedParams);
2835
2841
  for (let i = 0; i < keys.length; i++) {
2836
2842
  const key = keys[i];
2837
- if (i > 0) {
2838
- result += '&';
2839
- }
2840
2843
  const value = sortedParams[key];
2841
2844
  if (Array.isArray(value)) {
2842
- result += key + '=[';
2845
+ let arrStr = '[';
2843
2846
  for (let j = 0; j < value.length; j++) {
2844
2847
  const arrayElement = value[j];
2845
2848
  if (j > 0) {
2846
- result += ',';
2849
+ arrStr += ',';
2847
2850
  }
2848
- result += arrayElement.toString();
2851
+ arrStr += arrayElement.toString();
2849
2852
  }
2850
- result += ']';
2851
- }
2852
- else {
2853
- result += key + '=' + value.toString();
2853
+ arrStr += ']';
2854
+ sortedParams[key] = arrStr;
2854
2855
  }
2855
2856
  }
2856
- return result;
2857
+ return sortedParams;
2857
2858
  }
2858
2859
  sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2859
2860
  const type = section[0];
@@ -2872,6 +2873,7 @@ export default class bingx extends Exchange {
2872
2873
  params = this.omit(params, this.extractParams(path));
2873
2874
  params = this.keysort(params);
2874
2875
  if (access === 'public') {
2876
+ params['timestamp'] = this.nonce();
2875
2877
  if (Object.keys(params).length) {
2876
2878
  url += '?' + this.urlencode(params);
2877
2879
  }
@@ -2879,8 +2881,9 @@ export default class bingx extends Exchange {
2879
2881
  else if (access === 'private') {
2880
2882
  this.checkRequiredCredentials();
2881
2883
  params['timestamp'] = this.nonce();
2882
- let query = this.parseParams(params);
2883
- const signature = this.hmac(this.encode(query), this.encode(this.secret), sha256);
2884
+ const parsedParams = this.parseParams(params);
2885
+ let query = this.urlencode(parsedParams);
2886
+ const signature = this.hmac(this.encode(this.rawencode(parsedParams)), this.encode(this.secret), sha256);
2884
2887
  if (Object.keys(params).length) {
2885
2888
  query = '?' + query + '&';
2886
2889
  }
package/js/src/bithumb.js CHANGED
@@ -636,7 +636,7 @@ export default class bithumb extends Exchange {
636
636
  await this.loadMarkets();
637
637
  const market = this.market(symbol);
638
638
  const request = {
639
- 'currency': market['base'],
639
+ 'currency': market['base'] + '_' + market['quote'],
640
640
  };
641
641
  if (limit !== undefined) {
642
642
  request['count'] = limit; // default 20, max 100
package/js/src/mexc.js CHANGED
@@ -195,6 +195,7 @@ export default class mexc extends Exchange {
195
195
  'rebate/detail': 1,
196
196
  'rebate/detail/kickback': 1,
197
197
  'rebate/referCode': 1,
198
+ 'rebate/affiliate/commission': 1,
198
199
  'mxDeduct/enable': 1,
199
200
  'userDataStream': 1,
200
201
  },
package/js/src/okx.js CHANGED
@@ -224,6 +224,7 @@ export default class okx extends Exchange {
224
224
  'tradingBot/grid/ai-param': 1,
225
225
  'tradingBot/grid/min-investment': 1,
226
226
  'tradingBot/public/rsi-back-testing': 1,
227
+ 'asset/exchange-list': 5 / 3,
227
228
  'finance/savings/lending-rate-summary': 5 / 3,
228
229
  'finance/savings/lending-rate-history': 5 / 3,
229
230
  // public broker
package/js/src/phemex.js CHANGED
@@ -1610,8 +1610,13 @@ export default class phemex extends Exchange {
1610
1610
  id = this.safeString2(trade, 'execId', 'execID');
1611
1611
  orderId = this.safeString(trade, 'orderID');
1612
1612
  if (market['settle'] === 'USDT') {
1613
- const sideId = this.safeString(trade, 'side');
1614
- side = (sideId === '1') ? 'buy' : 'sell';
1613
+ const sideId = this.safeStringLower(trade, 'side');
1614
+ if ((sideId === 'buy') || (sideId === 'sell')) {
1615
+ side = sideId;
1616
+ }
1617
+ else if (sideId !== undefined) {
1618
+ side = (sideId === '1') ? 'buy' : 'sell';
1619
+ }
1615
1620
  const ordType = this.safeString(trade, 'ordType');
1616
1621
  if (ordType === '1') {
1617
1622
  type = 'market';
@@ -1619,7 +1624,7 @@ export default class phemex extends Exchange {
1619
1624
  else if (ordType === '2') {
1620
1625
  type = 'limit';
1621
1626
  }
1622
- priceString = this.safeString(trade, 'priceRp');
1627
+ priceString = this.safeString(trade, 'execPriceRp');
1623
1628
  amountString = this.safeString(trade, 'execQtyRq');
1624
1629
  costString = this.safeString(trade, 'execValueRv');
1625
1630
  feeCostString = this.safeString(trade, 'execFeeRv');