@paraswap/dex-lib 3.8.23 → 3.8.25

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 (53) hide show
  1. package/build/abi/infusion/InfusionFactory.json +147 -0
  2. package/build/abi/infusion/InfusionPair.json +658 -0
  3. package/build/abi/infusion/InfusionRouter.json +442 -0
  4. package/build/dex/index.js +4 -0
  5. package/build/dex/index.js.map +1 -1
  6. package/build/dex/infusion/config.d.ts +3 -0
  7. package/build/dex/infusion/config.js +20 -0
  8. package/build/dex/infusion/config.js.map +1 -0
  9. package/build/dex/infusion/infusion-stable-pool.d.ts +4 -0
  10. package/build/dex/infusion/infusion-stable-pool.js +74 -0
  11. package/build/dex/infusion/infusion-stable-pool.js.map +1 -0
  12. package/build/dex/infusion/infusion.d.ts +51 -0
  13. package/build/dex/infusion/infusion.js +457 -0
  14. package/build/dex/infusion/infusion.js.map +1 -0
  15. package/build/dex/infusion/types.d.ts +45 -0
  16. package/build/dex/infusion/types.js +3 -0
  17. package/build/dex/infusion/types.js.map +1 -0
  18. package/build/dex/infusion/utils/isStablePair.d.ts +2 -0
  19. package/build/dex/infusion/utils/isStablePair.js +18 -0
  20. package/build/dex/infusion/utils/isStablePair.js.map +1 -0
  21. package/build/dex/lite-psm/lite-psm.js +2 -5
  22. package/build/dex/lite-psm/lite-psm.js.map +1 -1
  23. package/build/dex/maker-psm/maker-psm.js +2 -6
  24. package/build/dex/maker-psm/maker-psm.js.map +1 -1
  25. package/build/dex/oswap/oswap-pool.js +8 -8
  26. package/build/dex/oswap/oswap-pool.js.map +1 -1
  27. package/build/dex/oswap/oswap.d.ts +5 -5
  28. package/build/dex/oswap/oswap.js +62 -46
  29. package/build/dex/oswap/oswap.js.map +1 -1
  30. package/build/dex/oswap/types.d.ts +4 -4
  31. package/package.json +1 -1
  32. package/src/abi/infusion/InfusionFactory.json +147 -0
  33. package/src/abi/infusion/InfusionPair.json +658 -0
  34. package/src/abi/infusion/InfusionRouter.json +442 -0
  35. package/src/abi/oswap/oswap.abi.json +452 -0
  36. package/src/dex/index.ts +4 -0
  37. package/src/dex/infusion/config.ts +21 -0
  38. package/src/dex/infusion/infusion-e2e.test.ts +110 -0
  39. package/src/dex/infusion/infusion-integration.test.ts +232 -0
  40. package/src/dex/infusion/infusion-stable-pool.ts +91 -0
  41. package/src/dex/infusion/infusion.ts +652 -0
  42. package/src/dex/infusion/types.ts +60 -0
  43. package/src/dex/infusion/utils/isStablePair.ts +18 -0
  44. package/src/dex/lite-psm/lite-psm.ts +2 -5
  45. package/src/dex/maker-psm/maker-psm.ts +2 -6
  46. package/src/dex/oswap/config.ts +32 -0
  47. package/src/dex/oswap/oswap-e2e.test.ts +91 -0
  48. package/src/dex/oswap/oswap-events.test.ts +88 -0
  49. package/src/dex/oswap/oswap-integration.test.ts +291 -0
  50. package/src/dex/oswap/oswap-pool.ts +190 -0
  51. package/src/dex/oswap/oswap.ts +414 -0
  52. package/src/dex/oswap/types.ts +29 -0
  53. package/tests/constants-e2e.ts +1 -1
@@ -0,0 +1,51 @@
1
+ import { UniswapV2 } from '../uniswap-v2/uniswap-v2';
2
+ import { Network } from '../../constants';
3
+ import { AdapterExchangeParam, Address, DexExchangeParam, ExchangePrices, PoolLiquidity, Token, TransferFeeParams } from '../../types';
4
+ import { IDexHelper } from '../../dex-helper';
5
+ import { NumberAsString, SwapSide } from '@paraswap/core';
6
+ import { PoolState, InfusionData, InfusionPair, InfusionPoolOrderedParams } from './types';
7
+ export declare enum InfusionRouterFunctions {
8
+ sellExactEth = "swapExactETHForTokens",
9
+ sellExactToken = "swapExactTokensForETH",
10
+ swapExactIn = "swapExactTokensForTokens"
11
+ }
12
+ export declare class Infusion extends UniswapV2 {
13
+ protected network: Network;
14
+ protected dexHelper: IDexHelper;
15
+ pairs: {
16
+ [key: string]: InfusionPair;
17
+ };
18
+ stableFee?: number;
19
+ volatileFee?: number;
20
+ readonly isFeeOnTransferSupported: boolean;
21
+ readonly SRC_TOKEN_DEX_TRANSFERS = 1;
22
+ readonly DEST_TOKEN_DEX_TRANSFERS = 1;
23
+ static dexKeysWithNetwork: {
24
+ key: string;
25
+ networks: Network[];
26
+ }[];
27
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, isDynamicFees?: boolean, factoryAddress?: Address, subgraphURL?: string, initCode?: string, feeCode?: number, poolGasCost?: number, routerAddress?: Address);
28
+ findInfusionPair(from: Token, to: Token, stable: boolean): Promise<InfusionPair | null>;
29
+ batchCatchUpPairs(pairs: [Token, Token][], blockNumber: number): Promise<void>;
30
+ getManyPoolReserves(pairs: InfusionPair[], blockNumber: number): Promise<PoolState[]>;
31
+ getSellPrice(priceParams: InfusionPoolOrderedParams, srcAmount: bigint): Promise<bigint>;
32
+ getPricesVolume(_from: Token, _to: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[], transferFees?: TransferFeeParams): Promise<ExchangePrices<InfusionData> | null>;
33
+ getTopPoolsForToken(tokenAddress: Address, count: number): Promise<PoolLiquidity[]>;
34
+ getInfusionPairOrderedParams(from: Token, to: Token, blockNumber: number, stable: boolean, tokenDexTransferFee: number): Promise<InfusionPoolOrderedParams | null>;
35
+ getPoolIdentifiers(_from: Token, _to: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
36
+ poolPostfix(stable: boolean): "S" | "V";
37
+ getAdapters(side: SwapSide): {
38
+ name: string;
39
+ index: number;
40
+ }[] | null;
41
+ getAdapterParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, toAmount: NumberAsString, // required for buy case
42
+ data: InfusionData, side: SwapSide): AdapterExchangeParam;
43
+ getDexParam(src: Address, dest: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: InfusionData, side: SwapSide): DexExchangeParam;
44
+ protected getFeesMultiCallData(pair: InfusionPair): {
45
+ callEntry: {
46
+ target: string;
47
+ callData: string;
48
+ };
49
+ callDecoder: (values: any[]) => number;
50
+ };
51
+ }
@@ -0,0 +1,457 @@
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.Infusion = exports.InfusionRouterFunctions = void 0;
7
+ const uniswap_v2_1 = require("../uniswap-v2/uniswap-v2");
8
+ const constants_1 = require("../../constants");
9
+ const erc20_json_1 = __importDefault(require("../../abi/erc20.json"));
10
+ const utils_1 = require("../../utils");
11
+ const InfusionFactory_json_1 = __importDefault(require("../../abi/infusion/InfusionFactory.json"));
12
+ const InfusionPair_json_1 = __importDefault(require("../../abi/infusion/InfusionPair.json"));
13
+ const InfusionRouter_json_1 = __importDefault(require("../../abi/infusion/InfusionRouter.json"));
14
+ const lodash_1 = __importDefault(require("lodash"));
15
+ const core_1 = require("@paraswap/core");
16
+ const abi_1 = require("@ethersproject/abi");
17
+ const infusion_stable_pool_1 = require("./infusion-stable-pool");
18
+ const uniswap_v2_constant_product_pool_1 = require("../uniswap-v2/uniswap-v2-constant-product-pool");
19
+ const config_1 = require("./config");
20
+ const token_transfer_fee_1 = require("../../lib/token-transfer-fee");
21
+ const isStablePair_1 = require("./utils/isStablePair");
22
+ var InfusionRouterFunctions;
23
+ (function (InfusionRouterFunctions) {
24
+ InfusionRouterFunctions["sellExactEth"] = "swapExactETHForTokens";
25
+ InfusionRouterFunctions["sellExactToken"] = "swapExactTokensForETH";
26
+ InfusionRouterFunctions["swapExactIn"] = "swapExactTokensForTokens";
27
+ })(InfusionRouterFunctions = exports.InfusionRouterFunctions || (exports.InfusionRouterFunctions = {}));
28
+ const VelodromeFactoryABI = [
29
+ {
30
+ inputs: [{ internalType: 'bool', name: '_stable', type: 'bool' }],
31
+ name: 'getFee',
32
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
33
+ stateMutability: 'view',
34
+ type: 'function',
35
+ },
36
+ ];
37
+ const velodromeFactoryIface = new abi_1.Interface(VelodromeFactoryABI);
38
+ const erc20Iface = new abi_1.Interface(erc20_json_1.default);
39
+ const infusionPairIface = new abi_1.Interface(InfusionPair_json_1.default);
40
+ const defaultAbiCoder = new abi_1.AbiCoder();
41
+ class Infusion extends uniswap_v2_1.UniswapV2 {
42
+ constructor(network, dexKey, dexHelper, isDynamicFees = true, factoryAddress, subgraphURL, initCode, feeCode, poolGasCost, routerAddress) {
43
+ super(network, dexKey, dexHelper, isDynamicFees, factoryAddress !== undefined
44
+ ? factoryAddress
45
+ : config_1.InfusionConfig[dexKey][network].factoryAddress, subgraphURL === ''
46
+ ? undefined
47
+ : subgraphURL !== undefined
48
+ ? subgraphURL
49
+ : config_1.InfusionConfig[dexKey][network].subgraphURL, initCode !== undefined
50
+ ? initCode
51
+ : config_1.InfusionConfig[dexKey][network].initCode, feeCode !== undefined ? feeCode : config_1.InfusionConfig[dexKey][network].feeCode, poolGasCost !== undefined
52
+ ? poolGasCost
53
+ : config_1.InfusionConfig[dexKey][network].poolGasCost, infusionPairIface);
54
+ this.network = network;
55
+ this.dexHelper = dexHelper;
56
+ this.pairs = {};
57
+ this.isFeeOnTransferSupported = true;
58
+ this.SRC_TOKEN_DEX_TRANSFERS = 1;
59
+ this.DEST_TOKEN_DEX_TRANSFERS = 1;
60
+ this.stableFee = config_1.InfusionConfig[dexKey][network].stableFee;
61
+ this.volatileFee = config_1.InfusionConfig[dexKey][network].volatileFee;
62
+ this.factory = new dexHelper.web3Provider.eth.Contract(InfusionFactory_json_1.default, factoryAddress !== undefined
63
+ ? factoryAddress
64
+ : config_1.InfusionConfig[dexKey][network].factoryAddress);
65
+ this.router =
66
+ routerAddress !== undefined
67
+ ? routerAddress
68
+ : config_1.InfusionConfig[dexKey][network].router || '';
69
+ this.feeFactor =
70
+ config_1.InfusionConfig[dexKey][network].feeFactor || this.feeFactor;
71
+ }
72
+ async findInfusionPair(from, to, stable) {
73
+ if (from.address.toLowerCase() === to.address.toLowerCase())
74
+ return null;
75
+ const [token0, token1] = from.address.toLowerCase() < to.address.toLowerCase()
76
+ ? [from, to]
77
+ : [to, from];
78
+ const typePostfix = this.poolPostfix(stable);
79
+ const key = `${token0.address.toLowerCase()}-${token1.address.toLowerCase()}-${typePostfix}`;
80
+ let pair = this.pairs[key];
81
+ if (pair)
82
+ return pair;
83
+ let exchange = await this.factory.methods
84
+ // Infusion has additional boolean parameter "StablePool"
85
+ // At first we look for uniswap-like volatile pool
86
+ .getPair(token0.address, token1.address, stable)
87
+ .call();
88
+ if (exchange === constants_1.NULL_ADDRESS) {
89
+ pair = { token0, token1, stable };
90
+ }
91
+ else {
92
+ pair = { token0, token1, exchange, stable };
93
+ }
94
+ this.pairs[key] = pair;
95
+ return pair;
96
+ }
97
+ async batchCatchUpPairs(pairs, blockNumber) {
98
+ if (!blockNumber)
99
+ return;
100
+ const pairsToFetch = [];
101
+ for (const _pair of pairs) {
102
+ const pairs = await Promise.all([
103
+ this.findInfusionPair(_pair[0], _pair[1], true),
104
+ this.findInfusionPair(_pair[0], _pair[1], false),
105
+ ]);
106
+ for (const pair of pairs) {
107
+ if (!(pair && pair.exchange))
108
+ continue;
109
+ if (!pair.pool) {
110
+ pairsToFetch.push(pair);
111
+ }
112
+ else if (!pair.pool.getState(blockNumber)) {
113
+ pairsToFetch.push(pair);
114
+ }
115
+ }
116
+ }
117
+ if (!pairsToFetch.length)
118
+ return;
119
+ const reserves = await this.getManyPoolReserves(pairsToFetch, blockNumber);
120
+ if (reserves.length !== pairsToFetch.length) {
121
+ this.logger.error(`Error_getManyPoolReserves didn't get any pool reserves`);
122
+ }
123
+ for (let i = 0; i < pairsToFetch.length; i++) {
124
+ const pairState = reserves[i];
125
+ const pair = pairsToFetch[i];
126
+ if (!pair.pool) {
127
+ await this.addPool(pair, pairState.reserves0, pairState.reserves1, pairState.feeCode, blockNumber);
128
+ }
129
+ else
130
+ pair.pool.setState(pairState, blockNumber);
131
+ }
132
+ }
133
+ async getManyPoolReserves(pairs, blockNumber) {
134
+ try {
135
+ const multiCallFeeData = pairs.map(pair => this.getFeesMultiCallData(pair));
136
+ const calldata = pairs
137
+ .map((pair, i) => {
138
+ let calldata = [
139
+ {
140
+ target: pair.token0.address,
141
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
142
+ pair.exchange,
143
+ ]),
144
+ },
145
+ {
146
+ target: pair.token1.address,
147
+ callData: erc20Iface.encodeFunctionData('balanceOf', [
148
+ pair.exchange,
149
+ ]),
150
+ },
151
+ ];
152
+ if (this.isDynamicFees)
153
+ calldata.push(multiCallFeeData[i].callEntry);
154
+ return calldata;
155
+ })
156
+ .flat();
157
+ const data = await this.dexHelper.multiContract.methods
158
+ .aggregate(calldata)
159
+ .call({}, blockNumber);
160
+ const returnData = lodash_1.default.chunk(data.returnData, this.isDynamicFees ? 3 : 2);
161
+ return pairs.map((pair, i) => ({
162
+ reserves0: defaultAbiCoder
163
+ .decode(['uint256'], returnData[i][0])[0]
164
+ .toString(),
165
+ reserves1: defaultAbiCoder
166
+ .decode(['uint256'], returnData[i][1])[0]
167
+ .toString(),
168
+ feeCode: this.isDynamicFees
169
+ ? multiCallFeeData[i].callDecoder(returnData[i][2])
170
+ : (pair.stable ? this.stableFee : this.volatileFee) || this.feeCode,
171
+ }));
172
+ }
173
+ catch (e) {
174
+ this.logger.error(`Error_getManyPoolReserves could not get reserves with error:`, e);
175
+ return [];
176
+ }
177
+ }
178
+ async getSellPrice(priceParams, srcAmount) {
179
+ return priceParams.stable
180
+ ? infusion_stable_pool_1.InfusionStablePool.getSellPrice(priceParams, srcAmount, this.feeFactor)
181
+ : uniswap_v2_constant_product_pool_1.Uniswapv2ConstantProductPool.getSellPrice(priceParams, srcAmount, this.feeFactor);
182
+ }
183
+ async getPricesVolume(_from, _to, amounts, side, blockNumber,
184
+ // list of pool identifiers to use for pricing, if undefined use all pools
185
+ limitPools, transferFees = {
186
+ srcFee: 0,
187
+ destFee: 0,
188
+ srcDexFee: 0,
189
+ destDexFee: 0,
190
+ }) {
191
+ try {
192
+ if (side === core_1.SwapSide.BUY)
193
+ return null; // Buy side not implemented yet
194
+ const from = this.dexHelper.config.wrapETH(_from);
195
+ const to = this.dexHelper.config.wrapETH(_to);
196
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
197
+ return null;
198
+ }
199
+ const tokenAddress = [
200
+ from.address.toLowerCase(),
201
+ to.address.toLowerCase(),
202
+ ]
203
+ .sort((a, b) => (a > b ? 1 : -1))
204
+ .join('_');
205
+ await this.batchCatchUpPairs([[from, to]], blockNumber);
206
+ const resultPromises = [false, true].map(async (stable) => {
207
+ // We don't support fee on transfer for stable pools yet
208
+ if (stable &&
209
+ (transferFees.srcFee !== 0 || transferFees.srcDexFee !== 0)) {
210
+ return null;
211
+ }
212
+ const poolIdentifier = `${this.dexKey}_${tokenAddress}` + this.poolPostfix(stable);
213
+ if (limitPools && limitPools.every(p => p !== poolIdentifier))
214
+ return null;
215
+ const isSell = side === core_1.SwapSide.SELL;
216
+ const pairParam = await this.getInfusionPairOrderedParams(from, to, blockNumber, stable, transferFees.srcDexFee);
217
+ if (!pairParam)
218
+ return null;
219
+ const unitAmount = (0, utils_1.getBigIntPow)(from.decimals);
220
+ const [unitVolumeWithFee, ...amountsWithFee] = (0, token_transfer_fee_1.applyTransferFee)([unitAmount, ...amounts], side, isSell ? transferFees.srcFee : transferFees.destFee, isSell ? constants_1.SRC_TOKEN_PARASWAP_TRANSFERS : constants_1.DEST_TOKEN_PARASWAP_TRANSFERS);
221
+ const unit = await this.getSellPricePath(unitVolumeWithFee, [
222
+ pairParam,
223
+ ]);
224
+ const prices = await Promise.all(amountsWithFee.map(amount => amount === 0n ? 0n : this.getSellPricePath(amount, [pairParam])));
225
+ const [unitOutWithFee, ...outputsWithFee] = (0, token_transfer_fee_1.applyTransferFee)([unit, ...prices], side,
226
+ // This part is confusing, because we treat differently SELL and BUY fees
227
+ // If Buy, we should apply transfer fee on srcToken on top of dexFee applied earlier
228
+ // But for Sell we should apply only one dexFee
229
+ isSell ? transferFees.destDexFee : transferFees.srcFee, isSell ? this.DEST_TOKEN_DEX_TRANSFERS : constants_1.SRC_TOKEN_PARASWAP_TRANSFERS);
230
+ return {
231
+ prices: outputsWithFee,
232
+ unit: unitOutWithFee,
233
+ data: {
234
+ router: this.router,
235
+ path: [from.address.toLowerCase(), to.address.toLowerCase()],
236
+ factory: this.factoryAddress,
237
+ initCode: this.initCode,
238
+ feeFactor: this.feeFactor,
239
+ isFeeTokenInRoute: Object.values(transferFees).some(f => f !== 0),
240
+ pools: [
241
+ {
242
+ address: pairParam.exchange,
243
+ fee: parseInt(pairParam.fee),
244
+ direction: pairParam.direction,
245
+ },
246
+ ],
247
+ },
248
+ exchange: this.dexKey,
249
+ poolIdentifier,
250
+ gasCost: this.poolGasCost,
251
+ poolAddresses: [pairParam.exchange],
252
+ };
253
+ });
254
+ const resultPools = (await Promise.all(resultPromises));
255
+ const resultPoolsFiltered = resultPools.filter(item => !!item); // filter null elements
256
+ return resultPoolsFiltered.length > 0 ? resultPoolsFiltered : null;
257
+ }
258
+ catch (e) {
259
+ if (blockNumber === 0)
260
+ this.logger.error(`Error_getPricesVolume: Aurelius block manager not yet instantiated`);
261
+ this.logger.error(`Error_getPrices:`, e);
262
+ return null;
263
+ }
264
+ }
265
+ async getTopPoolsForToken(tokenAddress, count) {
266
+ if (!this.subgraphURL)
267
+ return [];
268
+ let stableFieldKey = 'isStable';
269
+ const query = `query ($token: Bytes!, $count: Int) {
270
+ pools0: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token0: $token, reserve0_gt: 1, reserve1_gt: 1}) {
271
+ id
272
+ ${stableFieldKey}
273
+ token0 {
274
+ id
275
+ decimals
276
+ }
277
+ token1 {
278
+ id
279
+ decimals
280
+ }
281
+ reserveUSD
282
+ }
283
+ pools1: pairs(first: $count, orderBy: reserveUSD, orderDirection: desc, where: {token1: $token, reserve0_gt: 1, reserve1_gt: 1}) {
284
+ id
285
+ ${stableFieldKey}
286
+ token0 {
287
+ id
288
+ decimals
289
+ }
290
+ token1 {
291
+ id
292
+ decimals
293
+ }
294
+ reserveUSD
295
+ }
296
+ }`;
297
+ const { data } = await this.dexHelper.httpRequest.post(this.subgraphURL, {
298
+ query,
299
+ variables: { token: tokenAddress.toLowerCase(), count },
300
+ }, constants_1.SUBGRAPH_TIMEOUT);
301
+ if (!(data && data.pools0 && data.pools1))
302
+ throw new Error("Couldn't fetch the pools from the subgraph");
303
+ const pools0 = lodash_1.default.map(data.pools0, pool => ({
304
+ exchange: this.dexKey,
305
+ stable: pool[stableFieldKey],
306
+ address: pool.id.toLowerCase(),
307
+ connectorTokens: [
308
+ {
309
+ address: pool.token1.id.toLowerCase(),
310
+ decimals: parseInt(pool.token1.decimals),
311
+ },
312
+ ],
313
+ liquidityUSD: parseFloat(pool.reserveUSD),
314
+ }));
315
+ const pools1 = lodash_1.default.map(data.pools1, pool => ({
316
+ exchange: this.dexKey,
317
+ stable: pool[stableFieldKey],
318
+ address: pool.id.toLowerCase(),
319
+ connectorTokens: [
320
+ {
321
+ address: pool.token0.id.toLowerCase(),
322
+ decimals: parseInt(pool.token0.decimals),
323
+ },
324
+ ],
325
+ liquidityUSD: parseFloat(pool.reserveUSD),
326
+ }));
327
+ return lodash_1.default.slice(lodash_1.default.sortBy(lodash_1.default.concat(pools0, pools1), [pool => -1 * pool.liquidityUSD]), 0, count);
328
+ }
329
+ // Same as at uniswap-v2-pool.json, but extended with decimals and stable
330
+ async getInfusionPairOrderedParams(from, to, blockNumber, stable, tokenDexTransferFee) {
331
+ const pair = await this.findInfusionPair(from, to, stable);
332
+ if (!(pair && pair.pool && pair.exchange))
333
+ return null;
334
+ const pairState = pair?.pool.getState(blockNumber);
335
+ if (!pairState) {
336
+ this.logger.error(`Error_orderPairParams expected reserves, got none (maybe the pool doesn't exist) ${from.symbol || from.address} ${to.symbol || to.address}`);
337
+ return null;
338
+ }
339
+ const fee = (pairState.feeCode + tokenDexTransferFee).toString();
340
+ const pairReversed = pair.token1.address.toLowerCase() === from.address.toLowerCase();
341
+ if (pairReversed) {
342
+ return {
343
+ tokenIn: from.address,
344
+ tokenOut: to.address,
345
+ reservesIn: pairState.reserves1,
346
+ reservesOut: pairState.reserves0,
347
+ fee,
348
+ direction: false,
349
+ exchange: pair.exchange,
350
+ decimalsIn: from.decimals,
351
+ decimalsOut: to.decimals,
352
+ stable,
353
+ };
354
+ }
355
+ return {
356
+ tokenIn: from.address,
357
+ tokenOut: to.address,
358
+ reservesIn: pairState.reserves0,
359
+ reservesOut: pairState.reserves1,
360
+ fee,
361
+ direction: true,
362
+ exchange: pair.exchange,
363
+ decimalsIn: from.decimals,
364
+ decimalsOut: to.decimals,
365
+ stable,
366
+ };
367
+ }
368
+ async getPoolIdentifiers(_from, _to, side, blockNumber) {
369
+ if (side === core_1.SwapSide.BUY)
370
+ return [];
371
+ const from = this.dexHelper.config.wrapETH(_from);
372
+ const to = this.dexHelper.config.wrapETH(_to);
373
+ if (from.address.toLowerCase() === to.address.toLowerCase()) {
374
+ return [];
375
+ }
376
+ const tokenAddress = [from.address.toLowerCase(), to.address.toLowerCase()]
377
+ .sort((a, b) => (a > b ? 1 : -1))
378
+ .join('_');
379
+ const poolIdentifier = `${this.dexKey}_${tokenAddress}`;
380
+ const poolIdentifierUniswap = poolIdentifier + this.poolPostfix(false);
381
+ const poolIdentifierStable = poolIdentifier + this.poolPostfix(true);
382
+ return [poolIdentifierUniswap, poolIdentifierStable];
383
+ }
384
+ poolPostfix(stable) {
385
+ return stable ? 'S' : 'V';
386
+ }
387
+ getAdapters(side) {
388
+ return null;
389
+ }
390
+ getAdapterParam(srcToken, destToken, srcAmount, toAmount, // required for buy case
391
+ data, side) {
392
+ return {
393
+ targetExchange: data.router,
394
+ payload: '',
395
+ networkFee: '0',
396
+ };
397
+ }
398
+ getDexParam(src, dest, srcAmount, destAmount, recipient, data, side) {
399
+ if (side === core_1.SwapSide.BUY)
400
+ throw new Error(`Buy not supported`);
401
+ let routerMethod;
402
+ let routerArgs;
403
+ const stable = (0, isStablePair_1.isStablePair)(this.network, src, dest);
404
+ const from = (0, utils_1.isETHAddress)(src)
405
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
406
+ : src;
407
+ const to = (0, utils_1.isETHAddress)(dest)
408
+ ? this.dexHelper.config.data.wrappedNativeTokenAddress
409
+ : dest;
410
+ routerMethod = (0, utils_1.isETHAddress)(src)
411
+ ? InfusionRouterFunctions.sellExactEth
412
+ : InfusionRouterFunctions.swapExactIn;
413
+ routerMethod = (0, utils_1.isETHAddress)(dest)
414
+ ? InfusionRouterFunctions.sellExactToken
415
+ : routerMethod;
416
+ routerArgs = (0, utils_1.isETHAddress)(src)
417
+ ? [
418
+ destAmount,
419
+ [{ from, to, stable }],
420
+ recipient,
421
+ Math.floor(new Date().getTime() / 1000) + 120,
422
+ ]
423
+ : [
424
+ srcAmount,
425
+ destAmount,
426
+ [{ from, to, stable }],
427
+ recipient,
428
+ Math.floor(new Date().getTime() / 1000) + 120,
429
+ ];
430
+ const exchangeData = new abi_1.Interface(InfusionRouter_json_1.default).encodeFunctionData(routerMethod, routerArgs);
431
+ return {
432
+ needWrapNative: this.needWrapNative,
433
+ dexFuncHasRecipient: true,
434
+ exchangeData,
435
+ targetExchange: data.router,
436
+ returnAmountPos: undefined,
437
+ };
438
+ }
439
+ getFeesMultiCallData(pair) {
440
+ const callEntry = {
441
+ target: this.factoryAddress,
442
+ callData: velodromeFactoryIface.encodeFunctionData('getFee', [
443
+ pair.stable,
444
+ ]),
445
+ };
446
+ const callDecoder = (values) => parseInt(velodromeFactoryIface
447
+ .decodeFunctionResult('getFee', values)[0]
448
+ .toString());
449
+ return {
450
+ callEntry,
451
+ callDecoder,
452
+ };
453
+ }
454
+ }
455
+ exports.Infusion = Infusion;
456
+ Infusion.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(lodash_1.default.pick(config_1.InfusionConfig, ['Infusion']));
457
+ //# sourceMappingURL=infusion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infusion.js","sourceRoot":"","sources":["../../../src/dex/infusion/infusion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { UniswapV2Data, UniswapV2PoolOrderedParams, DexParams as UniswapV2DexParams, UniswapPool } from '../uniswap-v2/types';
2
+ import { UniswapV2Pair } from '../uniswap-v2/uniswap-v2';
3
+ export declare type PoolState = {
4
+ reserves0: string;
5
+ reserves1: string;
6
+ feeCode: number;
7
+ };
8
+ export interface InfusionPoolOrderedParams extends UniswapV2PoolOrderedParams {
9
+ decimalsIn: number;
10
+ decimalsOut: number;
11
+ stable: boolean;
12
+ }
13
+ export declare type InfusionData = UniswapV2Data;
14
+ export declare type InfusionPool = UniswapPool;
15
+ export interface DexParams extends Omit<UniswapV2DexParams, 'feeCode'> {
16
+ feeCode: number;
17
+ stableFee?: number;
18
+ volatileFee?: number;
19
+ feeFactor?: number;
20
+ }
21
+ export interface InfusionPair extends UniswapV2Pair {
22
+ stable: boolean;
23
+ }
24
+ export declare type InfusionParam = SellOnInfusionParam | SellETHOnInfusionParam;
25
+ export declare type SellOnInfusionParam = [
26
+ amountIn: string,
27
+ amountOutMin: string,
28
+ routes: {
29
+ from: string;
30
+ to: string;
31
+ stable: boolean;
32
+ }[],
33
+ to: string,
34
+ deadline: number
35
+ ];
36
+ export declare type SellETHOnInfusionParam = [
37
+ amountOutMin: string,
38
+ routes: {
39
+ from: string;
40
+ to: string;
41
+ stable: boolean;
42
+ }[],
43
+ to: string,
44
+ deadline: number
45
+ ];
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/infusion/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare const stablecoins: Record<number, string[]>;
2
+ export declare function isStablePair(chainId: number, tokenA: string, tokenB: string): boolean;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStablePair = exports.stablecoins = void 0;
4
+ const constants_1 = require("../../../constants");
5
+ exports.stablecoins = {
6
+ [constants_1.Network.BASE]: [
7
+ '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'.toLowerCase(),
8
+ '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'.toLowerCase(),
9
+ '0xEB466342C4d449BC9f53A865D5Cb90586f405215'.toLowerCase(), // axelar usdc
10
+ ],
11
+ };
12
+ function isStablePair(chainId, tokenA, tokenB) {
13
+ const stables = exports.stablecoins[chainId];
14
+ return (stables.includes(tokenA.toLocaleLowerCase()) &&
15
+ stables.includes(tokenB.toLocaleLowerCase()));
16
+ }
17
+ exports.isStablePair = isStablePair;
18
+ //# sourceMappingURL=isStablePair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isStablePair.js","sourceRoot":"","sources":["../../../../src/dex/infusion/utils/isStablePair.ts"],"names":[],"mappings":";;;AAAA,kDAA6C;AAEhC,QAAA,WAAW,GAA6B;IACnD,CAAC,mBAAO,CAAC,IAAI,CAAC,EAAE;QACd,4CAA4C,CAAC,WAAW,EAAE;QAC1D,4CAA4C,CAAC,WAAW,EAAE;QAC1D,4CAA4C,CAAC,WAAW,EAAE,EAAE,cAAc;KAC3E;CACF,CAAC;AAEF,SAAgB,YAAY,CAAC,OAAe,EAAE,MAAc,EAAE,MAAc;IAC1E,MAAM,OAAO,GAAG,mBAAW,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAC7C,CAAC;AACJ,CAAC;AAPD,oCAOC"}
@@ -167,7 +167,7 @@ class LitePsm extends simple_exchange_1.SimpleExchange {
167
167
  },
168
168
  poolAddresses: [eventPool.poolConfig.psmAddress],
169
169
  exchange: this.dexKey,
170
- gasCost: isSrcDai ? 80000 : 100000,
170
+ gasCost: 50000,
171
171
  poolIdentifier,
172
172
  },
173
173
  ];
@@ -290,10 +290,7 @@ class LitePsm extends simple_exchange_1.SimpleExchange {
290
290
  // not used on the contract, but used for analytics
291
291
  destToken,
292
292
  fromAmount,
293
- // TODO: Investigate `toAmount` vs `quotedAmount`
294
- side === constants_1.SwapSide.BUY && srcToken.toLowerCase() === this.dai.address
295
- ? toAmount
296
- : quotedAmount,
293
+ toAmount,
297
294
  data.toll,
298
295
  to18ConversionFactor.toString(),
299
296
  data.psmAddress,