@paraswap/dex-lib 3.8.37 → 3.8.38

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 (46) hide show
  1. package/build/abi/cables/CablesMainnetRFQ.json +1073 -0
  2. package/build/dex/cables/cables.d.ts +64 -0
  3. package/build/dex/cables/cables.js +445 -0
  4. package/build/dex/cables/cables.js.map +1 -0
  5. package/build/dex/cables/config.d.ts +4 -0
  6. package/build/dex/cables/config.js +15 -0
  7. package/build/dex/cables/config.js.map +1 -0
  8. package/build/dex/cables/constants.d.ts +19 -0
  9. package/build/dex/cables/constants.js +26 -0
  10. package/build/dex/cables/constants.js.map +1 -0
  11. package/build/dex/cables/rate-fetcher.d.ts +34 -0
  12. package/build/dex/cables/rate-fetcher.js +117 -0
  13. package/build/dex/cables/rate-fetcher.js.map +1 -0
  14. package/build/dex/cables/types.d.ts +106 -0
  15. package/build/dex/cables/types.js +12 -0
  16. package/build/dex/cables/types.js.map +1 -0
  17. package/build/dex/cables/validators.d.ts +5 -0
  18. package/build/dex/cables/validators.js +49 -0
  19. package/build/dex/cables/validators.js.map +1 -0
  20. package/build/dex/spark/config.js +25 -0
  21. package/build/dex/spark/config.js.map +1 -1
  22. package/build/dex/spark/scripts/validate-state.js +1 -1
  23. package/build/dex/spark/scripts/validate-state.js.map +1 -1
  24. package/build/dex/spark/spark-sdai-pool.d.ts +7 -3
  25. package/build/dex/spark/spark-sdai-pool.js +24 -28
  26. package/build/dex/spark/spark-sdai-pool.js.map +1 -1
  27. package/build/dex/spark/spark.d.ts +10 -5
  28. package/build/dex/spark/spark.js +46 -31
  29. package/build/dex/spark/spark.js.map +1 -1
  30. package/build/dex/spark/types.d.ts +6 -0
  31. package/build/dex/spark/types.js.map +1 -1
  32. package/build/dex/spark/utils.d.ts +3 -1
  33. package/build/dex/spark/utils.js +43 -7
  34. package/build/dex/spark/utils.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/abi/sdai/SavingsUSDS.abi.json +720 -0
  37. package/src/dex/spark/config.ts +24 -0
  38. package/src/dex/spark/scripts/validate-state.ts +1 -0
  39. package/src/dex/spark/spark-e2e.test.ts +25 -21
  40. package/src/dex/spark/spark-events.test.ts +77 -62
  41. package/src/dex/spark/spark-integration.test.ts +290 -7
  42. package/src/dex/spark/spark-sdai-pool.ts +22 -19
  43. package/src/dex/spark/spark.ts +62 -36
  44. package/src/dex/spark/types.ts +6 -0
  45. package/src/dex/spark/utils.ts +83 -19
  46. package/tests/constants-e2e.ts +5 -0
@@ -0,0 +1,64 @@
1
+ import { Address, NumberAsString, OptimalSwapExchange, SwapSide } from '@paraswap/core';
2
+ import { AsyncOrSync } from 'ts-essentials';
3
+ import { Network } from '../../constants';
4
+ import { IDexHelper } from '../../dex-helper';
5
+ import { AdapterExchangeParam, DexExchangeParam, ExchangePrices, ExchangeTxInfo, Logger, PoolLiquidity, PoolPrices, PreprocessTransactionOptions, Token, TransferFeeParams } from '../../types';
6
+ import { IDex } from '../idex';
7
+ import { SimpleExchange } from '../simple-exchange';
8
+ import { CablesData } from './types';
9
+ import { Interface } from 'ethers/lib/utils';
10
+ export declare class Cables extends SimpleExchange implements IDex<any> {
11
+ readonly network: Network;
12
+ readonly dexKey: string;
13
+ readonly dexHelper: IDexHelper;
14
+ readonly mainnetRFQAddress: string;
15
+ protected rfqInterface: Interface;
16
+ static dexKeysWithNetwork: {
17
+ key: string;
18
+ networks: Network[];
19
+ }[];
20
+ private rateFetcher;
21
+ logger: Logger;
22
+ private tokensMap;
23
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, mainnetRFQAddress?: string, rfqInterface?: Interface);
24
+ hasConstantPriceLargeAmounts: boolean;
25
+ needsSequentialPreprocessing?: boolean | undefined;
26
+ getNetworkFee?(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, data: CablesData, side: SwapSide): NumberAsString;
27
+ preProcessTransaction?(optimalSwapExchange: OptimalSwapExchange<CablesData>, srcToken: Token, destToken: Token, side: SwapSide, options: PreprocessTransactionOptions): Promise<[OptimalSwapExchange<CablesData>, ExchangeTxInfo]>;
28
+ getTokenFromAddress(address: Address): Token;
29
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: CablesData, side: SwapSide): DexExchangeParam;
30
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: CablesData, side: SwapSide): AdapterExchangeParam;
31
+ normalizeToken(token: Token): Token;
32
+ normalizeTokenAddress(address: Address): Address;
33
+ /**
34
+ * POOLS
35
+ */
36
+ getPoolIdentifier(srcAddress: Address, destAddress: Address, mm?: string): string;
37
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
38
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[], transferFees?: TransferFeeParams, isFirstSwap?: boolean): Promise<ExchangePrices<CablesData> | null>;
39
+ getCalldataGasCost(poolPrices: PoolPrices<CablesData>): number | number[];
40
+ initializePricing(blockNumber: number): Promise<void>;
41
+ getAdapters(side: SwapSide): {
42
+ name: string;
43
+ index: number;
44
+ }[] | null;
45
+ releaseResources?(): AsyncOrSync<void>;
46
+ addMasterPool?(poolKey: string, blockNumber: number): AsyncOrSync<boolean>;
47
+ /**
48
+ * Blacklist
49
+ */
50
+ isBlacklisted?(userAddress?: Address): AsyncOrSync<boolean>;
51
+ setBlacklist?(userAddress?: Address): AsyncOrSync<boolean>;
52
+ updatePoolState?(): AsyncOrSync<void>;
53
+ getTopPoolsForToken(tokenAddress: Address, limit: number): AsyncOrSync<PoolLiquidity[]>;
54
+ /**
55
+ * CACHED UTILS
56
+ */
57
+ getCachedTokens(): Promise<any>;
58
+ getCachedPairs(): Promise<any>;
59
+ getCachedPrices(): Promise<any>;
60
+ getCachedTokensAddr(): Promise<any>;
61
+ getPairString(baseToken: Token, quoteToken: Token): string;
62
+ private findKeyByAddress;
63
+ getPairData(srcToken: Token, destToken: Token): Promise<any>;
64
+ }
@@ -0,0 +1,445 @@
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.Cables = void 0;
30
+ const core_1 = require("@paraswap/core");
31
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
32
+ const ts_essentials_1 = require("ts-essentials");
33
+ const utils_1 = require("../../utils");
34
+ const simple_exchange_1 = require("../simple-exchange");
35
+ const config_1 = require("./config");
36
+ const constants_1 = require("./constants");
37
+ const rate_fetcher_1 = require("./rate-fetcher");
38
+ const CablesMainnetRFQ_json_1 = __importDefault(require("../../abi/cables/CablesMainnetRFQ.json"));
39
+ const utils_2 = require("ethers/lib/utils");
40
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
41
+ const ethers_1 = require("ethers");
42
+ const bigint_constants_1 = require("../../bigint-constants");
43
+ class Cables extends simple_exchange_1.SimpleExchange {
44
+ constructor(network, dexKey, dexHelper, mainnetRFQAddress = config_1.CablesConfig['Cables'][network]
45
+ .mainnetRFQAddress, rfqInterface = new utils_2.Interface(CablesMainnetRFQ_json_1.default)) {
46
+ super(dexHelper, dexKey);
47
+ this.network = network;
48
+ this.dexKey = dexKey;
49
+ this.dexHelper = dexHelper;
50
+ this.mainnetRFQAddress = mainnetRFQAddress;
51
+ this.rfqInterface = rfqInterface;
52
+ this.tokensMap = {};
53
+ this.hasConstantPriceLargeAmounts = false;
54
+ // Function to find a key by address
55
+ this.findKeyByAddress = (jsonData, targetAddress) => {
56
+ const entries = Object.entries(jsonData);
57
+ const foundEntry = entries.find(([_, value]) => value.address.toLowerCase() === targetAddress.toLowerCase());
58
+ return foundEntry ? foundEntry[0] : undefined;
59
+ };
60
+ this.logger = dexHelper.getLogger(dexKey);
61
+ this.rateFetcher = new rate_fetcher_1.CablesRateFetcher(this.dexHelper, this.dexKey, this.network, this.logger, {
62
+ rateConfig: {
63
+ pairsReqParams: {
64
+ url: constants_1.CABLES_API_URL + '/pairs',
65
+ // headers?: RequestHeaders;
66
+ // params?: any;
67
+ },
68
+ pricesReqParams: {
69
+ url: constants_1.CABLES_API_URL + '/prices',
70
+ // headers?: RequestHeaders;
71
+ // params?: any;
72
+ },
73
+ blacklistReqParams: {
74
+ url: constants_1.CABLES_API_URL + '/blacklist',
75
+ // headers?: RequestHeaders;
76
+ // params?: any;
77
+ },
78
+ tokensReqParams: {
79
+ url: constants_1.CABLES_API_URL + '/tokens',
80
+ // headers: undefined,
81
+ // params: undefined,
82
+ },
83
+ pricesIntervalMs: 2000,
84
+ pairsIntervalMs: 10000,
85
+ blacklistIntervalMs: 30000,
86
+ tokensIntervalMs: 30000,
87
+ pairsCacheKey: 'cablesPairsCacheKey',
88
+ pricesCacheKey: 'cablesPricesCacheKey',
89
+ tokensCacheKey: 'cablesTokensCacheKey',
90
+ blacklistCacheKey: 'cablesBlacklistCacheKey',
91
+ pairsCacheTTLSecs: 2,
92
+ pricesCacheTTLSecs: 10,
93
+ blacklistCacheTTLSecs: 30,
94
+ tokensCacheTTLSecs: 30,
95
+ },
96
+ });
97
+ }
98
+ getNetworkFee(srcToken, destToken, srcAmount, destAmount, data, side) {
99
+ throw new Error('Method not implemented.');
100
+ }
101
+ async preProcessTransaction(optimalSwapExchange, srcToken, destToken, side, options) {
102
+ if (BigInt(optimalSwapExchange.srcAmount) === 0n) {
103
+ throw new Error('getFirmRate failed with srcAmount === 0');
104
+ }
105
+ const normalizedSrcToken = this.normalizeToken(srcToken);
106
+ const normalizedDestToken = this.normalizeToken(destToken);
107
+ const swapIdentifier = `${this.dexKey}_${normalizedSrcToken.address}_${normalizedDestToken.address}_${side}`;
108
+ try {
109
+ const makerToken = normalizedDestToken;
110
+ const takerToken = normalizedSrcToken;
111
+ const isSell = side === core_1.SwapSide.SELL;
112
+ const isBuy = side === core_1.SwapSide.BUY;
113
+ const slippageBps = isSell
114
+ ? (0, bignumber_js_1.default)(1)
115
+ .minus(options.slippageFactor)
116
+ .multipliedBy(10000)
117
+ .toFixed(0)
118
+ : options.slippageFactor.minus(1).multipliedBy(10000).toFixed(0);
119
+ const rfqParams = {
120
+ makerAsset: ethers_1.ethers.utils.getAddress(makerToken.address),
121
+ takerAsset: ethers_1.ethers.utils.getAddress(takerToken.address),
122
+ ...(isBuy && { makerAmount: optimalSwapExchange.destAmount }),
123
+ ...(isSell && { takerAmount: optimalSwapExchange.srcAmount }),
124
+ userAddress: options.executionContractAddress,
125
+ chainId: String(this.network),
126
+ };
127
+ const rfq = await this.dexHelper.httpRequest.post(`${constants_1.CABLES_API_URL}/quote`, rfqParams, constants_1.CABLES_FIRM_QUOTE_TIMEOUT_MS, { 'x-apikey': 'TODO - API KEY' });
128
+ if (!rfq) {
129
+ throw new Error('Failed to fetch RFQ' +
130
+ swapIdentifier +
131
+ JSON.stringify(rfq + 'params' + rfqParams));
132
+ }
133
+ const { order } = rfq;
134
+ (0, ts_essentials_1.assert)(order.makerAsset.toLowerCase() === makerToken.address, `QuoteData makerAsset=${order.makerAsset} is different from Paraswap makerAsset=${makerToken.address}`);
135
+ (0, ts_essentials_1.assert)(order.takerAsset.toLowerCase() === takerToken.address, `QuoteData takerAsset=${order.takerAsset} is different from Paraswap takerAsset=${takerToken.address}`);
136
+ if (isSell) {
137
+ (0, ts_essentials_1.assert)(order.takerAmount === optimalSwapExchange.srcAmount, `QuoteData takerAmount=${order.takerAmount} is different from Paraswap srcAmount=${optimalSwapExchange.srcAmount}`);
138
+ }
139
+ else {
140
+ (0, ts_essentials_1.assert)(order.makerAmount === optimalSwapExchange.destAmount, `QuoteData makerAmount=${order.makerAmount} is different from Paraswap destAmount=${optimalSwapExchange.destAmount}`);
141
+ }
142
+ const expiryAsBigInt = BigInt(order.expiry);
143
+ const minDeadline = expiryAsBigInt > 0 ? expiryAsBigInt : bigint_constants_1.BI_MAX_UINT256;
144
+ return [
145
+ {
146
+ ...optimalSwapExchange,
147
+ data: {
148
+ quoteData: order,
149
+ },
150
+ },
151
+ { deadline: minDeadline },
152
+ ];
153
+ }
154
+ catch (e) {
155
+ throw e;
156
+ }
157
+ }
158
+ getTokenFromAddress(address) {
159
+ return this.tokensMap[this.normalizeTokenAddress(address)];
160
+ }
161
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
162
+ const { quoteData } = data;
163
+ (0, ts_essentials_1.assert)(quoteData !== undefined, `${this.dexKey}-${this.network}: quoteData undefined`);
164
+ const swapFunction = 'simpleSwap';
165
+ const swapFunctionParams = [
166
+ [
167
+ quoteData.nonceAndMeta,
168
+ quoteData.expiry,
169
+ quoteData.makerAsset,
170
+ quoteData.takerAsset,
171
+ quoteData.taker,
172
+ quoteData.makerAmount,
173
+ quoteData.takerAmount,
174
+ ],
175
+ quoteData.signature,
176
+ ];
177
+ const exchangeData = this.rfqInterface.encodeFunctionData(swapFunction, swapFunctionParams);
178
+ return {
179
+ exchangeData,
180
+ needWrapNative: this.needWrapNative,
181
+ dexFuncHasRecipient: false,
182
+ targetExchange: this.mainnetRFQAddress,
183
+ returnAmountPos: undefined,
184
+ };
185
+ }
186
+ getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
187
+ const { quoteData } = data;
188
+ (0, ts_essentials_1.assert)(quoteData !== undefined, `${this.dexKey}-${this.network}: quoteData undefined`);
189
+ const params = [
190
+ {
191
+ nonceAndMeta: quoteData.nonceAndMeta,
192
+ expiry: quoteData.expiry,
193
+ makerAsset: quoteData.makerAsset,
194
+ takerAsset: quoteData.takerAsset,
195
+ taker: quoteData.taker,
196
+ makerAmount: quoteData.makerAmount,
197
+ takerAmount: quoteData.takerAmount,
198
+ },
199
+ quoteData.signature,
200
+ ];
201
+ const payload = this.abiCoder.encodeParameter({
202
+ ParentStruct: {
203
+ order: {
204
+ nonceAndMeta: 'uint256',
205
+ expiry: 'uint128',
206
+ makerAsset: 'address',
207
+ takerAsset: 'address',
208
+ taker: 'address',
209
+ makerAmount: 'uint256',
210
+ takerAmount: 'uint256',
211
+ },
212
+ signature: 'bytes',
213
+ },
214
+ }, {
215
+ order: params[0],
216
+ signature: params[1],
217
+ });
218
+ return {
219
+ targetExchange: this.mainnetRFQAddress,
220
+ payload,
221
+ networkFee: '0',
222
+ };
223
+ }
224
+ normalizeToken(token) {
225
+ return {
226
+ ...token,
227
+ address: this.normalizeTokenAddress(token.address),
228
+ };
229
+ }
230
+ normalizeTokenAddress(address) {
231
+ return address.toLowerCase();
232
+ }
233
+ /**
234
+ * POOLS
235
+ */
236
+ getPoolIdentifier(srcAddress, destAddress, mm) {
237
+ return `${this.dexKey}_${srcAddress}_${destAddress}`.toLowerCase();
238
+ return `${this.dexKey}_${srcAddress}_${destAddress}_${mm}`.toLowerCase();
239
+ }
240
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
241
+ if (!srcToken || !destToken) {
242
+ return [];
243
+ }
244
+ const pairData = await this.getPairData(srcToken, destToken);
245
+ if (!pairData) {
246
+ return [];
247
+ }
248
+ const tokensAddr = (await this.getCachedTokensAddr()) || {};
249
+ return [
250
+ this.getPoolIdentifier(tokensAddr[pairData.base.toLowerCase()], tokensAddr[pairData.quote.toLowerCase()]),
251
+ ];
252
+ }
253
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools, transferFees, isFirstSwap) {
254
+ try {
255
+ const normalizedSrcToken = this.normalizeToken(srcToken);
256
+ const normalizedDestToken = this.normalizeToken(destToken);
257
+ // If: same token, return null
258
+ if (normalizedSrcToken.address === normalizedDestToken.address) {
259
+ return null;
260
+ }
261
+ // Ensure that "symbol" is set
262
+ const tokens = await this.getCachedTokens();
263
+ this.tokensMap = Object.keys(tokens).reduce((acc, key) => {
264
+ //@ts-ignore
265
+ acc[tokens[key].address.toLowerCase()] = tokens[key];
266
+ return acc;
267
+ }, {});
268
+ for (const symbol of Object.keys(tokens)) {
269
+ const normalizedTokenAddress = tokens[symbol].address.toLowerCase();
270
+ if (normalizedSrcToken.address === normalizedTokenAddress) {
271
+ normalizedSrcToken.symbol = tokens[symbol].symbol;
272
+ }
273
+ if (normalizedDestToken.address === normalizedTokenAddress) {
274
+ normalizedDestToken.symbol = tokens[symbol].symbol;
275
+ }
276
+ }
277
+ // ---------- Pools ----------
278
+ let pools = await this.getPoolIdentifiers(srcToken, destToken, side, blockNumber);
279
+ if (pools.length === 0)
280
+ return null;
281
+ // ---------- Prices ----------
282
+ const prices = await this.getCachedPrices();
283
+ if (!prices)
284
+ return null;
285
+ let pairKey = `${normalizedSrcToken.symbol}/${normalizedDestToken.symbol}`;
286
+ const pairsKeys = Object.keys(prices);
287
+ if (!pairsKeys.includes(pairKey)) {
288
+ // Revert
289
+ pairKey = `${normalizedDestToken.symbol}/${normalizedSrcToken.symbol}`;
290
+ if (!pairsKeys.includes(pairKey)) {
291
+ return null;
292
+ }
293
+ }
294
+ /**
295
+ * Orderbook
296
+ */
297
+ const priceData = prices[pairKey];
298
+ let orderbook = [];
299
+ if (side === core_1.SwapSide.BUY) {
300
+ orderbook = priceData.asks;
301
+ }
302
+ else {
303
+ orderbook = priceData.bids;
304
+ }
305
+ if (orderbook?.length === 0) {
306
+ throw new Error(`Empty orderbook for ${pairKey}`);
307
+ }
308
+ const orderPrice = 0;
309
+ const calculatedPrices = amounts.map(amount => {
310
+ // TOB OF BOOK FOR NOW
311
+ const price = (orderbook[0][0] *
312
+ 10 ** normalizedDestToken.decimals).toFixed();
313
+ return BigInt(price);
314
+ });
315
+ const outDecimals = side === core_1.SwapSide.BUY
316
+ ? normalizedSrcToken.decimals
317
+ : normalizedDestToken.decimals;
318
+ const result = [
319
+ {
320
+ prices: calculatedPrices,
321
+ unit: BigInt(outDecimals),
322
+ exchange: this.dexKey,
323
+ gasCost: constants_1.CABLES_GAS_COST,
324
+ orderPrice,
325
+ data: {},
326
+ },
327
+ ];
328
+ return result;
329
+ }
330
+ catch (e) {
331
+ this.logger.error(`Error in getPricesVolume`, {
332
+ srcToken: srcToken.address || srcToken.symbol,
333
+ destToken: destToken.address || destToken.symbol,
334
+ side,
335
+ }, e);
336
+ return null;
337
+ }
338
+ }
339
+ getCalldataGasCost(poolPrices) {
340
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
341
+ // addresses: makerAsset, takerAsset, maker, taker
342
+ CALLDATA_GAS_COST.ADDRESS * 4 +
343
+ // uint256: expiry
344
+ CALLDATA_GAS_COST.wordNonZeroBytes(16) +
345
+ // uint256: nonceAndMeta, makerAmount, takerAmount
346
+ CALLDATA_GAS_COST.AMOUNT * 3 +
347
+ // bytes: _signature (65 bytes)
348
+ CALLDATA_GAS_COST.FULL_WORD * 2 +
349
+ CALLDATA_GAS_COST.OFFSET_SMALL);
350
+ }
351
+ async initializePricing(blockNumber) {
352
+ if (!this.dexHelper.config.isSlave) {
353
+ this.rateFetcher.start();
354
+ }
355
+ return;
356
+ }
357
+ getAdapters(side) {
358
+ return null;
359
+ }
360
+ releaseResources() {
361
+ if (this.rateFetcher) {
362
+ this.rateFetcher.stop();
363
+ }
364
+ }
365
+ addMasterPool(poolKey, blockNumber) {
366
+ throw new Error('Method not implemented.');
367
+ }
368
+ /**
369
+ * Blacklist
370
+ */
371
+ isBlacklisted(userAddress) {
372
+ throw new Error('Method not implemented.');
373
+ }
374
+ setBlacklist(userAddress) {
375
+ throw new Error('Method not implemented.');
376
+ }
377
+ updatePoolState() {
378
+ throw new Error('Method not implemented.');
379
+ }
380
+ getTopPoolsForToken(tokenAddress, limit) {
381
+ throw new Error('Method not implemented.');
382
+ }
383
+ /**
384
+ * CACHED UTILS
385
+ */
386
+ async getCachedTokens() {
387
+ const cachedTokens = await this.dexHelper.cache.get(this.dexKey, this.network, this.rateFetcher.tokensCacheKey);
388
+ return cachedTokens ? JSON.parse(cachedTokens) : {};
389
+ }
390
+ async getCachedPairs() {
391
+ const cachedPairs = await this.dexHelper.cache.get(this.dexKey, this.network, this.rateFetcher.pairsCacheKey);
392
+ return cachedPairs ? JSON.parse(cachedPairs) : {};
393
+ }
394
+ async getCachedPrices() {
395
+ const cachedPrices = await this.dexHelper.cache.get(this.dexKey, this.network, this.rateFetcher.pricesCacheKey);
396
+ return cachedPrices ? JSON.parse(cachedPrices) : {};
397
+ }
398
+ async getCachedTokensAddr() {
399
+ const tokens = await this.getCachedTokens();
400
+ const tokensAddr = {};
401
+ for (const addr of Object.keys(tokens)) {
402
+ tokensAddr[tokens[addr].symbol.toLowerCase()] = addr;
403
+ }
404
+ return tokensAddr;
405
+ }
406
+ getPairString(baseToken, quoteToken) {
407
+ return `${baseToken.symbol}/${quoteToken.symbol}`.toLowerCase();
408
+ }
409
+ async getPairData(srcToken, destToken) {
410
+ const normalizedSrcToken = this.normalizeToken(srcToken);
411
+ const normalizedDestToken = this.normalizeToken(destToken);
412
+ if (normalizedSrcToken.address === normalizedDestToken.address) {
413
+ return null;
414
+ }
415
+ const cachedTokens = await this.getCachedTokens();
416
+ normalizedSrcToken.symbol = this.findKeyByAddress(cachedTokens, normalizedSrcToken.address);
417
+ normalizedDestToken.symbol = this.findKeyByAddress(cachedTokens, normalizedDestToken.address);
418
+ const cachedPairs = await this.getCachedPairs();
419
+ const potentialPairs = [
420
+ {
421
+ base: normalizedSrcToken.symbol,
422
+ quote: normalizedDestToken.symbol,
423
+ identifier: this.getPairString(normalizedSrcToken, normalizedDestToken),
424
+ isSrcBase: true,
425
+ },
426
+ {
427
+ base: normalizedDestToken.symbol,
428
+ quote: normalizedSrcToken.symbol,
429
+ identifier: this.getPairString(normalizedDestToken, normalizedSrcToken),
430
+ isSrcBase: false,
431
+ },
432
+ ];
433
+ for (const pair of potentialPairs) {
434
+ if (pair.identifier in cachedPairs) {
435
+ const pairData = cachedPairs[pair.identifier];
436
+ pairData.isSrcBase = pair.isSrcBase;
437
+ return pairData;
438
+ }
439
+ }
440
+ return null;
441
+ }
442
+ }
443
+ exports.Cables = Cables;
444
+ Cables.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.CablesConfig);
445
+ //# sourceMappingURL=cables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cables.js","sourceRoot":"","sources":["../../../src/dex/cables/cables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DexConfigMap } from '../../types';
2
+ export declare const CablesConfig: DexConfigMap<{
3
+ mainnetRFQAddress: string;
4
+ }>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CablesConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.CablesConfig = {
6
+ Cables: {
7
+ [constants_1.Network.AVALANCHE]: {
8
+ mainnetRFQAddress: '0xa274DC2569fa8574293F8B631C85d50232f7A3D6',
9
+ },
10
+ [constants_1.Network.ARBITRUM]: {
11
+ mainnetRFQAddress: '0x00C11C4b2a54a3742B96f55c0Fdd65f6e81a5B96',
12
+ },
13
+ },
14
+ };
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/cables/config.ts"],"names":[],"mappings":";;;AAAA,+CAA0C;AAG7B,QAAA,YAAY,GAAgD;IACvE,MAAM,EAAE;QACN,CAAC,mBAAO,CAAC,SAAS,CAAC,EAAE;YACnB,iBAAiB,EAAE,4CAA4C;SAChE;QACD,CAAC,mBAAO,CAAC,QAAQ,CAAC,EAAE;YAClB,iBAAiB,EAAE,4CAA4C;SAChE;KACF;CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import BigNumber from 'bignumber.js';
2
+ /**
3
+ * Cables
4
+ */
5
+ export declare const CABLES_API_URL = "https://cables-evm-rfq-service.cryptosrvc.com/v1";
6
+ export declare const CABLES_PRICES_CACHES_TTL_S = 3;
7
+ export declare const CABLES_API_PRICES_POLLING_INTERVAL_MS = 1000;
8
+ export declare const CABLES_PAIRS_CACHES_TTL_S: number;
9
+ export declare const CABLES_API_PAIRS_POLLING_INTERVAL_MS: number;
10
+ export declare const CABLES_BLACKLIST_CACHES_TTL_S: number;
11
+ export declare const CABLES_API_BLACKLIST_POLLING_INTERVAL_MS: number;
12
+ export declare const CABLES_TOKENS_CACHES_TTL_S: number;
13
+ export declare const CABLES_FIRM_QUOTE_TIMEOUT_MS = 2000;
14
+ export declare const CABLES_RATE_LIMITED_TTL_S: number;
15
+ export declare const CABLES_RATELIMIT_CACHE_VALUE = "limited";
16
+ export declare const CABLES_RESTRICT_TTL_S: number;
17
+ export declare const CABLES_RESTRICTED_CACHE_KEY = "restricted";
18
+ export declare const CABLES_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION: BigNumber;
19
+ export declare const CABLES_GAS_COST = 120000;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CABLES_GAS_COST = exports.CABLES_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION = exports.CABLES_RESTRICTED_CACHE_KEY = exports.CABLES_RESTRICT_TTL_S = exports.CABLES_RATELIMIT_CACHE_VALUE = exports.CABLES_RATE_LIMITED_TTL_S = exports.CABLES_FIRM_QUOTE_TIMEOUT_MS = exports.CABLES_TOKENS_CACHES_TTL_S = exports.CABLES_API_BLACKLIST_POLLING_INTERVAL_MS = exports.CABLES_BLACKLIST_CACHES_TTL_S = exports.CABLES_API_PAIRS_POLLING_INTERVAL_MS = exports.CABLES_PAIRS_CACHES_TTL_S = exports.CABLES_API_PRICES_POLLING_INTERVAL_MS = exports.CABLES_PRICES_CACHES_TTL_S = exports.CABLES_API_URL = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ /**
9
+ * Cables
10
+ */
11
+ exports.CABLES_API_URL = 'https://cables-evm-rfq-service.cryptosrvc.com/v1';
12
+ exports.CABLES_PRICES_CACHES_TTL_S = 3;
13
+ exports.CABLES_API_PRICES_POLLING_INTERVAL_MS = 1000; // 1 sec
14
+ exports.CABLES_PAIRS_CACHES_TTL_S = 10 * 60; // 10 mins
15
+ exports.CABLES_API_PAIRS_POLLING_INTERVAL_MS = 1000 * 60 * 10; // 10 mins
16
+ exports.CABLES_BLACKLIST_CACHES_TTL_S = 30 * 60; // 30 mins
17
+ exports.CABLES_API_BLACKLIST_POLLING_INTERVAL_MS = 1000 * 60 * 60; // 60 mins
18
+ exports.CABLES_TOKENS_CACHES_TTL_S = 10 * 60; // 10 mins
19
+ exports.CABLES_FIRM_QUOTE_TIMEOUT_MS = 2000;
20
+ exports.CABLES_RATE_LIMITED_TTL_S = 60 * 60; // 1 hour
21
+ exports.CABLES_RATELIMIT_CACHE_VALUE = 'limited';
22
+ exports.CABLES_RESTRICT_TTL_S = 60 * 30; // 30 minutes
23
+ exports.CABLES_RESTRICTED_CACHE_KEY = 'restricted';
24
+ exports.CABLES_MIN_SLIPPAGE_FACTOR_THRESHOLD_FOR_RESTRICTION = new bignumber_js_1.default('0.005');
25
+ exports.CABLES_GAS_COST = 120000;
26
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/cables/constants.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC;;GAEG;AACU,QAAA,cAAc,GACzB,kDAAkD,CAAC;AAExC,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,qCAAqC,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEtD,QAAA,yBAAyB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAC/C,QAAA,oCAAoC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAEjE,QAAA,6BAA6B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AACnD,QAAA,wCAAwC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAErE,QAAA,0BAA0B,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAChD,QAAA,4BAA4B,GAAG,IAAI,CAAC;AAEpC,QAAA,yBAAyB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;AAC9C,QAAA,4BAA4B,GAAG,SAAS,CAAC;AAEzC,QAAA,qBAAqB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,aAAa;AAC9C,QAAA,2BAA2B,GAAG,YAAY,CAAC;AAE3C,QAAA,oDAAoD,GAC/D,IAAI,sBAAS,CAAC,OAAO,CAAC,CAAC;AAEZ,QAAA,eAAe,GAAG,MAAO,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Network } from '../../constants';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { Fetcher } from '../../lib/fetcher/fetcher';
4
+ import { Logger } from '../../types';
5
+ import { CablesBlacklistResponse, CablesPairsResponse, CablesPricesResponse, CablesRateFetcherConfig, CablesTokensResponse } from './types';
6
+ export declare class CablesRateFetcher {
7
+ private dexHelper;
8
+ private dexKey;
9
+ private network;
10
+ private logger;
11
+ tokensFetcher: Fetcher<CablesTokensResponse>;
12
+ tokensCacheKey: string;
13
+ tokensCacheTTL: number;
14
+ pairsFetcher: Fetcher<CablesPairsResponse>;
15
+ pairsCacheKey: string;
16
+ pairsCacheTTL: number;
17
+ pricesFetcher: Fetcher<CablesPricesResponse>;
18
+ pricesCacheKey: string;
19
+ pricesCacheTTL: number;
20
+ blacklistFetcher: Fetcher<CablesBlacklistResponse>;
21
+ blacklistCacheKey: string;
22
+ blacklistCacheTTL: number;
23
+ constructor(dexHelper: IDexHelper, dexKey: string, network: Network, logger: Logger, config: CablesRateFetcherConfig);
24
+ /**
25
+ * Utils
26
+ */
27
+ start(): void;
28
+ stop(): void;
29
+ private handlePairsResponse;
30
+ private handlePricesResponse;
31
+ private handleBlacklistResponse;
32
+ private normalizeAddressesToLowerCase;
33
+ private handleTokensResponse;
34
+ }