@paraswap/dex-lib 2.16.5 → 2.16.7-balancer-v2-buy

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 (69) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. package/.idea/misc.xml +6 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/paraswap-dex-lib.iml +9 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/build/config.js +4 -4
  10. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  11. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  12. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  13. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  14. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  15. package/build/dex/balancer-v2/balancer-v2.d.ts +9 -14
  16. package/build/dex/balancer-v2/balancer-v2.js +19 -16
  17. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  18. package/build/dex/balancer-v2/config.d.ts +2 -7
  19. package/build/dex/balancer-v2/config.js +20 -30
  20. package/build/dex/balancer-v2/config.js.map +1 -1
  21. package/build/dex/balancer-v2/pools/balancer-v2-pool.d.ts +25 -0
  22. package/build/dex/balancer-v2/pools/balancer-v2-pool.js +107 -0
  23. package/build/dex/balancer-v2/pools/balancer-v2-pool.js.map +1 -0
  24. package/build/dex/balancer-v2/pools/linear/LinearMath.d.ts +19 -0
  25. package/build/dex/balancer-v2/pools/linear/LinearMath.js +179 -0
  26. package/build/dex/balancer-v2/pools/linear/LinearMath.js.map +1 -0
  27. package/build/dex/balancer-v2/pools/linear/LinearPool.d.ts +50 -0
  28. package/build/dex/balancer-v2/pools/linear/LinearPool.js +458 -0
  29. package/build/dex/balancer-v2/pools/linear/LinearPool.js.map +1 -0
  30. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.d.ts +10 -0
  31. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js +314 -0
  32. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js.map +1 -0
  33. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.d.ts +50 -0
  34. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js +367 -0
  35. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js.map +1 -0
  36. package/build/dex/balancer-v2/pools/stable/StableMath.d.ts +7 -0
  37. package/build/dex/balancer-v2/pools/stable/StableMath.js +111 -0
  38. package/build/dex/balancer-v2/pools/stable/StableMath.js.map +1 -0
  39. package/build/dex/balancer-v2/pools/stable/StablePool.d.ts +30 -0
  40. package/build/dex/balancer-v2/pools/stable/StablePool.js +129 -0
  41. package/build/dex/balancer-v2/pools/stable/StablePool.js.map +1 -0
  42. package/build/dex/balancer-v2/pools/weighted/WeightedMath.d.ts +6 -0
  43. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js +61 -0
  44. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js.map +1 -0
  45. package/build/dex/balancer-v2/pools/weighted/WeightedPool.d.ts +30 -0
  46. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js +112 -0
  47. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js.map +1 -0
  48. package/build/dex/balancer-v2/types.d.ts +1 -0
  49. package/build/dex/balancer-v2/types.js.map +1 -1
  50. package/build/dex/generic-rfq/generic-rfq.js +0 -1
  51. package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
  52. package/package.json +1 -1
  53. package/src/config.ts +4 -4
  54. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +219 -224
  55. package/src/dex/balancer-v2/balancer-v2.ts +41 -29
  56. package/src/dex/balancer-v2/config.ts +23 -35
  57. package/src/dex/balancer-v2/pools/balancer-v2-pool.ts +274 -0
  58. package/src/dex/balancer-v2/{LinearMath.ts → pools/linear/LinearMath.ts} +10 -10
  59. package/src/dex/balancer-v2/{LinearPool.ts → pools/linear/LinearPool.ts} +209 -6
  60. package/src/dex/balancer-v2/{StableMath.ts → pools/phantom-stable/PhantomStableMath.ts} +101 -21
  61. package/src/dex/balancer-v2/{PhantomStablePool.ts → pools/phantom-stable/PhantomStablePool.ts} +165 -11
  62. package/src/dex/balancer-v2/pools/stable/StableMath.ts +204 -0
  63. package/src/dex/balancer-v2/pools/stable/StablePool.ts +221 -0
  64. package/src/dex/balancer-v2/pools/weighted/WeightedMath.ts +84 -0
  65. package/src/dex/balancer-v2/pools/weighted/WeightedPool.ts +189 -0
  66. package/src/dex/balancer-v2/types.ts +1 -0
  67. package/src/dex/generic-rfq/generic-rfq.ts +0 -1
  68. package/tests/constants-e2e.ts +10 -5
  69. package/src/dex/balancer-v2/balancer-v2-pool.ts +0 -744
@@ -2,9 +2,10 @@ import dotenv from 'dotenv';
2
2
  dotenv.config();
3
3
 
4
4
  import { testE2E } from '../../../tests/utils-e2e';
5
- import { Tokens, Holders } from '../../../tests/constants-e2e';
6
- import { Network, ContractMethod, SwapSide } from '../../constants';
5
+ import { Holders, Tokens } from '../../../tests/constants-e2e';
6
+ import { ContractMethod, Network, SwapSide } from '../../constants';
7
7
  import { StaticJsonRpcProvider } from '@ethersproject/providers';
8
+
8
9
  import { generateConfig } from '../../config';
9
10
 
10
11
  jest.setTimeout(50 * 1000);
@@ -20,6 +21,152 @@ describe('BalancerV2 E2E', () => {
20
21
  network,
21
22
  );
22
23
 
24
+ describe('Popular tokens', () => {
25
+ const sideToContractMethods = new Map([
26
+ [
27
+ SwapSide.SELL,
28
+ [
29
+ ContractMethod.simpleSwap,
30
+ ContractMethod.multiSwap,
31
+ ContractMethod.megaSwap,
32
+ ],
33
+ ],
34
+ [SwapSide.BUY, [
35
+ ContractMethod.simpleBuy,
36
+ ContractMethod.buy
37
+ ]],
38
+ ]);
39
+
40
+ const pairs: { name: string; sellAmount: string; buyAmount: string }[][] =
41
+ [
42
+ [
43
+ {
44
+ name: 'USDC',
45
+ sellAmount: '100000',
46
+ buyAmount: '1000000000000',
47
+ },
48
+ {
49
+ name: 'USDT',
50
+ sellAmount: '1000000000',
51
+ buyAmount: '1000000000000',
52
+ },
53
+ ],
54
+ [
55
+ {
56
+ name: 'ETH',
57
+ sellAmount: '2000000000000',
58
+ buyAmount: '100000000',
59
+ },
60
+ {
61
+ name: 'USDC',
62
+ sellAmount: '37690000',
63
+ buyAmount: '20035947428035770',
64
+ },
65
+ ],
66
+ [
67
+ {
68
+ name: 'WETH',
69
+ sellAmount: '70000000000000',
70
+ buyAmount: '100000000',
71
+ },
72
+ {
73
+ name: 'USDC',
74
+ sellAmount: '1000000000',
75
+ buyAmount: '20000947428035770',
76
+ },
77
+ ],
78
+ [
79
+ {
80
+ name: 'USDC',
81
+ sellAmount: '10000000000',
82
+ buyAmount: '10000000000000000000',
83
+ },
84
+ {
85
+ name: 'DAI',
86
+ sellAmount: '200000000000000',
87
+ buyAmount: '2000000000000',
88
+ },
89
+ ],
90
+ [
91
+ {
92
+ name: 'wstETH',
93
+ sellAmount: '3000000000000000000',
94
+ buyAmount: '3000000000000000000',
95
+ },
96
+ {
97
+ name: 'ETH',
98
+ sellAmount: '200000000000',
99
+ buyAmount: '7000000000000000000',
100
+ },
101
+ ],
102
+ [
103
+ {
104
+ name: 'WETH',
105
+ sellAmount: '20000000000',
106
+ buyAmount: '100000000000000000000000',
107
+ },
108
+ {
109
+ name: 'PSP',
110
+ sellAmount: '200000000000000',
111
+ buyAmount: '1871289184941469675',
112
+ },
113
+ ],
114
+ [
115
+ {
116
+ name: 'WETH',
117
+ sellAmount: '200000000000000000',
118
+ buyAmount: '20000',
119
+ },
120
+ {
121
+ name: 'WBTC',
122
+ sellAmount: '20000',
123
+ buyAmount: '200000000000000000',
124
+ },
125
+ ],
126
+ ];
127
+
128
+ sideToContractMethods.forEach((contractMethods, side) =>
129
+ describe(`${side}`, () => {
130
+ contractMethods.forEach((contractMethod: ContractMethod) => {
131
+ pairs.forEach(pair => {
132
+ describe(`${contractMethod}`, () => {
133
+ it(`${pair[0].name} -> ${pair[1].name}`, async () => {
134
+ await testE2E(
135
+ tokens[pair[0].name],
136
+ tokens[pair[1].name],
137
+ holders[pair[0].name],
138
+ side === SwapSide.SELL
139
+ ? pair[0].sellAmount
140
+ : pair[0].buyAmount,
141
+ side,
142
+ dexKey,
143
+ contractMethod,
144
+ network,
145
+ provider,
146
+ );
147
+ });
148
+ it(`${pair[1].name} -> ${pair[0].name}`, async () => {
149
+ await testE2E(
150
+ tokens[pair[1].name],
151
+ tokens[pair[0].name],
152
+ holders[pair[1].name],
153
+ side === SwapSide.SELL
154
+ ? pair[1].sellAmount
155
+ : pair[1].buyAmount,
156
+ side,
157
+ dexKey,
158
+ contractMethod,
159
+ network,
160
+ provider,
161
+ );
162
+ });
163
+ });
164
+ });
165
+ });
166
+ }),
167
+ );
168
+ });
169
+
23
170
  describe('GearboxLinear pool', () => {
24
171
  const sideToContractMethods = new Map([
25
172
  [
@@ -30,12 +177,13 @@ describe('BalancerV2 E2E', () => {
30
177
  ContractMethod.megaSwap,
31
178
  ],
32
179
  ],
180
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
33
181
  ]);
34
182
 
35
- const pairs: { name: string; sellAmount: string }[][] = [
183
+ const pairs: { name: string; amount: string }[][] = [
36
184
  [
37
- { name: 'USDC', sellAmount: '1000000000' },
38
- { name: 'dUSDC', sellAmount: '1000000000' },
185
+ { name: 'USDC', amount: '1000000000' },
186
+ { name: 'dUSDC', amount: '100000000000' },
39
187
  ],
40
188
  ];
41
189
 
@@ -49,7 +197,7 @@ describe('BalancerV2 E2E', () => {
49
197
  tokens[pair[0].name],
50
198
  tokens[pair[1].name],
51
199
  holders[pair[0].name],
52
- pair[0].sellAmount,
200
+ pair[0].amount,
53
201
  side,
54
202
  dexKey,
55
203
  contractMethod,
@@ -62,7 +210,7 @@ describe('BalancerV2 E2E', () => {
62
210
  tokens[pair[1].name],
63
211
  tokens[pair[0].name],
64
212
  holders[pair[1].name],
65
- pair[1].sellAmount,
213
+ pair[1].amount,
66
214
  side,
67
215
  dexKey,
68
216
  contractMethod,
@@ -77,61 +225,8 @@ describe('BalancerV2 E2E', () => {
77
225
  );
78
226
  });
79
227
 
80
- describe('Simpleswap', () => {
81
- it('ETH -> TOKEN', async () => {
82
- await testE2E(
83
- tokens['ETH'],
84
- tokens['USDC'],
85
- holders['ETH'],
86
- '7000000000000000000',
87
- SwapSide.SELL,
88
- dexKey,
89
- ContractMethod.simpleSwap,
90
- network,
91
- provider,
92
- );
93
- });
94
- it('TOKEN -> ETH', async () => {
95
- await testE2E(
96
- tokens['USDC'],
97
- tokens['ETH'],
98
- holders['USDC'],
99
- '2000000000',
100
- SwapSide.SELL,
101
- dexKey,
102
- ContractMethod.simpleSwap,
103
- network,
104
- provider,
105
- );
106
- });
107
- it('TOKEN -> TOKEN', async () => {
108
- await testE2E(
109
- tokens['USDC'],
110
- tokens['WETH'],
111
- holders['USDC'],
112
- '20000000',
113
- SwapSide.SELL,
114
- dexKey,
115
- ContractMethod.simpleSwap,
116
- network,
117
- provider,
118
- );
119
- });
120
- it('USDC -> USDT ComposableStable', async () => {
121
- await testE2E(
122
- tokens['USDC'],
123
- tokens['USDT'],
124
- holders['USDC'],
125
- '10000001000000',
126
- SwapSide.SELL,
127
- dexKey,
128
- ContractMethod.simpleSwap,
129
- network,
130
- provider,
131
- );
132
- });
133
- //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
134
- /*it('MAIN TOKEN -> BPT, LinearPool', async () => {
228
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
229
+ /*it('MAIN TOKEN -> BPT, LinearPool', async () => {
135
230
  // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
136
231
  await testE2E(
137
232
  tokens['USDT'],
@@ -158,67 +253,67 @@ describe('BalancerV2 E2E', () => {
158
253
  provider,
159
254
  );
160
255
  });*/
161
- // NO HOLDERS OF waUSDT (ONLY VAULT)
162
- // it('WRAPPED TOKEN -> BPT, LinearPool', async () => {
163
- // // Linear Pools allow swaps between wrapped token (i.e. waUSDT) and pools BPT
164
- // await testE2E(
165
- // tokens['waUSDT'],
166
- // tokens['BBAUSDT'],
167
- // holders['waUSDT'],
168
- // '20000000',
169
- // SwapSide.SELL,
170
- // dexKey,
171
- // ContractMethod.simpleSwap,
172
- // network,
173
- // provider,
174
- // );
175
- // });
176
- // NO HOLDERS OF BBADAI (ONLY VAULT)
177
- // it('WRAPPED TOKEN -> MAIN TOKEN, LinearPool', async () => {
178
- // await testE2E(
179
- // tokens['waUSDT'],
180
- // tokens['BBAUSDT'],
181
- // holders['waUSDT'],
182
- // '20000000',
183
- // SwapSide.SELL,
184
- // dexKey,
185
- // ContractMethod.simpleSwap,
186
- // network,
187
- // provider,
188
- // );
189
- // });
190
- // NO HOLDERS OF BBADAI (ONLY VAULT)
191
- // it('BPT -> MAIN TOKEN, LinearPool', async () => {
192
- // // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
193
- // await testE2E(
194
- // tokens['BBADAI'],
195
- // tokens['DAI'],
196
- // holders['BBADAI'],
197
- // '20000000',
198
- // SwapSide.SELL,
199
- // dexKey,
200
- // ContractMethod.simpleSwap,
201
- // network,
202
- // provider,
203
- // );
204
- // });
205
- // it('BPT -> WRAPPED TOKEN, LinearPool', async () => {
206
- // // Linear Pools allow swaps between wrapped token (i.e. waDAI) and pools BPT
207
- // await testE2E(
208
- // tokens['BBADAI'],
209
- // tokens['waDAI'],
210
- // holders['BBADAI'],
211
- // '20000000',
212
- // SwapSide.SELL,
213
- // dexKey,
214
- // ContractMethod.simpleSwap,
215
- // network,
216
- // provider,
217
- // );
218
- // });
256
+ // NO HOLDERS OF waUSDT (ONLY VAULT)
257
+ // it('WRAPPED TOKEN -> BPT, LinearPool', async () => {
258
+ // // Linear Pools allow swaps between wrapped token (i.e. waUSDT) and pools BPT
259
+ // await testE2E(
260
+ // tokens['waUSDT'],
261
+ // tokens['BBAUSDT'],
262
+ // holders['waUSDT'],
263
+ // '20000000',
264
+ // SwapSide.SELL,
265
+ // dexKey,
266
+ // ContractMethod.simpleSwap,
267
+ // network,
268
+ // provider,
269
+ // );
270
+ // });
271
+ // NO HOLDERS OF BBADAI (ONLY VAULT)
272
+ // it('WRAPPED TOKEN -> MAIN TOKEN, LinearPool', async () => {
273
+ // await testE2E(
274
+ // tokens['waUSDT'],
275
+ // tokens['BBAUSDT'],
276
+ // holders['waUSDT'],
277
+ // '20000000',
278
+ // SwapSide.SELL,
279
+ // dexKey,
280
+ // ContractMethod.simpleSwap,
281
+ // network,
282
+ // provider,
283
+ // );
284
+ // });
285
+ // NO HOLDERS OF BBADAI (ONLY VAULT)
286
+ // it('BPT -> MAIN TOKEN, LinearPool', async () => {
287
+ // // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
288
+ // await testE2E(
289
+ // tokens['BBADAI'],
290
+ // tokens['DAI'],
291
+ // holders['BBADAI'],
292
+ // '20000000',
293
+ // SwapSide.SELL,
294
+ // dexKey,
295
+ // ContractMethod.simpleSwap,
296
+ // network,
297
+ // provider,
298
+ // );
299
+ // });
300
+ // it('BPT -> WRAPPED TOKEN, LinearPool', async () => {
301
+ // // Linear Pools allow swaps between wrapped token (i.e. waDAI) and pools BPT
302
+ // await testE2E(
303
+ // tokens['BBADAI'],
304
+ // tokens['waDAI'],
305
+ // holders['BBADAI'],
306
+ // '20000000',
307
+ // SwapSide.SELL,
308
+ // dexKey,
309
+ // ContractMethod.simpleSwap,
310
+ // network,
311
+ // provider,
312
+ // );
313
+ // });
219
314
 
220
- //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
221
- /*it('BPT -> TOKEN, PhantomStablePool', async () => {
315
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
316
+ /*it('BPT -> TOKEN, PhantomStablePool', async () => {
222
317
  // PhantomStable allows swaps between BPT and tokens
223
318
  await testE2E(
224
319
  tokens['BBAUSD'],
@@ -246,64 +341,8 @@ describe('BalancerV2 E2E', () => {
246
341
  );
247
342
  });*/
248
343
 
249
- it('wstETH -> ETH, MetaStable Pool', async () => {
250
- await testE2E(
251
- tokens['wstETH'],
252
- tokens['ETH'],
253
- holders['wstETH'],
254
- '3000000000000000000',
255
- SwapSide.SELL,
256
- dexKey,
257
- ContractMethod.simpleSwap,
258
- network,
259
- provider,
260
- );
261
- });
262
- });
263
-
264
- describe('Multiswap', () => {
265
- it('ETH -> TOKEN', async () => {
266
- await testE2E(
267
- tokens['ETH'],
268
- tokens['WBTC'],
269
- holders['ETH'],
270
- '7000000000000000000',
271
- SwapSide.SELL,
272
- dexKey,
273
- ContractMethod.multiSwap,
274
- network,
275
- provider,
276
- );
277
- });
278
- it('TOKEN -> ETH', async () => {
279
- await testE2E(
280
- tokens['USDC'],
281
- tokens['ETH'],
282
- holders['USDC'],
283
- '2000000000',
284
- SwapSide.SELL,
285
- dexKey,
286
- ContractMethod.multiSwap,
287
- network,
288
- provider,
289
- );
290
- });
291
- it('TOKEN -> TOKEN', async () => {
292
- await testE2E(
293
- tokens['USDC'],
294
- tokens['WBTC'],
295
- holders['USDC'],
296
- '20000000',
297
- SwapSide.SELL,
298
- dexKey,
299
- ContractMethod.multiSwap,
300
- network,
301
- provider,
302
- );
303
- });
304
-
305
- //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
306
- /*
344
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
345
+ /*
307
346
  it('MAIN TOKEN -> BPT, LinearPool', async () => {
308
347
  // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
309
348
  await testE2E(
@@ -359,50 +398,6 @@ describe('BalancerV2 E2E', () => {
359
398
  );
360
399
  });
361
400
  */
362
- });
363
-
364
- //BUY is not currently supported for BalancerV2
365
- //describe('SimpleBuy', () => {
366
- // it('ETH -> TOKEN buy', async () => {
367
- // await testE2E(
368
- // tokens['ETH'],
369
- // tokens['WBTC'],
370
- // holders['ETH'],
371
- // '35000000',
372
- // SwapSide.BUY,
373
- // dexKey,
374
- // ContractMethod.simpleBuy,
375
- // network,
376
- // provider,
377
- // );
378
- // });
379
- // it('TOKEN -> ETH buy', async () => {
380
- // await testE2E(
381
- // tokens['USDC'],
382
- // tokens['ETH'],
383
- // holders['USDC'],
384
- // '1000000000000000000',
385
- // SwapSide.BUY,
386
- // dexKey,
387
- // ContractMethod.simpleBuy,
388
- // network,
389
- // provider,
390
- // );
391
- // });
392
- // it('TOKEN -> TOKEN buy', async () => {
393
- // await testE2E(
394
- // tokens['USDC'],
395
- // tokens['WETH'],
396
- // holders['USDC'],
397
- // '1000000000000000000',
398
- // SwapSide.BUY,
399
- // dexKey,
400
- // ContractMethod.simpleBuy,
401
- // network,
402
- // provider,
403
- // );
404
- // });
405
- //});
406
401
  });
407
402
 
408
403
  describe('BalancerV2 ARBITRUM', () => {
@@ -2,49 +2,50 @@ import { Interface } from '@ethersproject/abi';
2
2
  import { assert, DeepReadonly } from 'ts-essentials';
3
3
  import _, { keyBy } from 'lodash';
4
4
  import {
5
- Token,
5
+ AdapterExchangeParam,
6
6
  Address,
7
7
  ExchangePrices,
8
- PoolPrices,
9
8
  Log,
10
- AdapterExchangeParam,
11
- SimpleExchangeParam,
12
- PoolLiquidity,
13
9
  Logger,
10
+ PoolLiquidity,
11
+ PoolPrices,
12
+ SimpleExchangeParam,
13
+ Token,
14
14
  } from '../../types';
15
15
  import {
16
- SwapSide,
17
16
  ETHER_ADDRESS,
18
- NULL_ADDRESS,
19
17
  MAX_INT,
20
18
  MAX_UINT,
21
19
  Network,
20
+ NULL_ADDRESS,
22
21
  SUBGRAPH_TIMEOUT,
22
+ SwapSide,
23
23
  } from '../../constants';
24
24
  import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
25
- import { StablePool, WeightedPool } from './balancer-v2-pool';
26
- import { PhantomStablePool } from './PhantomStablePool';
27
- import { LinearPool } from './LinearPool';
25
+ import { StablePool } from './pools/stable/StablePool';
26
+ import { WeightedPool } from './pools/weighted/WeightedPool';
27
+ import { PhantomStablePool } from './pools/phantom-stable/PhantomStablePool';
28
+ import { LinearPool } from './pools/linear/LinearPool';
28
29
  import VaultABI from '../../abi/balancer-v2/vault.json';
29
30
  import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
30
- import { getDexKeysWithNetwork, getBigIntPow } from '../../utils';
31
+ import { getBigIntPow, getDexKeysWithNetwork } from '../../utils';
31
32
  import { IDex } from '../../dex/idex';
32
33
  import { IDexHelper } from '../../dex-helper';
33
34
  import {
34
- PoolState,
35
- SubgraphPoolBase,
36
- BalancerV2Data,
37
35
  BalancerParam,
36
+ BalancerPoolTypes,
38
37
  BalancerSwap,
38
+ BalancerV2Data,
39
39
  OptimizedBalancerV2Data,
40
- SwapTypes,
41
- PoolStateMap,
40
+ PoolState,
42
41
  PoolStateCache,
43
- BalancerPoolTypes,
42
+ PoolStateMap,
44
43
  SubgraphPoolAddressDictionary,
44
+ SubgraphPoolBase,
45
+ SwapTypes,
45
46
  } from './types';
46
47
  import { SimpleExchange } from '../simple-exchange';
47
- import { BalancerConfig, Adapters } from './config';
48
+ import { Adapters, BalancerConfig } from './config';
48
49
  import {
49
50
  getAllPoolsUsedInPaths,
50
51
  isSameAddress,
@@ -407,13 +408,22 @@ export class BalancerV2EventPool extends StatefulEventSubscriber<PoolStateMap> {
407
408
  const unitResult =
408
409
  checkedUnitVolume === 0n
409
410
  ? 0n
410
- : pool.onSell([checkedUnitVolume], poolPairData as any)[0];
411
+ : side === SwapSide.SELL
412
+ ? pool.onSell([checkedUnitVolume], poolPairData as any)[0]
413
+ : pool.onBuy([checkedUnitVolume], poolPairData as any)[0];
411
414
 
412
415
  const prices: bigint[] = new Array(amounts.length).fill(0n);
413
- const outputs = pool.onSell(
414
- amountWithoutZero.slice(0, nonZeroAmountIndex),
415
- poolPairData as any,
416
- );
416
+
417
+ const outputs =
418
+ side === SwapSide.SELL
419
+ ? pool.onSell(
420
+ amountWithoutZero.slice(0, nonZeroAmountIndex),
421
+ poolPairData as any,
422
+ )
423
+ : pool.onBuy(
424
+ amountWithoutZero.slice(0, nonZeroAmountIndex),
425
+ poolPairData as any,
426
+ );
417
427
 
418
428
  assert(
419
429
  outputs.length <= prices.length,
@@ -618,8 +628,7 @@ export class BalancerV2
618
628
  }
619
629
 
620
630
  getAdapters(side: SwapSide): { name: string; index: number }[] | null {
621
- if (side === SwapSide.BUY) return null;
622
- return this.adapters;
631
+ return this.adapters[side] ? this.adapters[side] : null;
623
632
  }
624
633
 
625
634
  async getPoolIdentifiers(
@@ -628,7 +637,6 @@ export class BalancerV2
628
637
  side: SwapSide,
629
638
  blockNumber: number,
630
639
  ): Promise<string[]> {
631
- if (side === SwapSide.BUY) return [];
632
640
  const _from = this.dexHelper.config.wrapETH(from);
633
641
  const _to = this.dexHelper.config.wrapETH(to);
634
642
 
@@ -676,7 +684,6 @@ export class BalancerV2
676
684
  blockNumber: number,
677
685
  limitPools?: string[],
678
686
  ): Promise<null | ExchangePrices<BalancerV2Data>> {
679
- if (side === SwapSide.BUY) return null;
680
687
  try {
681
688
  const _from = this.dexHelper.config.wrapETH(from);
682
689
  const _to = this.dexHelper.config.wrapETH(to);
@@ -956,7 +963,12 @@ export class BalancerV2
956
963
  poolId: hop.pool.id,
957
964
  assetInIndex: swapOffset + index,
958
965
  assetOutIndex: swapOffset + index + 1,
959
- amount: index === 0 ? swapData.amount : '0',
966
+ amount:
967
+ side === SwapSide.SELL && index === 0
968
+ ? swapData.amount
969
+ : side === SwapSide.BUY && index === path.length - 1
970
+ ? swapData.amount
971
+ : '0',
960
972
  userData: '0x',
961
973
  }));
962
974
 
@@ -983,7 +995,7 @@ export class BalancerV2
983
995
 
984
996
  const params: BalancerParam = [
985
997
  side === SwapSide.SELL ? SwapTypes.SwapExactIn : SwapTypes.SwapExactOut,
986
- swaps,
998
+ side === SwapSide.SELL ? swaps : swaps.reverse(),
987
999
  assets,
988
1000
  funds,
989
1001
  limits,