@paraswap/dex-lib 2.14.6 → 2.14.7

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/.idea/codeStyles/codeStyleConfig.xml +5 -0
  2. package/.idea/misc.xml +6 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.vscode/launch.json +21 -0
  6. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  7. package/build/dex/aave-v3/tokens/avalanche.json +50 -0
  8. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  9. package/build/dex/aave-v3/tokens/mainnet.json +44 -0
  10. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  11. package/build/dex/aave-v3/tokens/polygon.json +98 -0
  12. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +79 -0
  13. package/build/dex/balancer-v2/VirtualBoostedPool.js +382 -0
  14. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +1 -0
  15. package/build/dex/test-aave-v3/config.d.ts +4 -0
  16. package/build/dex/test-aave-v3/config.js +15 -0
  17. package/build/dex/test-aave-v3/config.js.map +1 -0
  18. package/build/dex/test-aave-v3/test-aave-v3-pool.d.ts +39 -0
  19. package/build/dex/test-aave-v3/test-aave-v3-pool.js +63 -0
  20. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +1 -0
  21. package/build/dex/test-aave-v3/test-aave-v3.d.ts +37 -0
  22. package/build/dex/test-aave-v3/test-aave-v3.js +126 -0
  23. package/build/dex/test-aave-v3/test-aave-v3.js.map +1 -0
  24. package/build/dex/test-aave-v3/types.d.ts +6 -0
  25. package/build/dex/{maverick → test-aave-v3}/types.js.map +1 -1
  26. package/build/lib/fetcher/fetcher.js +7 -2
  27. package/build/lib/fetcher/fetcher.js.map +1 -1
  28. package/package.json +1 -1
  29. package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +26 -10
  30. package/src/lib/fetcher/fetcher.ts +11 -6
  31. package/tests/utils-e2e.ts +13 -13
  32. package/build/abi/maverick/pool.json +0 -913
  33. package/build/abi/maverick/router.json +0 -703
  34. package/build/dex/maverick/config.d.ts +0 -4
  35. package/build/dex/maverick/config.js +0 -20
  36. package/build/dex/maverick/config.js.map +0 -1
  37. package/build/dex/maverick/maverick-math/maverick-pool-math.d.ts +0 -67
  38. package/build/dex/maverick/maverick-math/maverick-pool-math.js +0 -406
  39. package/build/dex/maverick/maverick-math/maverick-pool-math.js.map +0 -1
  40. package/build/dex/maverick/maverick-math/maverick-sol-math.d.ts +0 -17
  41. package/build/dex/maverick/maverick-math/maverick-sol-math.js +0 -139
  42. package/build/dex/maverick/maverick-math/maverick-sol-math.js.map +0 -1
  43. package/build/dex/maverick/maverick-pool.d.ts +0 -41
  44. package/build/dex/maverick/maverick-pool.js +0 -130
  45. package/build/dex/maverick/maverick-pool.js.map +0 -1
  46. package/build/dex/maverick/maverick.d.ts +0 -42
  47. package/build/dex/maverick/maverick.js +0 -174
  48. package/build/dex/maverick/maverick.js.map +0 -1
  49. package/build/dex/maverick/subgraph-queries.d.ts +0 -4
  50. package/build/dex/maverick/subgraph-queries.js +0 -114
  51. package/build/dex/maverick/subgraph-queries.js.map +0 -1
  52. package/build/dex/maverick/types.d.ts +0 -46
  53. /package/build/dex/{maverick → test-aave-v3}/types.js +0 -0
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VirtualBoostedPool = void 0;
4
+ const address_1 = require("@ethersproject/address");
5
+ const LinearPool_1 = require("./LinearPool");
6
+ const PhantomStablePool_1 = require("./PhantomStablePool");
7
+ const balancer_v2_1 = require("./balancer-v2");
8
+ /*
9
+ VirtualBoostedPools are groups of pools that are connected in a pre-defined way.
10
+ Having a VirtualPool allows complexity of swapping between underlying tokens to be simplified/abstracted away as paths are already known and coded.
11
+ i.e. a VirtualBoostedPool exists consisting of Linear USDC/DAI/USDT pools connected with the bb-a-USDC PhantomStable, this VirtualPool shows its token list as USDC/DAI/USDT
12
+ */
13
+ class VirtualBoostedPool {
14
+ constructor(vaultAddress, vaultInterface, linearPoolInterface, metaStablePoolInterface) {
15
+ this.vaultAddress = vaultAddress;
16
+ this.vaultInterface = vaultInterface;
17
+ this.linearPoolInterface = linearPoolInterface;
18
+ this.phantomStablePoolInterface = metaStablePoolInterface;
19
+ }
20
+ /**
21
+ * Creates VirtualBoostedPools from list of input pools. A VirtualBoostedPool is a combination of Linear pools nested in a PhantomStable pool. i.e. bb-a-USD.
22
+ * @param pools Array of subgraph pools (should contain Phantom/Linear pools of interest)
23
+ * @returns Array of VirtualBoosted subgraph pools. Dictionary object of virtualBoosted pool data.
24
+ */
25
+ static createPools(pools) {
26
+ const subgraph = [];
27
+ const boostedPools = {};
28
+ const phantomPools = [];
29
+ const linearDict = {};
30
+ // Create an initial list of phantom pools and dictionary of Linear pools.
31
+ pools.forEach(p => {
32
+ // Covers ERC4626 & Aave Linear Pools
33
+ if (p.poolType.includes('Linear'))
34
+ linearDict[p.address] = p;
35
+ else if (p.poolType === balancer_v2_1.BalancerPoolTypes.StablePhantom) {
36
+ phantomPools.push(p);
37
+ }
38
+ });
39
+ // Create a boostedPool for each phantom that consists of Linear BPTs.
40
+ phantomPools.forEach(phantomPool => {
41
+ const mainTokens = [];
42
+ const isBoosted = phantomPool.tokens.every(t => {
43
+ if (t.address === phantomPool.address)
44
+ return true;
45
+ // Phantom pools contain their own BPT in tokens list
46
+ else if (linearDict[t.address]) {
47
+ // mainToken are the underlying mainTokens of the Linear Pools and will be seen as the tokens the VirtualPool contains.
48
+ // i.e.bb - a - USD VirtualBoostedPool will look like it has USDC, DAI, USDT and bb - a - USD_bpt
49
+ mainTokens.push({
50
+ address: linearDict[t.address].tokens[linearDict[t.address].mainIndex]
51
+ .address,
52
+ decimals: linearDict[t.address].tokens[linearDict[t.address].mainIndex]
53
+ .decimals,
54
+ linearPoolAddr: t.address,
55
+ linearPoolId: linearDict[t.address].id,
56
+ });
57
+ return true;
58
+ }
59
+ else
60
+ return false; // BoostedPools must consist of Phantom + Linear
61
+ });
62
+ if (isBoosted) {
63
+ // phantomStablePoolAddr is the PhantomStablePool connecting all LinearPools
64
+ boostedPools[phantomPool.id] = {
65
+ mainTokens,
66
+ phantomStablePoolAddr: phantomPool.address,
67
+ };
68
+ subgraph.push({
69
+ id: phantomPool.id + this.poolType.toLowerCase(),
70
+ address: phantomPool.address,
71
+ poolType: this.poolType,
72
+ tokens: mainTokens,
73
+ mainIndex: 0,
74
+ wrappedIndex: 0,
75
+ totalLiquidity: phantomPool.totalLiquidity,
76
+ });
77
+ }
78
+ });
79
+ return { dictionary: boostedPools, subgraph };
80
+ }
81
+ /*
82
+ Creates multicall data for a VirtualBoostedPool which can be passed to multicall contract.
83
+ Retrieves following onchain data:
84
+ PhantomStable - scaling factors, amp (assumes poolTokens and swapFee are constructed elsewhere)
85
+ LinearPools - (for each Linear Pool) pooltokens/balances, swapFee, scalingfactors, main/wrapped/bpt indices, targets
86
+ */
87
+ getOnChainCalls(pool, virtualBoostedPools) {
88
+ // Add calls for PhantomStable Pool
89
+ const poolCallData = [];
90
+ // Add pool tokens for upper PhantomStablePool
91
+ const poolAddress = pool.address.split(VirtualBoostedPool.poolType.toLowerCase())[0];
92
+ poolCallData.push({
93
+ target: this.vaultAddress,
94
+ callData: this.vaultInterface.encodeFunctionData('getPoolTokens', [
95
+ pool.id.split(VirtualBoostedPool.poolType.toLowerCase())[0],
96
+ ]),
97
+ });
98
+ // Add swap fee for upper PhantomStablePool
99
+ poolCallData.push({
100
+ target: poolAddress,
101
+ callData: this.phantomStablePoolInterface.encodeFunctionData('getSwapFeePercentage'),
102
+ });
103
+ // Add scaling factors for upper PhantomStablePool
104
+ poolCallData.push({
105
+ target: poolAddress,
106
+ callData: this.phantomStablePoolInterface.encodeFunctionData('getScalingFactors'),
107
+ });
108
+ // Add amp parameter for upper PhantomStable Pool
109
+ poolCallData.push({
110
+ target: poolAddress,
111
+ callData: this.phantomStablePoolInterface.encodeFunctionData('getAmplificationParameter'),
112
+ });
113
+ // Add calls for each linear pool
114
+ virtualBoostedPools[pool.id.split(VirtualBoostedPool.poolType.toLowerCase())[0]].mainTokens.forEach(mt => {
115
+ poolCallData.push({
116
+ target: this.vaultAddress,
117
+ callData: this.vaultInterface.encodeFunctionData('getPoolTokens', [
118
+ mt.linearPoolId,
119
+ ]),
120
+ });
121
+ poolCallData.push({
122
+ target: mt.linearPoolAddr,
123
+ callData: this.linearPoolInterface.encodeFunctionData('getSwapFeePercentage'),
124
+ });
125
+ poolCallData.push({
126
+ target: mt.linearPoolAddr,
127
+ callData: this.linearPoolInterface.encodeFunctionData('getScalingFactors'),
128
+ });
129
+ poolCallData.push({
130
+ target: mt.linearPoolAddr,
131
+ callData: this.linearPoolInterface.encodeFunctionData('getMainIndex'),
132
+ });
133
+ poolCallData.push({
134
+ target: mt.linearPoolAddr,
135
+ callData: this.linearPoolInterface.encodeFunctionData('getWrappedIndex'),
136
+ });
137
+ poolCallData.push({
138
+ target: mt.linearPoolAddr,
139
+ callData: this.linearPoolInterface.encodeFunctionData('getBptIndex'),
140
+ });
141
+ // returns lowerTarget, upperTarget
142
+ poolCallData.push({
143
+ target: mt.linearPoolAddr,
144
+ callData: this.linearPoolInterface.encodeFunctionData('getTargets'),
145
+ });
146
+ });
147
+ return poolCallData;
148
+ }
149
+ /*
150
+ Decodes multicall data for a VirtualBoostedPool.
151
+ data must contain returnData
152
+ startIndex is where to start in returnData. Allows this decode function to be called along with other pool types.
153
+ */
154
+ decodeOnChainCalls(pool, data, startIndex, boostedPools) {
155
+ const linearPool = new LinearPool_1.LinearPool(this.vaultAddress, this.vaultInterface, this.linearPoolInterface);
156
+ const phantomStablePool = new PhantomStablePool_1.PhantomStablePool(this.vaultAddress, this.vaultInterface, this.phantomStablePoolInterface);
157
+ // TO DO - Change to use decodeThrowError
158
+ const pools = {};
159
+ const poolTokens = this.vaultInterface.decodeFunctionResult('getPoolTokens', data[startIndex++].returnData);
160
+ const swapFee = this.phantomStablePoolInterface.decodeFunctionResult('getSwapFeePercentage', data[startIndex++].returnData)[0];
161
+ const scalingFactors = this.phantomStablePoolInterface.decodeFunctionResult('getScalingFactors', data[startIndex++].returnData)[0];
162
+ const amp = this.phantomStablePoolInterface.decodeFunctionResult('getAmplificationParameter', data[startIndex++].returnData);
163
+ const poolState = {
164
+ swapFee: BigInt(swapFee.toString()),
165
+ tokens: poolTokens.tokens.reduce((ptAcc, pt, j) => {
166
+ const tokenState = {
167
+ balance: BigInt(poolTokens.balances[j].toString()),
168
+ };
169
+ if (scalingFactors)
170
+ tokenState.scalingFactor = BigInt(scalingFactors[j].toString());
171
+ ptAcc[pt.toLowerCase()] = tokenState;
172
+ return ptAcc;
173
+ }, {}),
174
+ gasCost: linearPool.gasCost * 2 + phantomStablePool.gasCost, // Linear <> Phantom <> Linear
175
+ };
176
+ poolState.amp = BigInt(amp.value.toString());
177
+ pools[pool.address.toLowerCase()] = poolState;
178
+ // Save PhantomStable pool state
179
+ const phantomStableAddr = pool.address
180
+ .split(VirtualBoostedPool.poolType.toLowerCase())[0]
181
+ .toLowerCase();
182
+ pools[phantomStableAddr] = poolState;
183
+ pools[phantomStableAddr].gasCost = phantomStablePool.gasCost;
184
+ boostedPools[pool.id.split(VirtualBoostedPool.poolType.toLowerCase())[0]].mainTokens.forEach(mt => {
185
+ const poolTokens = this.vaultInterface.decodeFunctionResult('getPoolTokens', data[startIndex++].returnData);
186
+ const swapFee = this.linearPoolInterface.decodeFunctionResult('getSwapFeePercentage', data[startIndex++].returnData)[0];
187
+ const scalingFactors = this.linearPoolInterface.decodeFunctionResult('getScalingFactors', data[startIndex++].returnData)[0];
188
+ const mainIndex = this.linearPoolInterface.decodeFunctionResult('getMainIndex', data[startIndex++].returnData);
189
+ const wrappedIndex = this.linearPoolInterface.decodeFunctionResult('getWrappedIndex', data[startIndex++].returnData);
190
+ const bptIndex = this.linearPoolInterface.decodeFunctionResult('getBptIndex', data[startIndex++].returnData);
191
+ const [lowerTarget, upperTarget] = this.linearPoolInterface.decodeFunctionResult('getTargets', data[startIndex++].returnData);
192
+ const poolState = {
193
+ swapFee: BigInt(swapFee.toString()),
194
+ mainIndex: Number(mainIndex),
195
+ wrappedIndex: Number(wrappedIndex),
196
+ bptIndex: Number(bptIndex),
197
+ lowerTarget: BigInt(lowerTarget.toString()),
198
+ upperTarget: BigInt(upperTarget.toString()),
199
+ tokens: poolTokens.tokens.reduce((ptAcc, pt, j) => {
200
+ const tokenState = {
201
+ balance: BigInt(poolTokens.balances[j].toString()),
202
+ };
203
+ if (scalingFactors)
204
+ tokenState.scalingFactor = BigInt(scalingFactors[j].toString());
205
+ ptAcc[pt.toLowerCase()] = tokenState;
206
+ return ptAcc;
207
+ }, {}),
208
+ gasCost: linearPool.gasCost,
209
+ };
210
+ pools[mt.linearPoolAddr] = poolState;
211
+ });
212
+ return [pools, startIndex];
213
+ }
214
+ // Finds the address and poolType the tokenAddr belongs to
215
+ static getTokenPool(phantomPoolAddr, phantomPoolId, tokenAddr, boostedPools) {
216
+ if ((0, address_1.getAddress)(phantomPoolAddr) === (0, address_1.getAddress)(tokenAddr))
217
+ return {
218
+ address: phantomPoolAddr,
219
+ type: 'StablePhantom',
220
+ id: phantomPoolId,
221
+ };
222
+ const boostedPool = boostedPools[phantomPoolId];
223
+ const index = boostedPool.mainTokens.findIndex(t => (0, address_1.getAddress)(t.address) === (0, address_1.getAddress)(tokenAddr));
224
+ if (index < 0)
225
+ throw Error('Token missing');
226
+ return {
227
+ address: boostedPool.mainTokens[index].linearPoolAddr,
228
+ type: 'Linear',
229
+ id: boostedPool.mainTokens[index].linearPoolId,
230
+ };
231
+ }
232
+ /*
233
+ Helper function to parse pool data into params for onSell function.
234
+ */
235
+ parsePoolPairData(pool, poolStates, tokenIn, tokenOut, boostedPools) {
236
+ const linearPool = new LinearPool_1.LinearPool(this.vaultAddress, this.vaultInterface, this.linearPoolInterface);
237
+ const phantomStablePool = new PhantomStablePool_1.PhantomStablePool(this.vaultAddress, this.vaultInterface, this.phantomStablePoolInterface);
238
+ const poolPairData = {
239
+ tokenIn,
240
+ tokenOut,
241
+ phantomPoolId: pool.id.split(VirtualBoostedPool.poolType.toLowerCase())[0],
242
+ poolStates,
243
+ boostedPools,
244
+ gasCost: linearPool.gasCost * 2 + phantomStablePool.gasCost,
245
+ };
246
+ return poolPairData;
247
+ }
248
+ checkBalance(amounts, unitVolume, side, poolPairData) {
249
+ // Limited by last Linear Pool main token balance. LinearIn > BPT is ~unlimited. PhantomStable has no swap limit.
250
+ const phantomPoolAddr = poolPairData.boostedPools[poolPairData.phantomPoolId]
251
+ .phantomStablePoolAddr;
252
+ if (!phantomPoolAddr)
253
+ false;
254
+ const poolOut = VirtualBoostedPool.getTokenPool(phantomPoolAddr, poolPairData.phantomPoolId, poolPairData.tokenOut, poolPairData.boostedPools);
255
+ const linearPool = new LinearPool_1.LinearPool(this.vaultAddress, this.vaultInterface, this.linearPoolInterface);
256
+ const balanceOut = poolPairData.poolStates[poolOut.address].tokens[poolPairData.tokenOut.toLowerCase()].balance;
257
+ const scalingFactor = poolPairData.poolStates[poolOut.address].tokens[poolPairData.tokenOut.toLowerCase()].scalingFactor;
258
+ if (!scalingFactor)
259
+ return false;
260
+ const poolOutLimit = linearPool.swapLimit(balanceOut, scalingFactor);
261
+ const swapAmount = amounts[amounts.length - 1] > unitVolume
262
+ ? amounts[amounts.length - 1]
263
+ : unitVolume;
264
+ return poolOutLimit > swapAmount;
265
+ }
266
+ onSell(amounts, poolPairData) {
267
+ return this._calcOutGivenIn(amounts, poolPairData.tokenIn, poolPairData.tokenOut, poolPairData.phantomPoolId, poolPairData.poolStates, poolPairData.boostedPools);
268
+ }
269
+ _calcOutGivenIn(tokenAmountsIn, tokenIn, tokenOut, phantomPoolId, poolStates, boostedPools) {
270
+ const phantomPoolAddr = boostedPools[phantomPoolId].phantomStablePoolAddr;
271
+ if (!phantomPoolAddr)
272
+ return [];
273
+ const poolIn = VirtualBoostedPool.getTokenPool(phantomPoolAddr, phantomPoolId, tokenIn, boostedPools);
274
+ const poolOut = VirtualBoostedPool.getTokenPool(phantomPoolAddr, phantomPoolId, tokenOut, boostedPools);
275
+ const linearPool = new LinearPool_1.LinearPool(this.vaultAddress, this.vaultInterface, this.linearPoolInterface);
276
+ const phantomStablePool = new PhantomStablePool_1.PhantomStablePool(this.vaultAddress, this.vaultInterface, this.phantomStablePoolInterface);
277
+ // Find where tokenIn/Out fits, i.e. boosted or phantom
278
+ if (poolIn.type === 'Linear' && poolOut.type === 'Linear') {
279
+ // i.e. DAI > USDC
280
+ // console.log(`tokenIn[Linear]inBpt[PhantomStable]outBpt[Linear]tokenOut`);
281
+ // Find pools of interest
282
+ const linearIn = poolStates[poolIn.address];
283
+ const stablePhantom = poolStates[phantomPoolAddr];
284
+ const linearOut = poolStates[poolOut.address];
285
+ if (linearIn.bptIndex === undefined ||
286
+ linearIn.mainIndex === undefined ||
287
+ linearIn.wrappedIndex === undefined ||
288
+ linearIn.lowerTarget === undefined ||
289
+ linearIn.upperTarget === undefined ||
290
+ stablePhantom.amp === undefined ||
291
+ linearOut.bptIndex === undefined ||
292
+ linearOut.mainIndex === undefined ||
293
+ linearOut.wrappedIndex === undefined ||
294
+ linearOut.lowerTarget === undefined ||
295
+ linearOut.upperTarget === undefined)
296
+ throw 'Pool missing data';
297
+ const linearInTokens = Object.values(linearIn.tokens);
298
+ const stablePhantomTokens = Object.values(stablePhantom.tokens);
299
+ const linearOutTokens = Object.values(linearOut.tokens);
300
+ const linearInTokenAddrs = Object.keys(linearIn.tokens);
301
+ const linearOutTokenAddrs = Object.keys(linearOut.tokens);
302
+ const stablePhantomTokenAddrs = Object.keys(stablePhantom.tokens);
303
+ // First hop through Linear Pool of tokenIn
304
+ const amtOutLinearOne = linearPool._swapGivenIn(tokenAmountsIn, linearInTokenAddrs, linearInTokens.map(t => t.balance), linearIn.mainIndex, // indexIn
305
+ linearIn.bptIndex, // indexOut
306
+ linearIn.bptIndex, // bptIndex
307
+ linearIn.wrappedIndex, // wrappedIndex
308
+ linearIn.mainIndex, // mainIndex
309
+ linearInTokens.map(t => (t.scalingFactor ? t.scalingFactor : 0n)), linearIn.swapFee, linearIn.lowerTarget, linearIn.upperTarget);
310
+ // Second hop through PhantomStable inbpt>outbpt
311
+ const amtOutPhantomStable = phantomStablePool._swapGivenIn(amtOutLinearOne, stablePhantomTokenAddrs, stablePhantomTokens.map(t => t.balance), stablePhantomTokenAddrs.indexOf(linearInTokenAddrs[linearIn.bptIndex]), // indexIn
312
+ stablePhantomTokenAddrs.indexOf(linearOutTokenAddrs[linearOut.bptIndex]), // indexOut
313
+ stablePhantomTokenAddrs.indexOf(phantomPoolAddr), // bptIndex
314
+ stablePhantomTokens.map(t => (t.scalingFactor ? t.scalingFactor : 0n)), stablePhantom.swapFee, stablePhantom.amp);
315
+ // Last hop through Linear Pool of tokenOut
316
+ const amtOutLinearTwo = linearPool._swapGivenIn(amtOutPhantomStable, Object.keys(linearOut.tokens), linearOutTokens.map(t => t.balance), linearOut.bptIndex, // indexIn
317
+ linearOut.mainIndex, // indexOut
318
+ linearOut.bptIndex, // bptIndex
319
+ linearOut.wrappedIndex, linearOut.mainIndex, // mainIndex
320
+ linearOutTokens.map(t => (t.scalingFactor ? t.scalingFactor : 0n)), linearOut.swapFee, linearOut.lowerTarget, linearOut.upperTarget);
321
+ return amtOutLinearTwo;
322
+ }
323
+ else {
324
+ return [0n];
325
+ }
326
+ }
327
+ /**
328
+ * Creates Balancer multihop swaps and asset info required to swap a pair of underlying tokens through the Boosted pools.
329
+ * @param tokenIn Underlying token in.
330
+ * @param tokenOut Underlying token out.
331
+ * @param boostedPoolId ID of the VirtualBoostedPool that tokenIn/Out belong to.
332
+ * @param amount Amount being traded.
333
+ * @param boostedPools Dictionary of boosted pools.
334
+ * @returns Swaps and assets.
335
+ */
336
+ static getSwapData(tokenIn, tokenOut, boostedPoolId, amount, boostedPools) {
337
+ // i.e. for DAI>USDC it would return tokenIn[Linear]inBpt[PhantomStable]outBpt[Linear]tokenOut in correct swap format
338
+ const actualId = boostedPoolId.split(VirtualBoostedPool.poolType.toLowerCase())[0];
339
+ const virtualPoolInfo = boostedPools[actualId];
340
+ if (!virtualPoolInfo)
341
+ throw Error('Invalid VirtualBoostedPool ID');
342
+ const poolIn = this.getTokenPool(virtualPoolInfo.phantomStablePoolAddr, actualId, tokenIn, boostedPools);
343
+ const poolOut = this.getTokenPool(virtualPoolInfo.phantomStablePoolAddr, actualId, tokenOut, boostedPools);
344
+ // // Find where tokenIn/Out fits, i.e. boosted or phantom
345
+ if (poolIn.type === 'Linear' && poolOut.type === 'Linear') {
346
+ const assets = [tokenIn, poolIn.address, poolOut.address, tokenOut];
347
+ const swaps = [
348
+ {
349
+ poolId: poolIn.id,
350
+ assetInIndex: 0,
351
+ assetOutIndex: 1,
352
+ amount: amount,
353
+ userData: '0x',
354
+ },
355
+ {
356
+ poolId: actualId,
357
+ assetInIndex: 1,
358
+ assetOutIndex: 2,
359
+ amount: '0',
360
+ userData: '0x',
361
+ },
362
+ {
363
+ poolId: poolOut.id,
364
+ assetInIndex: 2,
365
+ assetOutIndex: 3,
366
+ amount: '0',
367
+ userData: '0x',
368
+ },
369
+ ];
370
+ return {
371
+ swaps,
372
+ assets,
373
+ };
374
+ }
375
+ else {
376
+ return {};
377
+ }
378
+ }
379
+ }
380
+ exports.VirtualBoostedPool = VirtualBoostedPool;
381
+ VirtualBoostedPool.poolType = 'VirtualBoosted';
382
+ //# sourceMappingURL=VirtualBoostedPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualBoostedPool.js","sourceRoot":"","sources":["../../../src/dex/balancer-v2/VirtualBoostedPool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap, AdapterMappings } from '../../types';
3
+ export declare const TestAaveV3Config: DexConfigMap<DexParams>;
4
+ export declare const Adapters: Record<number, AdapterMappings>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Adapters = exports.TestAaveV3Config = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.TestAaveV3Config = {
6
+ TestAaveV3: {
7
+ // TODO: complete me!
8
+ },
9
+ };
10
+ exports.Adapters = {
11
+ // TODO: add adapters for each chain
12
+ // This is an example to copy
13
+ [constants_1.Network.MAINNET]: { [constants_1.SwapSide.SELL]: [{ name: '', index: 0 }] },
14
+ };
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/test-aave-v3/config.ts"],"names":[],"mappings":";;;AAEA,+CAAoD;AAEvC,QAAA,gBAAgB,GAA4B;IACvD,UAAU,EAAE;IACV,qBAAqB;KACtB;CACF,CAAC;AAEW,QAAA,QAAQ,GAAoC;IACvD,oCAAoC;IACpC,6BAA6B;IAC7B,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,oBAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;CACjE,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { Log, Logger } from '../../types';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { PoolState } from './types';
7
+ export declare class TestAaveV3EventPool extends StatefulEventSubscriber<PoolState> {
8
+ protected parentName: string;
9
+ protected network: number;
10
+ protected dexHelper: IDexHelper;
11
+ protected testAaveV3Iface: Interface;
12
+ handlers: {
13
+ [event: string]: (event: any, state: DeepReadonly<PoolState>, log: Readonly<Log>) => DeepReadonly<PoolState> | null;
14
+ };
15
+ logDecoder: (log: Log) => any;
16
+ addressesSubscribed: string[];
17
+ constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, testAaveV3Iface?: Interface);
18
+ /**
19
+ * The function is called every time any of the subscribed
20
+ * addresses release log. The function accepts the current
21
+ * state, updates the state according to the log, and returns
22
+ * the updated state.
23
+ * @param state - Current state of event subscriber
24
+ * @param log - Log released by one of the subscribed addresses
25
+ * @returns Updates state of the event subscriber after the log
26
+ */
27
+ protected processLog(state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
28
+ /**
29
+ * The function generates state using on-chain calls. This
30
+ * function is called to regenerate state if the event based
31
+ * system fails to fetch events and the local state is no
32
+ * more correct.
33
+ * @param blockNumber - Blocknumber for which the state should
34
+ * should be generated
35
+ * @returns state of the event subscriber at blocknumber
36
+ */
37
+ generateState(blockNumber: number): Promise<DeepReadonly<PoolState>>;
38
+ handleMyEvent(event: any, state: DeepReadonly<PoolState>, log: Readonly<Log>): DeepReadonly<PoolState> | null;
39
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestAaveV3EventPool = void 0;
4
+ const abi_1 = require("@ethersproject/abi");
5
+ const utils_1 = require("../../utils");
6
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
7
+ class TestAaveV3EventPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
8
+ constructor(parentName, network, dexHelper, logger, testAaveV3Iface = new abi_1.Interface('' /* TODO: Import and put here TestAaveV3 ABI */)) {
9
+ super(parentName, logger);
10
+ this.parentName = parentName;
11
+ this.network = network;
12
+ this.dexHelper = dexHelper;
13
+ this.testAaveV3Iface = testAaveV3Iface;
14
+ this.handlers = {};
15
+ // TODO: make logDecoder decode logs that
16
+ this.logDecoder = (log) => this.testAaveV3Iface.parseLog(log);
17
+ this.addressesSubscribed = [
18
+ /* subscribed addresses */
19
+ ];
20
+ // Add handlers
21
+ this.handlers['myEvent'] = this.handleMyEvent.bind(this);
22
+ }
23
+ /**
24
+ * The function is called every time any of the subscribed
25
+ * addresses release log. The function accepts the current
26
+ * state, updates the state according to the log, and returns
27
+ * the updated state.
28
+ * @param state - Current state of event subscriber
29
+ * @param log - Log released by one of the subscribed addresses
30
+ * @returns Updates state of the event subscriber after the log
31
+ */
32
+ processLog(state, log) {
33
+ try {
34
+ const event = this.logDecoder(log);
35
+ if (event.name in this.handlers) {
36
+ return this.handlers[event.name](event, state, log);
37
+ }
38
+ }
39
+ catch (e) {
40
+ (0, utils_1.catchParseLogError)(e, this.logger);
41
+ }
42
+ return null;
43
+ }
44
+ /**
45
+ * The function generates state using on-chain calls. This
46
+ * function is called to regenerate state if the event based
47
+ * system fails to fetch events and the local state is no
48
+ * more correct.
49
+ * @param blockNumber - Blocknumber for which the state should
50
+ * should be generated
51
+ * @returns state of the event subscriber at blocknumber
52
+ */
53
+ async generateState(blockNumber) {
54
+ // TODO: complete me!
55
+ return {};
56
+ }
57
+ // Its just a dummy example
58
+ handleMyEvent(event, state, log) {
59
+ return null;
60
+ }
61
+ }
62
+ exports.TestAaveV3EventPool = TestAaveV3EventPool;
63
+ //# sourceMappingURL=test-aave-v3-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-aave-v3-pool.js","sourceRoot":"","sources":["../../../src/dex/test-aave-v3/test-aave-v3-pool.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAG/C,uCAAiD;AACjD,+EAA0E;AAI1E,MAAa,mBAAoB,SAAQ,mDAAkC;IAWzE,YACY,UAAkB,EAClB,OAAe,EACf,SAAqB,EAC/B,MAAc,EACJ,kBAAkB,IAAI,eAAS,CACvC,EAAE,CAAC,8CAA8C,CAClD;QAED,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QARhB,eAAU,GAAV,UAAU,CAAQ;QAClB,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAY;QAErB,oBAAe,GAAf,eAAe,CAExB;QAjBH,aAAQ,GAIJ,EAAE,CAAC;QAiBL,yCAAyC;QACzC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,mBAAmB,GAAG;QACzB,0BAA0B;SAC3B,CAAC;QAEF,eAAe;QACf,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;;OAQG;IACO,UAAU,CAClB,KAA8B,EAC9B,GAAkB;QAElB,IAAI;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aACrD;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAA,0BAAkB,EAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,aAAa,CAAC,WAAmB;QACrC,qBAAqB;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,2BAA2B;IAC3B,aAAa,CACX,KAAU,EACV,KAA8B,EAC9B,GAAkB;QAElB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/ED,kDA+EC"}
@@ -0,0 +1,37 @@
1
+ import { AsyncOrSync } from 'ts-essentials';
2
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger } from '../../types';
3
+ import { SwapSide, Network } from '../../constants';
4
+ import { IDex } from '../../dex/idex';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { TestAaveV3Data } from './types';
7
+ import { SimpleExchange } from '../simple-exchange';
8
+ import { TestAaveV3EventPool } from './test-aave-v3-pool';
9
+ export declare class TestAaveV3 extends SimpleExchange implements IDex<TestAaveV3Data> {
10
+ readonly network: Network;
11
+ readonly dexKey: string;
12
+ readonly dexHelper: IDexHelper;
13
+ protected adapters: import("../../types").AdapterMappings;
14
+ protected eventPools: TestAaveV3EventPool;
15
+ readonly hasConstantPriceLargeAmounts = false;
16
+ readonly needWrapNative = true;
17
+ readonly isFeeOnTransferSupported = false;
18
+ static dexKeysWithNetwork: {
19
+ key: string;
20
+ networks: Network[];
21
+ }[];
22
+ logger: Logger;
23
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, adapters?: import("../../types").AdapterMappings);
24
+ initializePricing(blockNumber: number): Promise<void>;
25
+ getAdapters(side: SwapSide): {
26
+ name: string;
27
+ index: number;
28
+ }[] | null;
29
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
30
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<TestAaveV3Data>>;
31
+ getCalldataGasCost(poolPrices: PoolPrices<TestAaveV3Data>): number | number[];
32
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: TestAaveV3Data, side: SwapSide): AdapterExchangeParam;
33
+ getSimpleParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: TestAaveV3Data, side: SwapSide): Promise<SimpleExchangeParam>;
34
+ updatePoolState(): Promise<void>;
35
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
36
+ releaseResources(): AsyncOrSync<void>;
37
+ }