@paraswap/dex-lib 3.8.38 → 3.8.39-bebop

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 (62) hide show
  1. package/build/abi/USDM.json +807 -0
  2. package/build/abi/bebop/BebopSettlement.abi.json +2137 -0
  3. package/build/abi/wUSDM.json +757 -0
  4. package/build/config.js +7 -0
  5. package/build/config.js.map +1 -1
  6. package/build/dex/bebop/bebop.d.ts +55 -0
  7. package/build/dex/bebop/bebop.js +524 -0
  8. package/build/dex/bebop/bebop.js.map +1 -0
  9. package/build/dex/bebop/config.d.ts +3 -0
  10. package/build/dex/bebop/config.js +38 -0
  11. package/build/dex/bebop/config.js.map +1 -0
  12. package/build/dex/bebop/constants.d.ts +9 -0
  13. package/build/dex/bebop/constants.js +13 -0
  14. package/build/dex/bebop/constants.js.map +1 -0
  15. package/build/dex/bebop/rate-fetcher.d.ts +22 -0
  16. package/build/dex/bebop/rate-fetcher.js +80 -0
  17. package/build/dex/bebop/rate-fetcher.js.map +1 -0
  18. package/build/dex/bebop/types.d.ts +76 -0
  19. package/build/dex/bebop/types.js +3 -0
  20. package/build/dex/bebop/types.js.map +1 -0
  21. package/build/dex/bebop/validators.d.ts +4 -0
  22. package/build/dex/bebop/validators.js +42 -0
  23. package/build/dex/bebop/validators.js.map +1 -0
  24. package/build/dex/bebop/websocket-fetcher.d.ts +35 -0
  25. package/build/dex/bebop/websocket-fetcher.js +87 -0
  26. package/build/dex/bebop/websocket-fetcher.js.map +1 -0
  27. package/build/dex/index.js +2 -0
  28. package/build/dex/index.js.map +1 -1
  29. package/build/dex/woo-fi-v2/woo-fi-v2-pool.d.ts +2 -2
  30. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js +30 -9
  31. package/build/dex/woo-fi-v2/woo-fi-v2-pool.js.map +1 -1
  32. package/build/dex/woo-fi-v2/woo-fi-v2.js +1 -1
  33. package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
  34. package/build/dex/wusdm/config.d.ts +3 -0
  35. package/build/dex/wusdm/config.js +29 -0
  36. package/build/dex/wusdm/config.js.map +1 -0
  37. package/build/dex/wusdm/types.d.ts +10 -0
  38. package/build/dex/wusdm/types.js +3 -0
  39. package/build/dex/wusdm/types.js.map +1 -0
  40. package/build/dex/wusdm/wusdm.d.ts +39 -0
  41. package/build/dex/wusdm/wusdm.js +212 -0
  42. package/build/dex/wusdm/wusdm.js.map +1 -0
  43. package/build/lib/fetcher/wsFetcher.d.ts +35 -0
  44. package/build/lib/fetcher/wsFetcher.js +87 -0
  45. package/build/lib/fetcher/wsFetcher.js.map +1 -0
  46. package/build/types.d.ts +1 -0
  47. package/package.json +4 -2
  48. package/src/abi/bebop/BebopSettlement.abi.json +2137 -0
  49. package/src/config.ts +8 -0
  50. package/src/dex/bebop/bebop-e2e.test.ts +195 -0
  51. package/src/dex/bebop/bebop-integration.test.ts +170 -0
  52. package/src/dex/bebop/bebop.ts +732 -0
  53. package/src/dex/bebop/config.ts +37 -0
  54. package/src/dex/bebop/constants.ts +9 -0
  55. package/src/dex/bebop/rate-fetcher.ts +138 -0
  56. package/src/dex/bebop/types.ts +81 -0
  57. package/src/dex/bebop/validators.ts +43 -0
  58. package/src/dex/index.ts +2 -0
  59. package/src/dex/woo-fi-v2/woo-fi-v2-pool.ts +58 -27
  60. package/src/dex/woo-fi-v2/woo-fi-v2.ts +1 -2
  61. package/src/lib/fetcher/wsFetcher.ts +126 -0
  62. package/src/types.ts +1 -0
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Bebop = void 0;
30
+ const ts_essentials_1 = require("ts-essentials");
31
+ const constants_1 = require("../../constants");
32
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
33
+ const utils_1 = require("../../utils");
34
+ const BebopSettlement_abi_json_1 = __importDefault(require("../../abi/bebop/BebopSettlement.abi.json"));
35
+ const simple_exchange_1 = require("../simple-exchange");
36
+ const config_1 = require("./config");
37
+ const utils_2 = require("ethers/lib/utils");
38
+ const rate_fetcher_1 = require("./rate-fetcher");
39
+ const constants_2 = require("./constants");
40
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
41
+ const bignumber_constants_1 = require("../../bignumber-constants");
42
+ const ethers_1 = require("ethers");
43
+ const qs_1 = __importDefault(require("qs"));
44
+ class Bebop extends simple_exchange_1.SimpleExchange {
45
+ constructor(network, dexKey, dexHelper, settlementAddress = config_1.BebopConfig['Bebop'][network]
46
+ .settlementAddress, settlementInterface = new utils_2.Interface(BebopSettlement_abi_json_1.default)) {
47
+ super(dexHelper, dexKey);
48
+ this.network = network;
49
+ this.dexKey = dexKey;
50
+ this.dexHelper = dexHelper;
51
+ this.settlementAddress = settlementAddress;
52
+ this.settlementInterface = settlementInterface;
53
+ this.hasConstantPriceLargeAmounts = false;
54
+ this.needWrapNative = false;
55
+ this.isFeeOnTransferSupported = false;
56
+ this.tokensMap = {};
57
+ this.logger = dexHelper.getLogger(dexKey);
58
+ this.tokensCacheKey = `tokens`;
59
+ this.pricesCacheKey = `prices`;
60
+ this.tokensAddrCacheKey = `tokens_addr`;
61
+ const token = this.dexHelper.config.data.bebopAuthToken;
62
+ if (!token) {
63
+ throw new Error('Bebop auth token is not set');
64
+ }
65
+ this.bebopAuthToken = token;
66
+ this.rateFetcher = new rate_fetcher_1.RateFetcher(this.dexHelper, this.dexKey, this.network, this.logger, {
67
+ rateConfig: {
68
+ tokensIntervalMs: constants_2.BEBOP_TOKENS_POLLING_INTERVAL_MS,
69
+ pricesCacheKey: this.pricesCacheKey,
70
+ pricesCacheTTLSecs: constants_2.BEBOP_PRICES_CACHE_TTL,
71
+ tokensCacheKey: this.tokensCacheKey,
72
+ tokensAddrCacheKey: this.tokensAddrCacheKey,
73
+ tokensCacheTTLSecs: constants_2.BEBOP_TOKENS_CACHE_TTL,
74
+ tokensReqParams: {
75
+ url: constants_2.BEBOP_API_URL +
76
+ `/pmm/${config_1.BebopConfig['Bebop'][network].chainName}/v3/token-info`,
77
+ },
78
+ pricesReqParams: {
79
+ url: constants_2.BEBOP_WS_API_URL +
80
+ `/pmm/${config_1.BebopConfig['Bebop'][network].chainName}/v3/pricing`,
81
+ headers: {
82
+ name: constants_2.BEBOP_AUTH_NAME,
83
+ authorization: this.bebopAuthToken,
84
+ },
85
+ },
86
+ },
87
+ });
88
+ }
89
+ async initializePricing(blockNumber) {
90
+ if (!this.dexHelper.config.isSlave) {
91
+ this.rateFetcher.start();
92
+ await sleep(constants_2.BEBOP_INIT_TIMEOUT_MS);
93
+ }
94
+ }
95
+ // Returns the list of contract adapters (name and index)
96
+ // for a buy/sell. Return null if there are no adapters.
97
+ getAdapters(side) {
98
+ return null;
99
+ }
100
+ getPoolIdentifier(base, quote) {
101
+ const identifier = `${this.dexKey}_${base.toLowerCase()}_${quote.toLowerCase()}`;
102
+ return identifier;
103
+ }
104
+ invertLevels(levels) {
105
+ return levels.map(([price, size]) => [1 / price, size * price]);
106
+ }
107
+ invertBook(book) {
108
+ return {
109
+ bids: this.invertLevels(book.asks),
110
+ asks: this.invertLevels(book.bids),
111
+ last_update_ts: book.last_update_ts,
112
+ };
113
+ }
114
+ // considers only swapside.sell
115
+ async calculateInstructions(srcToken, destToken, side) {
116
+ const prices = await this.getCachedPrices();
117
+ if (!prices) {
118
+ throw new Error('No prices available');
119
+ }
120
+ const directBook = prices[`${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`];
121
+ if (directBook) {
122
+ return [
123
+ {
124
+ pair: `${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`,
125
+ side,
126
+ book: directBook,
127
+ targetQuote: side == constants_1.SwapSide.BUY,
128
+ },
129
+ ];
130
+ }
131
+ const inverseBook = prices[`${destToken.address.toLowerCase()}/${srcToken.address.toLowerCase()}`];
132
+ if (inverseBook) {
133
+ const invertedBook = this.invertBook(inverseBook);
134
+ return [
135
+ {
136
+ pair: `${srcToken.address.toLowerCase()}/${destToken.address.toLowerCase()}`,
137
+ side,
138
+ book: invertedBook,
139
+ targetQuote: side == constants_1.SwapSide.BUY,
140
+ },
141
+ ];
142
+ }
143
+ for (const middleToken of config_1.BebopConfig['Bebop'][this.network].middleTokens) {
144
+ const baseMiddle = prices[`${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`];
145
+ const quoteMiddle = prices[`${destToken.address.toLowerCase()}/${middleToken.toLowerCase()}`];
146
+ if (baseMiddle && quoteMiddle) {
147
+ if (side == constants_1.SwapSide.SELL) {
148
+ return [
149
+ {
150
+ pair: `${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`,
151
+ side: side,
152
+ book: baseMiddle,
153
+ targetQuote: false,
154
+ },
155
+ {
156
+ pair: `${middleToken.toLowerCase()}/${destToken.address.toLowerCase()}`,
157
+ side: side,
158
+ book: this.invertBook(quoteMiddle),
159
+ targetQuote: false,
160
+ },
161
+ ];
162
+ }
163
+ else {
164
+ return [
165
+ {
166
+ pair: `${middleToken.toLowerCase()}/${destToken.address.toLowerCase()}`,
167
+ side: side,
168
+ book: this.invertBook(quoteMiddle),
169
+ targetQuote: true,
170
+ },
171
+ {
172
+ pair: `${srcToken.address.toLowerCase()}/${middleToken.toLowerCase()}`,
173
+ side: side,
174
+ book: baseMiddle,
175
+ targetQuote: true,
176
+ },
177
+ ];
178
+ }
179
+ }
180
+ }
181
+ return [];
182
+ }
183
+ // Returns list of pool identifiers that can be used
184
+ // for a given swap. poolIdentifiers must be unique
185
+ // across DEXes. It is recommended to use
186
+ // ${dexKey}_${poolAddress} as a poolIdentifier
187
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
188
+ if ((await this.calculateInstructions(srcToken, destToken, side)).length > 0) {
189
+ const identifier = this.getPoolIdentifier(srcToken.address, destToken.address);
190
+ return [identifier];
191
+ }
192
+ return [];
193
+ }
194
+ runInstruction(instruction, amount) {
195
+ let accumulated = (0, bignumber_js_1.default)(0);
196
+ let output = (0, bignumber_js_1.default)(0);
197
+ let filled = false;
198
+ for (const level of instruction.book.bids) {
199
+ const [price, size] = level;
200
+ const amountToAccumulate = instruction.targetQuote
201
+ ? (0, bignumber_js_1.default)(size).times(price)
202
+ : (0, bignumber_js_1.default)(size);
203
+ const afterAccumulated = accumulated.plus(amountToAccumulate);
204
+ if (afterAccumulated.lt(amount)) {
205
+ accumulated = accumulated.plus(amountToAccumulate);
206
+ const amountToAddToOutput = instruction.targetQuote
207
+ ? (0, bignumber_js_1.default)(size)
208
+ : (0, bignumber_js_1.default)(size).times(price);
209
+ output = output.plus(amountToAddToOutput);
210
+ if (accumulated.eq(amount)) {
211
+ filled = true;
212
+ break;
213
+ }
214
+ }
215
+ else {
216
+ const remaining = amount.minus(accumulated);
217
+ output = output.plus(instruction.targetQuote
218
+ ? remaining.div(price)
219
+ : remaining.times(price));
220
+ filled = true;
221
+ break;
222
+ }
223
+ }
224
+ if (filled) {
225
+ return output;
226
+ }
227
+ else {
228
+ return (0, bignumber_js_1.default)(0);
229
+ }
230
+ }
231
+ calculateOutput(instructions, srcToken, destToken, amounts, side) {
232
+ const outputs = [];
233
+ const inputDecimals = side == constants_1.SwapSide.SELL ? srcToken.decimals : destToken.decimals;
234
+ const outputDecimals = side == constants_1.SwapSide.SELL ? destToken.decimals : srcToken.decimals;
235
+ for (const amount of amounts) {
236
+ if (amount == 0n) {
237
+ outputs.push(0n);
238
+ continue;
239
+ }
240
+ const amountDecimals = (0, bignumber_js_1.default)(amount.toString()).div((0, bignumber_constants_1.getBigNumberPow)(inputDecimals));
241
+ let output = (0, bignumber_js_1.default)(0);
242
+ for (const instruction of instructions) {
243
+ output = this.runInstruction(instruction, output.gt(0) ? output : amountDecimals);
244
+ if (output.eq(0)) {
245
+ outputs.push(0n); // No liquidity at this size
246
+ continue;
247
+ }
248
+ }
249
+ if (output.gt(0)) {
250
+ outputs.push(BigInt(output.times((0, bignumber_constants_1.getBigNumberPow)(outputDecimals)).toFixed(0)));
251
+ }
252
+ }
253
+ return outputs;
254
+ }
255
+ // Returns pool prices for amounts.
256
+ // If limitPools is defined only pools in limitPools
257
+ // should be used. If limitPools is undefined then
258
+ // any pools can be used.
259
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
260
+ this.tokensMap = (await this.getCachedTokens()) || {};
261
+ try {
262
+ const pools = limitPools ??
263
+ (await this.getPoolIdentifiers(srcToken, destToken, side, blockNumber));
264
+ if (pools.length === 0) {
265
+ return null;
266
+ }
267
+ const instructions = await this.calculateInstructions(srcToken, destToken, side);
268
+ if (!instructions) {
269
+ return null;
270
+ }
271
+ const outputs = this.calculateOutput(instructions, srcToken, destToken, amounts, side);
272
+ // Up to 3bps deviation is expected in the output compared to the on-chain result
273
+ // On SwapSide.Sell, outputs compared to quoting are coming out: -0.1 bips -> USDC, -1 bips Alt -> Alt.
274
+ // On SwapSide.Buy, outputs compared to quoteing are coming out: 0.1 bips -> USDC, 1-3 bips Alt -> Alt.
275
+ const outDecimals = constants_1.SwapSide.SELL
276
+ ? destToken.decimals
277
+ : srcToken.decimals;
278
+ return [
279
+ {
280
+ prices: outputs,
281
+ unit: BigInt(outDecimals),
282
+ data: {},
283
+ poolIdentifier: pools[0],
284
+ exchange: this.dexKey,
285
+ gasCost: constants_2.BEBOP_GAS_COST,
286
+ poolAddresses: [this.settlementAddress],
287
+ },
288
+ ];
289
+ }
290
+ catch (e) {
291
+ this.logger.error(`Error_getPricesVolume ${srcToken.address || srcToken.symbol}, ${destToken.address || destToken.symbol}, ${side}:`, e);
292
+ return null;
293
+ }
294
+ }
295
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
296
+ getCalldataGasCost(poolPrices) {
297
+ // This relies heavily on exact quote. Can we note use Bebop Data to find this? either via pools or the data itself?
298
+ // This assumes that a single maker was used to fill this trade
299
+ // "order":{
300
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
301
+ // "expiry":"1725541751"
302
+ CALLDATA_GAS_COST.TIMESTAMP +
303
+ // "taker_address":"0x9008d19f58aabd9ed0d60971565aa8510560ab41"
304
+ CALLDATA_GAS_COST.ADDRESS +
305
+ // "maker_address":"0x807cf9a772d5a3f9cefbc1192e939d62f0d9bd38"
306
+ CALLDATA_GAS_COST.ADDRESS +
307
+ // "maker_nonce":"1725541661402362944"
308
+ CALLDATA_GAS_COST.UUID +
309
+ // "taker_token":"0x3429d03c6f7521aec737a0bbf2e5ddcef2c3ae31"
310
+ CALLDATA_GAS_COST.ADDRESS +
311
+ // "maker_token":"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
312
+ CALLDATA_GAS_COST.ADDRESS +
313
+ // "taker_amount":"3789033775358849793876"
314
+ CALLDATA_GAS_COST.AMOUNT +
315
+ // "maker_amount":"199726023273987970"
316
+ CALLDATA_GAS_COST.AMOUNT +
317
+ // "receiver":"0x9008d19f58aabd9ed0d60971565aa8510560ab41"
318
+ CALLDATA_GAS_COST.ADDRESS +
319
+ // "packed_commands":"0"
320
+ CALLDATA_GAS_COST.wordNonZeroBytes(4) +
321
+ // "flags":"103712057072216206793253728668500811363805133225332165859664901734817333248000"
322
+ CALLDATA_GAS_COST.FULL_WORD +
323
+ // }
324
+ // "makerSignature":{
325
+ // "signatureBytes":"0x34e1fbda1d48296949f0a003d4194646ed750a4ccd408b52979f60c2e7332207190a91600a40396b25fd645422dde85bc0ff53f26b66202a985ac8b9da87b47e1c"
326
+ CALLDATA_GAS_COST.FULL_WORD +
327
+ // "flags":"1"
328
+ CALLDATA_GAS_COST.LENGTH_SMALL +
329
+ // }
330
+ // "filledTakerAmount":"0"
331
+ CALLDATA_GAS_COST.AMOUNT);
332
+ }
333
+ // Encode params required by the exchange adapter
334
+ // V5: Used for multiSwap, buy & megaSwap
335
+ // V6: Not used, can be left blank
336
+ // Hint: abiCoder.encodeParameter() could be useful
337
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
338
+ const { tx } = data;
339
+ if (!tx) {
340
+ throw new Error('No tx in data');
341
+ }
342
+ // Encode here the payload for adapter
343
+ const payload = tx.data;
344
+ return {
345
+ targetExchange: this.settlementAddress,
346
+ payload,
347
+ networkFee: '0',
348
+ };
349
+ }
350
+ // This is called once before getTopPoolsForToken is
351
+ // called for multiple tokens. This can be helpful to
352
+ // update common state required for calculating
353
+ // getTopPoolsForToken. It is optional for a DEX
354
+ // to implement this
355
+ async updatePoolState() {
356
+ const tokens = await this.getCachedTokens();
357
+ if (tokens) {
358
+ this.tokensMap = tokens;
359
+ }
360
+ }
361
+ getMaxLiquidity(levels) {
362
+ return levels.reduce((acc, [price, size]) => {
363
+ return acc + price * size;
364
+ }, 0);
365
+ }
366
+ // Returns list of top pools based on liquidity. Max
367
+ // limit number pools should be returned.
368
+ async getTopPoolsForToken(tokenAddress, limit) {
369
+ const prices = await this.getCachedPrices();
370
+ if (!prices) {
371
+ return [];
372
+ }
373
+ const pools = [];
374
+ for (const [pair, pairData] of Object.entries(prices)) {
375
+ let liquidityUSD = 0;
376
+ let token;
377
+ const [base, quote] = pair.split('/');
378
+ if (base.toLowerCase() == tokenAddress.toLowerCase()) {
379
+ const liquidityInQuote = this.getMaxLiquidity(pairData.bids);
380
+ token = {
381
+ address: quote,
382
+ decimals: this.tokensMap[quote.toLowerCase()].decimals,
383
+ };
384
+ const quoteTokenUsd = await this.dexHelper.getTokenUSDPrice(token, BigInt(Math.round(liquidityInQuote)));
385
+ liquidityUSD = liquidityInQuote * quoteTokenUsd;
386
+ }
387
+ else if (quote.toLowerCase() == tokenAddress.toLowerCase()) {
388
+ const liquidityInBase = this.getMaxLiquidity(pairData.asks);
389
+ token = {
390
+ address: base,
391
+ decimals: this.tokensMap[base.toLowerCase()].decimals,
392
+ };
393
+ const baseTokenUsd = await this.dexHelper.getTokenUSDPrice(token, BigInt(Math.round(liquidityInBase)));
394
+ liquidityUSD = liquidityInBase * baseTokenUsd;
395
+ }
396
+ if (liquidityUSD) {
397
+ pools.push({
398
+ exchange: this.dexKey,
399
+ address: this.settlementAddress,
400
+ connectorTokens: [
401
+ {
402
+ address: quote,
403
+ decimals: this.tokensMap[quote.toLowerCase()].decimals,
404
+ symbol: this.tokensMap[quote.toLowerCase()].ticker,
405
+ },
406
+ ],
407
+ liquidityUSD,
408
+ });
409
+ }
410
+ }
411
+ return pools
412
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
413
+ .slice(0, limit);
414
+ }
415
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
416
+ const { tx } = data;
417
+ (0, ts_essentials_1.assert)(tx !== undefined, `${this.dexKey}-${this.network}: tx undefined`);
418
+ return {
419
+ exchangeData: tx.data,
420
+ needWrapNative: this.needWrapNative,
421
+ dexFuncHasRecipient: false,
422
+ targetExchange: this.settlementAddress,
423
+ returnAmountPos: undefined,
424
+ };
425
+ }
426
+ async preProcessTransaction(optimalSwapExchange, srcToken, destToken, side, options) {
427
+ const isSell = side === constants_1.SwapSide.SELL;
428
+ const isBuy = side === constants_1.SwapSide.BUY;
429
+ const params = {
430
+ sell_tokens: ethers_1.utils.getAddress(srcToken.address),
431
+ buy_tokens: ethers_1.utils.getAddress(destToken.address),
432
+ sell_amounts: isSell ? optimalSwapExchange.srcAmount : undefined,
433
+ buy_amounts: isBuy ? optimalSwapExchange.destAmount : undefined,
434
+ taker_address: ethers_1.utils.getAddress(options.executionContractAddress),
435
+ receiver_address: ethers_1.utils.getAddress(options.executionContractAddress),
436
+ gasless: false,
437
+ skip_validation: true,
438
+ source: constants_2.BEBOP_AUTH_NAME,
439
+ };
440
+ try {
441
+ const response = await this.dexHelper.httpRequest.get(`${constants_2.BEBOP_API_URL}/pmm/${config_1.BebopConfig['Bebop'][this.network].chainName}/v3/quote?${qs_1.default.stringify(params)}`, constants_2.BEBOP_QUOTE_TIMEOUT_MS, {
442
+ 'source-auth': this.bebopAuthToken,
443
+ });
444
+ if (!response) {
445
+ throw new Error('Failed to get quote');
446
+ }
447
+ if (!response.tx ||
448
+ !response.buyTokens ||
449
+ !response.sellTokens ||
450
+ !response.expiry) {
451
+ throw new Error('Failed to get quote. No tx info');
452
+ }
453
+ if (side == constants_1.SwapSide.SELL) {
454
+ const requiredAmount = BigInt(optimalSwapExchange.destAmount);
455
+ const quoteAmount = BigInt(response.buyTokens[ethers_1.utils.getAddress(destToken.address)].amount);
456
+ const requiredAmountWithSlippage = new bignumber_js_1.default(requiredAmount.toString())
457
+ .times(options.slippageFactor)
458
+ .toFixed(0);
459
+ if (quoteAmount < BigInt(requiredAmountWithSlippage)) {
460
+ throw new Error(`Slipped, factor: ${quoteAmount.toString()} < ${requiredAmountWithSlippage}`);
461
+ }
462
+ }
463
+ else {
464
+ const requiredAmount = BigInt(optimalSwapExchange.srcAmount);
465
+ const quoteAmount = BigInt(response.sellTokens[ethers_1.utils.getAddress(srcToken.address)].amount);
466
+ const requiredAmountWithSlippage = new bignumber_js_1.default(requiredAmount.toString())
467
+ .times(options.slippageFactor)
468
+ .toFixed(0);
469
+ if (quoteAmount > BigInt(requiredAmountWithSlippage)) {
470
+ throw new Error(`Slipped, factor: ${options.slippageFactor} ${quoteAmount.toString()} > ${requiredAmountWithSlippage}`);
471
+ }
472
+ }
473
+ return [
474
+ {
475
+ ...optimalSwapExchange,
476
+ data: {
477
+ ...response,
478
+ },
479
+ },
480
+ { deadline: BigInt(response.expiry) },
481
+ ];
482
+ }
483
+ catch (e) {
484
+ const message = `${this.dexKey}-${this.network}: ${e}`;
485
+ this.logger.error(message);
486
+ throw new Error(message);
487
+ }
488
+ }
489
+ async getCachedPrices() {
490
+ const cachedPrices = await this.dexHelper.cache.get(this.dexKey, this.network, this.pricesCacheKey);
491
+ if (cachedPrices) {
492
+ return JSON.parse(cachedPrices);
493
+ }
494
+ return null;
495
+ }
496
+ async getCachedTokens() {
497
+ const cachedTokens = await this.dexHelper.cache.get(this.dexKey, this.network, this.tokensAddrCacheKey);
498
+ if (cachedTokens) {
499
+ return JSON.parse(cachedTokens);
500
+ }
501
+ return null;
502
+ }
503
+ getTokenFromAddress(address) {
504
+ const bebopToken = this.tokensMap[address.toLowerCase()];
505
+ return {
506
+ address,
507
+ decimals: bebopToken.decimals,
508
+ symbol: bebopToken.ticker,
509
+ };
510
+ }
511
+ // This is optional function in case if your implementation has acquired any resources
512
+ // you need to release for graceful shutdown. For example, it may be any interval timer
513
+ releaseResources() {
514
+ if (!this.dexHelper.config.isSlave) {
515
+ this.rateFetcher.stop();
516
+ }
517
+ }
518
+ }
519
+ exports.Bebop = Bebop;
520
+ Bebop.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.BebopConfig);
521
+ const sleep = (time) => new Promise(resolve => {
522
+ setTimeout(resolve, time);
523
+ });
524
+ //# sourceMappingURL=bebop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bebop.js","sourceRoot":"","sources":["../../../src/dex/bebop/bebop.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAoD;AAepD,+CAAoD;AACpD,2EAA6D;AAC7D,uCAAoD;AAWpD,wGAAqE;AACrE,wDAAoD;AACpD,qCAAuC;AACvC,4CAA6C;AAC7C,iDAA6C;AAC7C,2CAUqB;AACrB,gEAAqC;AACrC,mEAA4D;AAC5D,mCAA+B;AAC/B,4CAAoB;AAEpB,MAAa,KAAM,SAAQ,gCAAc;IAoBvC,YACW,OAAgB,EAChB,MAAc,EACd,SAAqB,EACrB,oBAA4B,oBAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;SAC/D,iBAAiB,EACV,sBAAsB,IAAI,iBAAS,CAAC,kCAAa,CAAC;QAE5D,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAPhB,YAAO,GAAP,OAAO,CAAS;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAY;QACrB,sBAAiB,GAAjB,iBAAiB,CACN;QACV,wBAAmB,GAAnB,mBAAmB,CAA+B;QAzBrD,iCAA4B,GAAG,KAAK,CAAC;QACrC,mBAAc,GAAG,KAAK,CAAC;QAEvB,6BAAwB,GAAG,KAAK,CAAC;QAMlC,cAAS,GAAiB,EAAE,CAAC;QAmBnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,aAAa,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE5B,IAAI,CAAC,WAAW,GAAG,IAAI,0BAAW,CAChC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX;YACE,UAAU,EAAE;gBACV,gBAAgB,EAAE,4CAAgC;gBAClD,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,kBAAkB,EAAE,kCAAsB;gBAC1C,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,kBAAkB,EAAE,kCAAsB;gBAC1C,eAAe,EAAE;oBACf,GAAG,EACD,yBAAa;wBACb,QAAQ,oBAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,gBAAgB;iBAClE;gBACD,eAAe,EAAE;oBACf,GAAG,EACD,4BAAgB;wBAChB,QAAQ,oBAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,aAAa;oBAC9D,OAAO,EAAE;wBACP,IAAI,EAAE,2BAAe;wBACrB,aAAa,EAAE,IAAI,CAAC,cAAc;qBACnC;iBACF;aACF;SACF,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,CAAC,iCAAqB,CAAC,CAAC;SACpC;IACH,CAAC;IAED,yDAAyD;IACzD,wDAAwD;IACxD,WAAW,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,KAAa;QAC3C,MAAM,UAAU,GAAG,GACjB,IAAI,CAAC,MACP,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,MAAoB;QAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,UAAU,CAAC,IAAe;QACxB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,qBAAqB,CACzB,QAAe,EACf,SAAgB,EAChB,IAAc;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SACxC;QACD,MAAM,UAAU,GACd,MAAM,CACJ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CACvE,CAAC;QACJ,IAAI,UAAU,EAAE;YACd,OAAO;gBACL;oBACE,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;oBAC5E,IAAI;oBACJ,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE,IAAI,IAAI,oBAAQ,CAAC,GAAG;iBAClC;aACF,CAAC;SACH;QAED,MAAM,WAAW,GACf,MAAM,CACJ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CACvE,CAAC;QACJ,IAAI,WAAW,EAAE;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAClD,OAAO;gBACL;oBACE,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;oBAC5E,IAAI;oBACJ,IAAI,EAAE,YAAY;oBAClB,WAAW,EAAE,IAAI,IAAI,oBAAQ,CAAC,GAAG;iBAClC;aACF,CAAC;SACH;QAED,KAAK,MAAM,WAAW,IAAI,oBAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE;YACzE,MAAM,UAAU,GACd,MAAM,CACJ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,CACjE,CAAC;YACJ,MAAM,WAAW,GACf,MAAM,CACJ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,CAClE,CAAC;YACJ,IAAI,UAAU,IAAI,WAAW,EAAE;gBAC7B,IAAI,IAAI,IAAI,oBAAQ,CAAC,IAAI,EAAE;oBACzB,OAAO;wBACL;4BACE,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE;4BACtE,IAAI,EAAE,IAAI;4BACV,IAAI,EAAE,UAAU;4BAChB,WAAW,EAAE,KAAK;yBACnB;wBACD;4BACE,IAAI,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;4BACvE,IAAI,EAAE,IAAI;4BACV,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;4BAClC,WAAW,EAAE,KAAK;yBACnB;qBACF,CAAC;iBACH;qBAAM;oBACL,OAAO;wBACL;4BACE,IAAI,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;4BACvE,IAAI,EAAE,IAAI;4BACV,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;4BAClC,WAAW,EAAE,IAAI;yBAClB;wBACD;4BACE,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE;4BACtE,IAAI,EAAE,IAAI;4BACV,IAAI,EAAE,UAAU;4BAChB,WAAW,EAAE,IAAI;yBAClB;qBACF,CAAC;iBACH;aACF;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,oDAAoD;IACpD,mDAAmD;IACnD,yCAAyC;IACzC,+CAA+C;IAC/C,KAAK,CAAC,kBAAkB,CACtB,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,WAAmB;QAEnB,IACE,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EACxE;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACvC,QAAQ,CAAC,OAAO,EAChB,SAAS,CAAC,OAAO,CAClB,CAAC;YACF,OAAO,CAAC,UAAU,CAAC,CAAC;SACrB;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,cAAc,CACZ,WAA+B,EAC/B,MAAiB;QAEjB,IAAI,WAAW,GAAG,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,MAAM,GAAG,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;YACzC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;YAC5B,MAAM,kBAAkB,GAAG,WAAW,CAAC,WAAW;gBAChD,CAAC,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9B,CAAC,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC;YACpB,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC9D,IAAI,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;gBAC/B,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACnD,MAAM,mBAAmB,GAAG,WAAW,CAAC,WAAW;oBACjD,CAAC,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC;oBACjB,CAAC,CAAC,IAAA,sBAAS,EAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAC1C,IAAI,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE;oBAC1B,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;iBACP;aACF;iBAAM;gBACL,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,GAAG,MAAM,CAAC,IAAI,CAClB,WAAW,CAAC,WAAW;oBACrB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAC3B,CAAC;gBACF,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;aACP;SACF;QACD,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;aAAM;YACL,OAAO,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;SACrB;IACH,CAAC;IAED,eAAe,CACb,YAAkC,EAClC,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc;QAEd,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,aAAa,GACjB,IAAI,IAAI,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QACjE,MAAM,cAAc,GAClB,IAAI,IAAI,oBAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IAAI,MAAM,IAAI,EAAE,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,SAAS;aACV;YACD,MAAM,cAAc,GAAG,IAAA,sBAAS,EAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CACrD,IAAA,qCAAe,EAAC,aAAa,CAAC,CAC/B,CAAC;YACF,IAAI,MAAM,GAAc,IAAA,sBAAS,EAAC,CAAC,CAAC,CAAC;YACrC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;gBACtC,MAAM,GAAG,IAAI,CAAC,cAAc,CAC1B,WAAW,EACX,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CACvC,CAAC;gBACF,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;oBAC9C,SAAS;iBACV;aACF;YACD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,IAAI,CACV,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,qCAAe,EAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;aACH;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,mCAAmC;IACnC,oDAAoD;IACpD,kDAAkD;IAClD,yBAAyB;IACzB,KAAK,CAAC,eAAe,CACnB,QAAe,EACf,SAAgB,EAChB,OAAiB,EACjB,IAAc,EACd,WAAmB,EACnB,UAAqB;QAErB,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC;QAEtD,IAAI;YACF,MAAM,KAAK,GACT,UAAU;gBACV,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;YAE1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,OAAO,IAAI,CAAC;aACb;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CACnD,QAAQ,EACR,SAAS,EACT,IAAI,CACL,CAAC;YAEF,IAAI,CAAC,YAAY,EAAE;gBACjB,OAAO,IAAI,CAAC;aACb;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAClC,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,IAAI,CACL,CAAC;YAEF,iFAAiF;YACjF,wGAAwG;YACxG,uGAAuG;YAEvG,MAAM,WAAW,GAAG,oBAAQ,CAAC,IAAI;gBAC/B,CAAC,CAAC,SAAS,CAAC,QAAQ;gBACpB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAEtB,OAAO;gBACL;oBACE,MAAM,EAAE,OAAO;oBACf,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC;oBACzB,IAAI,EAAE,EAAE;oBACR,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;oBACxB,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,OAAO,EAAE,0BAAc;oBACvB,aAAa,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBACxC;aACF,CAAC;SACH;QAAC,OAAO,CAAU,EAAE;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAC1D,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,MACjC,KAAK,IAAI,GAAG,EACZ,CAAC,CACF,CAAC;YACF,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,mEAAmE;IACnE,kBAAkB,CAAC,UAAiC;QAClD,oHAAoH;QACpH,+DAA+D;QAC/D,YAAY;QACZ,OAAO,CACL,iBAAiB,CAAC,YAAY;YAC9B,wBAAwB;YACxB,iBAAiB,CAAC,SAAS;YAC3B,+DAA+D;YAC/D,iBAAiB,CAAC,OAAO;YACzB,+DAA+D;YAC/D,iBAAiB,CAAC,OAAO;YACzB,sCAAsC;YACtC,iBAAiB,CAAC,IAAI;YACtB,6DAA6D;YAC7D,iBAAiB,CAAC,OAAO;YACzB,6DAA6D;YAC7D,iBAAiB,CAAC,OAAO;YACzB,0CAA0C;YAC1C,iBAAiB,CAAC,MAAM;YACxB,sCAAsC;YACtC,iBAAiB,CAAC,MAAM;YACxB,0DAA0D;YAC1D,iBAAiB,CAAC,OAAO;YACzB,wBAAwB;YACxB,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACrC,2FAA2F;YAC3F,iBAAiB,CAAC,SAAS;YAC3B,IAAI;YACJ,qBAAqB;YACrB,0JAA0J;YAC1J,iBAAiB,CAAC,SAAS;YAC3B,cAAc;YACd,iBAAiB,CAAC,YAAY;YAC9B,IAAI;YACJ,0BAA0B;YAC1B,iBAAiB,CAAC,MAAM,CACzB,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,yCAAyC;IACzC,kCAAkC;IAClC,mDAAmD;IACnD,eAAe,CACb,QAAgB,EAChB,SAAiB,EACjB,SAAiB,EACjB,UAAkB,EAClB,IAAe,EACf,IAAc;QAEd,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;SAClC;QAED,sCAAsC;QACtC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;QAExB,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,iBAAiB;YACtC,OAAO;YACP,UAAU,EAAE,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,qDAAqD;IACrD,+CAA+C;IAC/C,gDAAgD;IAChD,oBAAoB;IACpB,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;SACzB;IACH,CAAC;IAED,eAAe,CAAC,MAAoB;QAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YAC1C,OAAO,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;QAC5B,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAED,oDAAoD;IACpD,yCAAyC;IACzC,KAAK,CAAC,mBAAmB,CACvB,YAAqB,EACrB,KAAa;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,CAAC;SACX;QAED,MAAM,KAAK,GAAoB,EAAE,CAAC;QAElC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,KAAK,CAAC;YACV,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE;gBACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC7D,KAAK,GAAG;oBACN,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ;iBACvD,CAAC;gBACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CACzD,KAAK,EACL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CACrC,CAAC;gBACF,YAAY,GAAG,gBAAgB,GAAG,aAAa,CAAC;aACjD;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,YAAY,CAAC,WAAW,EAAE,EAAE;gBAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC5D,KAAK,GAAG;oBACN,OAAO,EAAE,IAAI;oBACb,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ;iBACtD,CAAC;gBACF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CACxD,KAAK,EACL,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CACpC,CAAC;gBACF,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;aAC/C;YACD,IAAI,YAAY,EAAE;gBAChB,KAAK,CAAC,IAAI,CAAC;oBACT,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,OAAO,EAAE,IAAI,CAAC,iBAAiB;oBAC/B,eAAe,EAAE;wBACf;4BACE,OAAO,EAAE,KAAK;4BACd,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ;4BACtD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM;yBACnD;qBACF;oBACD,YAAY;iBACb,CAAC,CAAC;aACJ;SACF;QAED,OAAO,KAAK;aACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;aAC/C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,WAAW,CACT,QAAiB,EACjB,SAAkB,EAClB,SAAyB,EACzB,UAA0B,EAC1B,SAAkB,EAClB,IAAe,EACf,IAAc;QAEd,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QAEpB,IAAA,sBAAM,EAAC,EAAE,KAAK,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC;QAEzE,OAAO;YACL,YAAY,EAAE,EAAE,CAAC,IAAI;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,mBAAmB,EAAE,KAAK;YAC1B,cAAc,EAAE,IAAI,CAAC,iBAAiB;YACtC,eAAe,EAAE,SAAS;SAC3B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,mBAAmD,EACnD,QAAe,EACf,SAAgB,EAChB,IAAc,EACd,OAAqC;QAErC,MAAM,MAAM,GAAG,IAAI,KAAK,oBAAQ,CAAC,IAAI,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,KAAK,oBAAQ,CAAC,GAAG,CAAC;QAEpC,MAAM,MAAM,GAAG;YACb,WAAW,EAAE,cAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC/C,UAAU,EAAE,cAAK,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;YAC/C,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAChE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC/D,aAAa,EAAE,cAAK,CAAC,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC;YACjE,gBAAgB,EAAE,cAAK,CAAC,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC;YACpE,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,2BAAe;SACxB,CAAC;QAEF,IAAI;YACF,MAAM,QAAQ,GAAc,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAC9D,GAAG,yBAAa,QACd,oBAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SACrC,aAAa,YAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EACnC,kCAAsB,EACtB;gBACE,aAAa,EAAE,IAAI,CAAC,cAAc;aACnC,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;YAED,IACE,CAAC,QAAQ,CAAC,EAAE;gBACZ,CAAC,QAAQ,CAAC,SAAS;gBACnB,CAAC,QAAQ,CAAC,UAAU;gBACpB,CAAC,QAAQ,CAAC,MAAM,EAChB;gBACA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACpD;YAED,IAAI,IAAI,IAAI,oBAAQ,CAAC,IAAI,EAAE;gBACzB,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;gBAC9D,MAAM,WAAW,GAAG,MAAM,CACxB,QAAQ,CAAC,SAAS,CAAC,cAAK,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAC/D,CAAC;gBACF,MAAM,0BAA0B,GAAG,IAAI,sBAAS,CAC9C,cAAc,CAAC,QAAQ,EAAE,CAC1B;qBACE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;qBAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,WAAW,GAAG,MAAM,CAAC,0BAA0B,CAAC,EAAE;oBACpD,MAAM,IAAI,KAAK,CACb,oBAAoB,WAAW,CAAC,QAAQ,EAAE,MAAM,0BAA0B,EAAE,CAC7E,CAAC;iBACH;aACF;iBAAM;gBACL,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBAC7D,MAAM,WAAW,GAAG,MAAM,CACxB,QAAQ,CAAC,UAAU,CAAC,cAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAC/D,CAAC;gBACF,MAAM,0BAA0B,GAAG,IAAI,sBAAS,CAC9C,cAAc,CAAC,QAAQ,EAAE,CAC1B;qBACE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;qBAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,WAAW,GAAG,MAAM,CAAC,0BAA0B,CAAC,EAAE;oBACpD,MAAM,IAAI,KAAK,CACb,oBACE,OAAO,CAAC,cACV,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,0BAA0B,EAAE,CAC7D,CAAC;iBACH;aACF;YACD,OAAO;gBACL;oBACE,GAAG,mBAAmB;oBACtB,IAAI,EAAE;wBACJ,GAAG,QAAQ;qBACZ;iBACF;gBACD,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;aACtC,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC1B;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,CACpB,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAyB,CAAC;SACzD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CACjD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,CACxB,CAAC;QAEF,IAAI,YAAY,EAAE;YAChB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAiB,CAAC;SACjD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,OAAgB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzD,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,uFAAuF;IACvF,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzB;IACH,CAAC;;AApqBH,sBAqqBC;AA/pBe,wBAAkB,GAC9B,IAAA,6BAAqB,EAAC,oBAAW,CAAC,CAAC;AAgqBvC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;IACpB,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ export declare const BebopConfig: DexConfigMap<DexParams>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BebopConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.BebopConfig = {
6
+ Bebop: {
7
+ [constants_1.Network.MAINNET]: {
8
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
9
+ chainName: 'ethereum',
10
+ middleTokens: [
11
+ '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
12
+ '0xdAC17F958D2ee523a2206206994597C13D831ec7',
13
+ '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH
14
+ ],
15
+ },
16
+ [constants_1.Network.ARBITRUM]: {
17
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
18
+ chainName: 'arbitrum',
19
+ middleTokens: [
20
+ '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',
21
+ '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
22
+ '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',
23
+ '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', // WETH
24
+ ],
25
+ },
26
+ [constants_1.Network.BASE]: {
27
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
28
+ chainName: 'base',
29
+ middleTokens: ['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'],
30
+ },
31
+ [constants_1.Network.OPTIMISM]: {
32
+ settlementAddress: '0xbbbbbBB520d69a9775E85b458C58c648259FAD5F',
33
+ chainName: 'optimism',
34
+ middleTokens: ['0x7F5c764cBc14f9669B88837ca1490cCa17c31607'],
35
+ },
36
+ },
37
+ };
38
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/bebop/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE7B,QAAA,WAAW,GAA4B;IAClD,KAAK,EAAE;QACL,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE;gBACZ,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C,EAAE,OAAO;aACtD;SACF;QACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE;gBACZ,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C,EAAE,OAAO;aACtD;SACF;QACD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;YACd,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,MAAM;YACjB,YAAY,EAAE,CAAC,4CAA4C,CAAC;SAC7D;QACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,iBAAiB,EAAE,4CAA4C;YAC/D,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,CAAC,4CAA4C,CAAC;SAC7D;KACF;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const BEBOP_INIT_TIMEOUT_MS = 5000;
2
+ export declare const BEBOP_PRICES_CACHE_TTL = 10;
3
+ export declare const BEBOP_TOKENS_CACHE_TTL = 60;
4
+ export declare const BEBOP_TOKENS_POLLING_INTERVAL_MS: number;
5
+ export declare const BEBOP_API_URL = "https://api.bebop.xyz";
6
+ export declare const BEBOP_WS_API_URL = "wss://api.bebop.xyz";
7
+ export declare const BEBOP_GAS_COST = 120000;
8
+ export declare const BEBOP_AUTH_NAME = "paraswap";
9
+ export declare const BEBOP_QUOTE_TIMEOUT_MS = 2000;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BEBOP_QUOTE_TIMEOUT_MS = exports.BEBOP_AUTH_NAME = exports.BEBOP_GAS_COST = exports.BEBOP_WS_API_URL = exports.BEBOP_API_URL = exports.BEBOP_TOKENS_POLLING_INTERVAL_MS = exports.BEBOP_TOKENS_CACHE_TTL = exports.BEBOP_PRICES_CACHE_TTL = exports.BEBOP_INIT_TIMEOUT_MS = void 0;
4
+ exports.BEBOP_INIT_TIMEOUT_MS = 5000;
5
+ exports.BEBOP_PRICES_CACHE_TTL = 10;
6
+ exports.BEBOP_TOKENS_CACHE_TTL = 60;
7
+ exports.BEBOP_TOKENS_POLLING_INTERVAL_MS = 30 * 1000;
8
+ exports.BEBOP_API_URL = 'https://api.bebop.xyz';
9
+ exports.BEBOP_WS_API_URL = 'wss://api.bebop.xyz';
10
+ exports.BEBOP_GAS_COST = 120000;
11
+ exports.BEBOP_AUTH_NAME = 'paraswap';
12
+ exports.BEBOP_QUOTE_TIMEOUT_MS = 2000;
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/bebop/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAC7B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7C,QAAA,aAAa,GAAG,uBAAuB,CAAC;AACxC,QAAA,gBAAgB,GAAG,qBAAqB,CAAC;AACzC,QAAA,cAAc,GAAG,MAAO,CAAC;AACzB,QAAA,eAAe,GAAG,UAAU,CAAC;AAC7B,QAAA,sBAAsB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Network } from '../../constants';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { Logger } from '../../types';
4
+ import { BebopRateFetcherConfig } from './types';
5
+ export declare class RateFetcher {
6
+ private dexHelper;
7
+ private dexKey;
8
+ private network;
9
+ private logger;
10
+ private pricesFetcher;
11
+ private pricesCacheKey;
12
+ private pricesCacheTTL;
13
+ private tokensFetcher;
14
+ private tokensAddrCacheKey;
15
+ private tokensCacheKey;
16
+ private tokensCacheTTL;
17
+ constructor(dexHelper: IDexHelper, dexKey: string, network: Network, logger: Logger, config: BebopRateFetcherConfig);
18
+ start(): void;
19
+ stop(): void;
20
+ private handleTokensResponse;
21
+ private handlePricesResponse;
22
+ }