ccxt 4.4.77 → 4.4.80

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 (154) hide show
  1. package/README.md +8 -10
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +8 -4
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +9 -0
  6. package/dist/cjs/src/ace.js +1 -1
  7. package/dist/cjs/src/apex.js +1949 -0
  8. package/dist/cjs/src/ascendex.js +25 -4
  9. package/dist/cjs/src/base/Exchange.js +42 -2
  10. package/dist/cjs/src/binance.js +9 -1
  11. package/dist/cjs/src/bingx.js +3 -3
  12. package/dist/cjs/src/bitfinex.js +64 -36
  13. package/dist/cjs/src/bitget.js +191 -138
  14. package/dist/cjs/src/bitmart.js +7 -2
  15. package/dist/cjs/src/bitmex.js +16 -8
  16. package/dist/cjs/src/bitopro.js +5 -1
  17. package/dist/cjs/src/bitrue.js +2 -1
  18. package/dist/cjs/src/bitso.js +1 -1
  19. package/dist/cjs/src/bitteam.js +2 -0
  20. package/dist/cjs/src/bitvavo.js +28 -10
  21. package/dist/cjs/src/btcalpha.js +1 -1
  22. package/dist/cjs/src/btcmarkets.js +1 -1
  23. package/dist/cjs/src/btcturk.js +1 -1
  24. package/dist/cjs/src/bybit.js +32 -16
  25. package/dist/cjs/src/cex.js +1 -1
  26. package/dist/cjs/src/coinbase.js +18 -2
  27. package/dist/cjs/src/coincatch.js +68 -0
  28. package/dist/cjs/src/coinex.js +1 -0
  29. package/dist/cjs/src/coinlist.js +1 -0
  30. package/dist/cjs/src/coinone.js +1 -0
  31. package/dist/cjs/src/delta.js +4 -0
  32. package/dist/cjs/src/deribit.js +1 -0
  33. package/dist/cjs/src/hitbtc.js +3 -0
  34. package/dist/cjs/src/hollaex.js +1 -0
  35. package/dist/cjs/src/htx.js +7 -3
  36. package/dist/cjs/src/huobijp.js +1 -0
  37. package/dist/cjs/src/hyperliquid.js +14 -4
  38. package/dist/cjs/src/kraken.js +2 -0
  39. package/dist/cjs/src/mexc.js +50 -57
  40. package/dist/cjs/src/okx.js +1 -1
  41. package/dist/cjs/src/phemex.js +2 -1
  42. package/dist/cjs/src/poloniex.js +2 -1
  43. package/dist/cjs/src/pro/apex.js +1043 -0
  44. package/dist/cjs/src/pro/binance.js +3 -3
  45. package/dist/cjs/src/pro/coinbase.js +45 -68
  46. package/dist/cjs/src/pro/gate.js +27 -2
  47. package/dist/cjs/src/pro/hollaex.js +2 -2
  48. package/dist/cjs/src/pro/p2b.js +2 -2
  49. package/dist/cjs/src/pro/tradeogre.js +283 -0
  50. package/dist/cjs/src/pro/upbit.js +43 -0
  51. package/dist/cjs/src/probit.js +1 -0
  52. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +2639 -0
  53. package/dist/cjs/src/timex.js +2 -2
  54. package/dist/cjs/src/tradeogre.js +2 -1
  55. package/dist/cjs/src/upbit.js +277 -67
  56. package/dist/cjs/src/whitebit.js +66 -12
  57. package/dist/cjs/src/woo.js +3 -1
  58. package/dist/cjs/src/xt.js +9 -0
  59. package/js/ccxt.d.ts +11 -5
  60. package/js/ccxt.js +8 -4
  61. package/js/src/abstract/apex.d.ts +34 -0
  62. package/js/src/abstract/bitmart.d.ts +1 -0
  63. package/js/src/apex.d.ts +333 -0
  64. package/js/src/apex.js +1945 -0
  65. package/js/src/ascendex.d.ts +3 -3
  66. package/js/src/ascendex.js +25 -4
  67. package/js/src/base/Exchange.d.ts +2 -0
  68. package/js/src/base/Exchange.js +42 -1
  69. package/js/src/binance.d.ts +7 -7
  70. package/js/src/binance.js +9 -1
  71. package/js/src/bingx.js +3 -3
  72. package/js/src/bitfinex.d.ts +3 -3
  73. package/js/src/bitfinex.js +64 -36
  74. package/js/src/bitflyer.d.ts +2 -2
  75. package/js/src/bitget.d.ts +2 -0
  76. package/js/src/bitget.js +191 -138
  77. package/js/src/bitmart.d.ts +5 -4
  78. package/js/src/bitmart.js +7 -2
  79. package/js/src/bitmex.d.ts +3 -3
  80. package/js/src/bitmex.js +16 -8
  81. package/js/src/bitopro.js +5 -1
  82. package/js/src/bitrue.js +2 -1
  83. package/js/src/bitso.js +1 -1
  84. package/js/src/bitteam.js +2 -0
  85. package/js/src/bitvavo.js +28 -10
  86. package/js/src/btcalpha.js +1 -1
  87. package/js/src/btcmarkets.js +1 -1
  88. package/js/src/btcturk.js +1 -1
  89. package/js/src/bybit.js +32 -16
  90. package/js/src/cex.js +1 -1
  91. package/js/src/coinbase.d.ts +4 -4
  92. package/js/src/coinbase.js +18 -2
  93. package/js/src/coinbaseexchange.d.ts +1 -1
  94. package/js/src/coincatch.d.ts +11 -0
  95. package/js/src/coincatch.js +68 -0
  96. package/js/src/coinex.js +1 -0
  97. package/js/src/coinlist.js +1 -0
  98. package/js/src/coinone.js +1 -0
  99. package/js/src/cryptocom.d.ts +4 -4
  100. package/js/src/delta.js +4 -0
  101. package/js/src/deribit.d.ts +4 -4
  102. package/js/src/deribit.js +1 -0
  103. package/js/src/derive.d.ts +3 -3
  104. package/js/src/digifinex.d.ts +4 -4
  105. package/js/src/hitbtc.js +3 -0
  106. package/js/src/hollaex.js +1 -0
  107. package/js/src/htx.d.ts +4 -4
  108. package/js/src/htx.js +7 -3
  109. package/js/src/huobijp.js +1 -0
  110. package/js/src/hyperliquid.d.ts +1 -0
  111. package/js/src/hyperliquid.js +14 -4
  112. package/js/src/kraken.d.ts +3 -3
  113. package/js/src/kraken.js +2 -0
  114. package/js/src/krakenfutures.d.ts +2 -2
  115. package/js/src/kucoinfutures.d.ts +5 -5
  116. package/js/src/mexc.d.ts +1 -0
  117. package/js/src/mexc.js +50 -57
  118. package/js/src/okx.js +1 -1
  119. package/js/src/oxfun.d.ts +3 -3
  120. package/js/src/phemex.d.ts +3 -3
  121. package/js/src/phemex.js +2 -1
  122. package/js/src/poloniex.d.ts +3 -3
  123. package/js/src/poloniex.js +2 -1
  124. package/js/src/pro/apex.d.ts +160 -0
  125. package/js/src/pro/apex.js +1038 -0
  126. package/js/src/pro/binance.js +3 -3
  127. package/js/src/pro/coinbase.d.ts +4 -3
  128. package/js/src/pro/coinbase.js +45 -66
  129. package/js/src/pro/gate.js +27 -2
  130. package/js/src/pro/hollaex.js +2 -2
  131. package/js/src/pro/p2b.js +2 -2
  132. package/js/src/pro/tradeogre.d.ts +49 -0
  133. package/js/src/pro/tradeogre.js +278 -0
  134. package/js/src/pro/upbit.d.ts +16 -1
  135. package/js/src/pro/upbit.js +43 -0
  136. package/js/src/probit.js +1 -0
  137. package/js/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  138. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +4276 -0
  139. package/js/src/timex.js +2 -2
  140. package/js/src/tradeogre.js +2 -1
  141. package/js/src/upbit.d.ts +75 -23
  142. package/js/src/upbit.js +277 -67
  143. package/js/src/vertex.d.ts +3 -3
  144. package/js/src/whitebit.js +66 -12
  145. package/js/src/woo.d.ts +4 -4
  146. package/js/src/woo.js +3 -1
  147. package/js/src/woofipro.d.ts +4 -4
  148. package/js/src/xt.d.ts +4 -4
  149. package/js/src/xt.js +9 -0
  150. package/package.json +2 -2
  151. package/js/src/abstract/ace.d.ts +0 -18
  152. package/js/src/ace.d.ts +0 -158
  153. package/js/src/ace.js +0 -1175
  154. /package/js/src/abstract/{ace.js → apex.js} +0 -0
@@ -512,6 +512,7 @@ class ascendex extends ascendex$1 {
512
512
  // "data":[
513
513
  // {
514
514
  // "assetCode":"BTT",
515
+ // "displayName": "BTT",
515
516
  // "borrowAssetCode":"BTT-B",
516
517
  // "interestAssetCode":"BTT-I",
517
518
  // "nativeScale":0,
@@ -532,12 +533,13 @@ class ascendex extends ascendex$1 {
532
533
  // "data":[
533
534
  // {
534
535
  // "assetCode":"LTCBULL",
536
+ // "displayName": "LTCBULL",
535
537
  // "nativeScale":4,
536
538
  // "numConfirmations":20,
537
539
  // "withdrawFee":"0.2",
538
540
  // "minWithdrawalAmt":"1.0",
539
541
  // "statusCode":"Normal",
540
- // "statusMessage":""
542
+ // "statusMessage":"" // hideFromWalletTx
541
543
  // }
542
544
  // ]
543
545
  // }
@@ -559,8 +561,27 @@ class ascendex extends ascendex$1 {
559
561
  const scale = this.safeString2(currency, 'precisionScale', 'nativeScale');
560
562
  const precision = this.parseNumber(this.parsePrecision(scale));
561
563
  const fee = this.safeNumber2(currency, 'withdrawFee', 'withdrawalFee');
562
- const status = this.safeString2(currency, 'status', 'statusCode');
564
+ const status = this.safeString(currency, 'status');
565
+ const statusCode = this.safeString(currency, 'statusCode');
563
566
  const active = (status === 'Normal');
567
+ let depositEnabled = undefined;
568
+ let withdrawEnabled = undefined;
569
+ if (status === 'Delisted' || statusCode === 'hideFromWalletTx') {
570
+ depositEnabled = false;
571
+ withdrawEnabled = false;
572
+ }
573
+ else if (status === 'Normal') {
574
+ depositEnabled = true;
575
+ withdrawEnabled = true;
576
+ }
577
+ else if (status === 'NoTransaction' || statusCode === 'NoTransaction') {
578
+ depositEnabled = true;
579
+ withdrawEnabled = false;
580
+ }
581
+ else if (status === 'NoDeposit') {
582
+ depositEnabled = false;
583
+ withdrawEnabled = true;
584
+ }
564
585
  const marginInside = ('borrowAssetCode' in currency);
565
586
  result[code] = {
566
587
  'id': id,
@@ -570,8 +591,8 @@ class ascendex extends ascendex$1 {
570
591
  'margin': marginInside,
571
592
  'name': this.safeString(currency, 'assetName'),
572
593
  'active': active,
573
- 'deposit': undefined,
574
- 'withdraw': undefined,
594
+ 'deposit': depositEnabled,
595
+ 'withdraw': withdrawEnabled,
575
596
  'fee': fee,
576
597
  'precision': precision,
577
598
  'limits': {
@@ -18,11 +18,12 @@ require('../static_dependencies/ethers/utils/fixednumber.js');
18
18
  require('../static_dependencies/ethers/utils/maths.js');
19
19
  require('../static_dependencies/ethers/utils/utf8.js');
20
20
  require('../static_dependencies/noble-hashes/sha3.js');
21
- require('../static_dependencies/noble-hashes/sha256.js');
21
+ var sha256 = require('../static_dependencies/noble-hashes/sha256.js');
22
22
  require('../static_dependencies/ethers/address/address.js');
23
23
  var typedData = require('../static_dependencies/ethers/hash/typed-data.js');
24
24
  var rng = require('../static_dependencies/jsencrypt/lib/jsbn/rng.js');
25
25
  var index$1 = require('../static_dependencies/scure-starknet/index.js');
26
+ var zklinkSdkWeb = require('../static_dependencies/zklink/zklink-sdk-web.js');
26
27
  require('../static_dependencies/noble-curves/abstract/modular.js');
27
28
  var selector = require('../static_dependencies/starknet/utils/selector.js');
28
29
  var classHash = require('../static_dependencies/starknet/utils/hash/classHash.js');
@@ -1217,6 +1218,45 @@ class Exchange {
1217
1218
  const signature = index$1.sign(hash.replace('0x', ''), pri.slice(-64));
1218
1219
  return this.json([signature.r.toString(), signature.s.toString()]);
1219
1220
  }
1221
+ async getZKContractSignatureObj(seed, params = {}) {
1222
+ const formattedSlotId = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(this.safeString(params, 'slotId')), sha256.sha256, 'hex'))).toString();
1223
+ const formattedNonce = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(this.safeString(params, 'nonce')), sha256.sha256, 'hex'))).toString();
1224
+ const formattedUint64 = '18446744073709551615';
1225
+ const formattedUint32 = '4294967295';
1226
+ const accountId = parseInt(Precise["default"].stringMod(this.safeString(params, 'accountId'), formattedUint32), 10);
1227
+ const slotId = parseInt(Precise["default"].stringDiv(Precise["default"].stringMod(formattedSlotId, formattedUint64), formattedUint32), 10);
1228
+ const nonce = parseInt(Precise["default"].stringMod(formattedNonce, formattedUint32), 10);
1229
+ await zklinkSdkWeb["default"]();
1230
+ const _signer = zklinkSdkWeb.newRpcSignerWithProvider({});
1231
+ await _signer.initZklinkSigner(seed);
1232
+ let tx_builder = new zklinkSdkWeb.ContractBuilder(accountId, 0, slotId, nonce, this.safeInteger(params, 'pairId'), Precise["default"].stringMul(this.safeString(params, 'size'), '1e18'), Precise["default"].stringMul(this.safeString(params, 'price'), '1e18'), this.safeString(params, 'direction') === 'BUY', parseInt(Precise["default"].stringMul(this.safeString(params, 'makerFeeRate'), '10000')), parseInt(Precise["default"].stringMul(this.safeString(params, 'takerFeeRate'), '10000')), false);
1233
+ let contractor = zklinkSdkWeb.newContract(tx_builder);
1234
+ //const signer = ZkLinkSigner.ethSig(seed);
1235
+ //const signer = new Signer(seed);
1236
+ contractor?.sign(_signer?.getZkLinkSigner());
1237
+ const tx = contractor.jsValue();
1238
+ const zkSign = tx?.signature?.signature;
1239
+ return zkSign;
1240
+ }
1241
+ async getZKTransferSignatureObj(seed, params = {}) {
1242
+ await zklinkSdkWeb["default"]();
1243
+ const _signer = zklinkSdkWeb.newRpcSignerWithProvider({});
1244
+ await _signer.initZklinkSigner(seed);
1245
+ let nonce = this.safeString(params, 'nonce', '0');
1246
+ if (this.safeBool(params, 'isContract') === true) {
1247
+ const formattedUint32 = '4294967295';
1248
+ const formattedNonce = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(nonce), sha256.sha256, 'hex'))).toString();
1249
+ nonce = Precise["default"].stringMod(formattedNonce, formattedUint32);
1250
+ }
1251
+ let tx_builder = new zklinkSdkWeb.TransferBuilder(this.safeNumber(params, 'zkAccountId', 0), this.safeString(params, 'receiverAddress'), this.safeNumber(params, 'subAccountId', 0), this.safeNumber(params, 'receiverSubAccountId', 0), this.safeNumber(params, 'tokenId', 0), this.safeString(params, 'fee', '0'), this.safeString(params, 'amount', '0'), this.parseToInt(nonce), this.safeNumber(params, 'timestampSeconds', 0));
1252
+ let contractor = zklinkSdkWeb.newTransfer(tx_builder);
1253
+ //const signer = ZkLinkSigner.ethSig(seed);
1254
+ //const signer = new Signer(seed);
1255
+ contractor?.sign(_signer?.getZkLinkSigner());
1256
+ const tx = contractor.jsValue();
1257
+ const zkSign = tx?.signature?.signature;
1258
+ return zkSign;
1259
+ }
1220
1260
  intToBase16(elem) {
1221
1261
  return elem.toString(16);
1222
1262
  }
@@ -2569,7 +2609,7 @@ class Exchange {
2569
2609
  // find lowest precision (which is more desired)
2570
2610
  const precision = this.safeString(network, 'precision');
2571
2611
  const precisionMain = this.safeString(currency, 'precision');
2572
- if (precisionMain === undefined || Precise["default"].stringLt(precision, precisionMain)) {
2612
+ if (precisionMain === undefined || Precise["default"].stringGt(precision, precisionMain)) {
2573
2613
  currency['precision'] = this.parseNumber(precision);
2574
2614
  }
2575
2615
  // limits
@@ -20,7 +20,7 @@ class binance extends binance$1 {
20
20
  return this.deepExtend(super.describe(), {
21
21
  'id': 'binance',
22
22
  'name': 'Binance',
23
- 'countries': ['JP', 'MT'],
23
+ 'countries': [],
24
24
  'rateLimit': 50,
25
25
  'certified': true,
26
26
  'pro': true,
@@ -1270,6 +1270,7 @@ class binance extends binance$1 {
1270
1270
  'inverse', // allows CORS in browsers
1271
1271
  // 'option', // does not allow CORS, enable outside of the browser only
1272
1272
  ],
1273
+ 'loadAllOptions': false,
1273
1274
  'fetchCurrencies': true,
1274
1275
  // 'fetchTradesMethod': 'publicGetAggTrades', // publicGetTrades, publicGetHistoricalTrades, eapiPublicGetTrades
1275
1276
  // 'repayCrossMarginMethod': 'papiPostRepayLoan', // papiPostMarginRepayDebt
@@ -3036,6 +3037,13 @@ class binance extends binance$1 {
3036
3037
  async fetchMarkets(params = {}) {
3037
3038
  const promisesRaw = [];
3038
3039
  const rawFetchMarkets = this.safeList(this.options, 'fetchMarkets', ['spot', 'linear', 'inverse']);
3040
+ // handle loadAllOptions option
3041
+ const loadAllOptions = this.safeBool(this.options, 'loadAllOptions', false);
3042
+ if (loadAllOptions) {
3043
+ if (!this.inArray('option', rawFetchMarkets)) {
3044
+ rawFetchMarkets.push('option');
3045
+ }
3046
+ }
3039
3047
  const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
3040
3048
  const fetchMarkets = [];
3041
3049
  for (let i = 0; i < rawFetchMarkets.length; i++) {
@@ -709,7 +709,7 @@ class bingx extends bingx$1 {
709
709
  //
710
710
  // {
711
711
  // "code": 0,
712
- // "timestamp": 1702623271477,
712
+ // "timestamp": 1702623271476,
713
713
  // "data": [
714
714
  // {
715
715
  // "coin": "BTC",
@@ -795,7 +795,7 @@ class bingx extends bingx$1 {
795
795
  };
796
796
  }
797
797
  const active = depositEnabled || withdrawEnabled;
798
- result[code] = {
798
+ result[code] = this.safeCurrencyStructure({
799
799
  'info': entry,
800
800
  'code': code,
801
801
  'id': currencyId,
@@ -807,7 +807,7 @@ class bingx extends bingx$1 {
807
807
  'networks': networks,
808
808
  'fee': fee,
809
809
  'limits': defaultLimits,
810
- };
810
+ });
811
811
  }
812
812
  return result;
813
813
  }
@@ -1158,9 +1158,8 @@ class bitfinex extends bitfinex$1 {
1158
1158
  //
1159
1159
  // on trading pairs (ex. tBTCUSD)
1160
1160
  //
1161
- // {
1162
- // 'result': [
1163
- // SYMBOL,
1161
+ // [
1162
+ // SYMBOL, // this index is not present in singular-ticker
1164
1163
  // BID,
1165
1164
  // BID_SIZE,
1166
1165
  // ASK,
@@ -1171,15 +1170,13 @@ class bitfinex extends bitfinex$1 {
1171
1170
  // VOLUME,
1172
1171
  // HIGH,
1173
1172
  // LOW
1174
- // ]
1175
- // }
1173
+ // ]
1176
1174
  //
1177
1175
  //
1178
1176
  // on funding currencies (ex. fUSD)
1179
1177
  //
1180
- // {
1181
- // 'result': [
1182
- // SYMBOL,
1178
+ // [
1179
+ // SYMBOL, // this index is not present in singular-ticker
1183
1180
  // FRR,
1184
1181
  // BID,
1185
1182
  // BID_PERIOD,
@@ -1196,35 +1193,75 @@ class bitfinex extends bitfinex$1 {
1196
1193
  // _PLACEHOLDER,
1197
1194
  // _PLACEHOLDER,
1198
1195
  // FRR_AMOUNT_AVAILABLE
1199
- // ]
1200
- // }
1196
+ // ]
1201
1197
  //
1202
- const result = this.safeList(ticker, 'result');
1203
- const symbol = this.safeSymbol(undefined, market);
1204
- const length = result.length;
1205
- const last = this.safeString(result, length - 4);
1206
- const percentage = this.safeString(result, length - 5);
1198
+ const length = ticker.length;
1199
+ const isFetchTicker = (length === 10) || (length === 16);
1200
+ let symbol = undefined;
1201
+ let minusIndex = 0;
1202
+ let isFundingCurrency = false;
1203
+ if (isFetchTicker) {
1204
+ minusIndex = 1;
1205
+ isFundingCurrency = (length === 16);
1206
+ }
1207
+ else {
1208
+ const marketId = this.safeString(ticker, 0);
1209
+ market = this.safeMarket(marketId, market);
1210
+ isFundingCurrency = (length === 17);
1211
+ }
1212
+ symbol = this.safeSymbol(undefined, market);
1213
+ let last = undefined;
1214
+ let bid = undefined;
1215
+ let ask = undefined;
1216
+ let change = undefined;
1217
+ let percentage = undefined;
1218
+ let volume = undefined;
1219
+ let high = undefined;
1220
+ let low = undefined;
1221
+ if (isFundingCurrency) {
1222
+ // per api docs, they are different array type
1223
+ last = this.safeString(ticker, 10 - minusIndex);
1224
+ bid = this.safeString(ticker, 2 - minusIndex);
1225
+ ask = this.safeString(ticker, 5 - minusIndex);
1226
+ change = this.safeString(ticker, 8 - minusIndex);
1227
+ percentage = this.safeString(ticker, 9 - minusIndex);
1228
+ volume = this.safeString(ticker, 11 - minusIndex);
1229
+ high = this.safeString(ticker, 12 - minusIndex);
1230
+ low = this.safeString(ticker, 13 - minusIndex);
1231
+ }
1232
+ else {
1233
+ // on trading pairs (ex. tBTCUSD or tHMSTR:USD)
1234
+ last = this.safeString(ticker, 7 - minusIndex);
1235
+ bid = this.safeString(ticker, 1 - minusIndex);
1236
+ ask = this.safeString(ticker, 3 - minusIndex);
1237
+ change = this.safeString(ticker, 5 - minusIndex);
1238
+ percentage = this.safeString(ticker, 6 - minusIndex);
1239
+ percentage = Precise["default"].stringMul(percentage, '100');
1240
+ volume = this.safeString(ticker, 8 - minusIndex);
1241
+ high = this.safeString(ticker, 9 - minusIndex);
1242
+ low = this.safeString(ticker, 10 - minusIndex);
1243
+ }
1207
1244
  return this.safeTicker({
1208
1245
  'symbol': symbol,
1209
1246
  'timestamp': undefined,
1210
1247
  'datetime': undefined,
1211
- 'high': this.safeString(result, length - 2),
1212
- 'low': this.safeString(result, length - 1),
1213
- 'bid': this.safeString(result, length - 10),
1214
- 'bidVolume': this.safeString(result, length - 9),
1215
- 'ask': this.safeString(result, length - 8),
1216
- 'askVolume': this.safeString(result, length - 7),
1248
+ 'high': high,
1249
+ 'low': low,
1250
+ 'bid': bid,
1251
+ 'bidVolume': undefined,
1252
+ 'ask': ask,
1253
+ 'askVolume': undefined,
1217
1254
  'vwap': undefined,
1218
1255
  'open': undefined,
1219
1256
  'close': last,
1220
1257
  'last': last,
1221
1258
  'previousClose': undefined,
1222
- 'change': this.safeString(result, length - 6),
1223
- 'percentage': Precise["default"].stringMul(percentage, '100'),
1259
+ 'change': change,
1260
+ 'percentage': percentage,
1224
1261
  'average': undefined,
1225
- 'baseVolume': this.safeString(result, length - 3),
1262
+ 'baseVolume': volume,
1226
1263
  'quoteVolume': undefined,
1227
- 'info': result,
1264
+ 'info': ticker,
1228
1265
  }, market);
1229
1266
  }
1230
1267
  /**
@@ -1287,15 +1324,7 @@ class bitfinex extends bitfinex$1 {
1287
1324
  // ...
1288
1325
  // ]
1289
1326
  //
1290
- const result = {};
1291
- for (let i = 0; i < tickers.length; i++) {
1292
- const ticker = tickers[i];
1293
- const marketId = this.safeString(ticker, 0);
1294
- const market = this.safeMarket(marketId);
1295
- const symbol = market['symbol'];
1296
- result[symbol] = this.parseTicker({ 'result': ticker }, market);
1297
- }
1298
- return this.filterByArrayTickers(result, 'symbol', symbols);
1327
+ return this.parseTickers(tickers, symbols);
1299
1328
  }
1300
1329
  /**
1301
1330
  * @method
@@ -1313,8 +1342,7 @@ class bitfinex extends bitfinex$1 {
1313
1342
  'symbol': market['id'],
1314
1343
  };
1315
1344
  const ticker = await this.publicGetTickerSymbol(this.extend(request, params));
1316
- const result = { 'result': ticker };
1317
- return this.parseTicker(result, market);
1345
+ return this.parseTicker(ticker, market);
1318
1346
  }
1319
1347
  parseTrade(trade, market = undefined) {
1320
1348
  //