@paraswap/dex-lib 2.16.3 → 2.16.4-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 (77) 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 +5 -5
  10. package/build/dex/balancer-v2/balancer-v2.d.ts +9 -14
  11. package/build/dex/balancer-v2/balancer-v2.js +19 -16
  12. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  13. package/build/dex/balancer-v2/config.d.ts +2 -7
  14. package/build/dex/balancer-v2/config.js +20 -30
  15. package/build/dex/balancer-v2/config.js.map +1 -1
  16. package/build/dex/balancer-v2/pools/balancer-v2-pool.d.ts +25 -0
  17. package/build/dex/balancer-v2/pools/balancer-v2-pool.js +107 -0
  18. package/build/dex/balancer-v2/pools/balancer-v2-pool.js.map +1 -0
  19. package/build/dex/balancer-v2/pools/linear/LinearMath.d.ts +20 -0
  20. package/build/dex/balancer-v2/pools/linear/LinearMath.js +186 -0
  21. package/build/dex/balancer-v2/pools/linear/LinearMath.js.map +1 -0
  22. package/build/dex/balancer-v2/pools/linear/LinearPool.d.ts +51 -0
  23. package/build/dex/balancer-v2/pools/linear/LinearPool.js +477 -0
  24. package/build/dex/balancer-v2/pools/linear/LinearPool.js.map +1 -0
  25. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.d.ts +10 -0
  26. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js +314 -0
  27. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js.map +1 -0
  28. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.d.ts +50 -0
  29. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js +367 -0
  30. package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js.map +1 -0
  31. package/build/dex/balancer-v2/pools/stable/StableMath.d.ts +7 -0
  32. package/build/dex/balancer-v2/pools/stable/StableMath.js +111 -0
  33. package/build/dex/balancer-v2/pools/stable/StableMath.js.map +1 -0
  34. package/build/dex/balancer-v2/pools/stable/StablePool.d.ts +30 -0
  35. package/build/dex/balancer-v2/pools/stable/StablePool.js +129 -0
  36. package/build/dex/balancer-v2/pools/stable/StablePool.js.map +1 -0
  37. package/build/dex/balancer-v2/pools/weighted/WeightedMath.d.ts +6 -0
  38. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js +61 -0
  39. package/build/dex/balancer-v2/pools/weighted/WeightedMath.js.map +1 -0
  40. package/build/dex/balancer-v2/pools/weighted/WeightedPool.d.ts +30 -0
  41. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js +112 -0
  42. package/build/dex/balancer-v2/pools/weighted/WeightedPool.js.map +1 -0
  43. package/build/dex/balancer-v2/types.d.ts +1 -0
  44. package/build/dex/balancer-v2/types.js.map +1 -1
  45. package/package.json +1 -1
  46. package/src/config.ts +5 -5
  47. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +204 -224
  48. package/src/dex/balancer-v2/balancer-v2.ts +41 -29
  49. package/src/dex/balancer-v2/config.ts +23 -35
  50. package/src/dex/balancer-v2/pools/balancer-v2-pool.ts +274 -0
  51. package/src/dex/balancer-v2/{LinearMath.ts → pools/linear/LinearMath.ts} +81 -23
  52. package/src/dex/balancer-v2/{LinearPool.ts → pools/linear/LinearPool.ts} +241 -5
  53. package/src/dex/balancer-v2/{StableMath.ts → pools/phantom-stable/PhantomStableMath.ts} +101 -21
  54. package/src/dex/balancer-v2/{PhantomStablePool.ts → pools/phantom-stable/PhantomStablePool.ts} +165 -11
  55. package/src/dex/balancer-v2/pools/stable/StableMath.ts +204 -0
  56. package/src/dex/balancer-v2/pools/stable/StablePool.ts +221 -0
  57. package/src/dex/balancer-v2/pools/weighted/WeightedMath.ts +84 -0
  58. package/src/dex/balancer-v2/pools/weighted/WeightedPool.ts +189 -0
  59. package/src/dex/balancer-v2/types.ts +1 -0
  60. package/tests/constants-e2e.ts +9 -4
  61. package/build/abi/DirectSwap.json +0 -970
  62. package/build/dex/test-dex/config.d.ts +0 -4
  63. package/build/dex/test-dex/config.js +0 -15
  64. package/build/dex/test-dex/config.js.map +0 -1
  65. package/build/dex/test-dex/test-dex-pool.d.ts +0 -39
  66. package/build/dex/test-dex/test-dex-pool.js +0 -63
  67. package/build/dex/test-dex/test-dex-pool.js.map +0 -1
  68. package/build/dex/test-dex/test-dex.d.ts +0 -37
  69. package/build/dex/test-dex/test-dex.js +0 -126
  70. package/build/dex/test-dex/test-dex.js.map +0 -1
  71. package/build/dex/test-dex/types.d.ts +0 -6
  72. package/build/dex/test-dex/types.js +0 -3
  73. package/build/dex/test-dex/types.js.map +0 -1
  74. package/build/dex/woo-fi-v2/woo-fi-math.d.ts +0 -16
  75. package/build/dex/woo-fi-v2/woo-fi-math.js +0 -137
  76. package/build/dex/woo-fi-v2/woo-fi-math.js.map +0 -1
  77. 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,137 @@ 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, [ContractMethod.simpleBuy, ContractMethod.buy]],
35
+ ]);
36
+
37
+ const pairs: { name: string; sellAmount: string; buyAmount: string }[][] =
38
+ [
39
+ [
40
+ {
41
+ name: 'ETH',
42
+ sellAmount: '2000000000000',
43
+ buyAmount: '10000000000',
44
+ },
45
+ {
46
+ name: 'USDC',
47
+ sellAmount: '37690000',
48
+ buyAmount: '20035947428035770',
49
+ },
50
+ ],
51
+ [
52
+ {
53
+ name: 'USDC',
54
+ sellAmount: '1000000',
55
+ buyAmount: '100000000000000',
56
+ },
57
+ {
58
+ name: 'WETH',
59
+ sellAmount: '70000000000',
60
+ buyAmount: '20000000000',
61
+ },
62
+ ],
63
+ [
64
+ {
65
+ name: 'USDC',
66
+ sellAmount: '10000000000',
67
+ buyAmount: '10000000000000000000',
68
+ },
69
+ {
70
+ name: 'DAI',
71
+ sellAmount: '200000000000000',
72
+ buyAmount: '2000000000000',
73
+ },
74
+ ],
75
+ [
76
+ {
77
+ name: 'wstETH',
78
+ sellAmount: '3000000000000000000',
79
+ buyAmount: '3000000000000000000',
80
+ },
81
+ {
82
+ name: 'ETH',
83
+ sellAmount: '200000000000',
84
+ buyAmount: '7000000000000000000',
85
+ },
86
+ ],
87
+ [
88
+ {
89
+ name: 'WETH',
90
+ sellAmount: '20000000000',
91
+ buyAmount: '100000000000000000000000',
92
+ },
93
+ {
94
+ name: 'PSP',
95
+ sellAmount: '200000000000000',
96
+ buyAmount: '1871289184941469675',
97
+ },
98
+ ],
99
+ [
100
+ {
101
+ name: 'WETH',
102
+ sellAmount: '200000000000000000',
103
+ buyAmount: '20000',
104
+ },
105
+ {
106
+ name: 'WBTC',
107
+ sellAmount: '20000',
108
+ buyAmount: '200000000000000000',
109
+ },
110
+ ],
111
+ ];
112
+
113
+ sideToContractMethods.forEach((contractMethods, side) =>
114
+ describe(`${side}`, () => {
115
+ contractMethods.forEach((contractMethod: ContractMethod) => {
116
+ pairs.forEach(pair => {
117
+ describe(`${contractMethod}`, () => {
118
+ it(`${pair[0].name} -> ${pair[1].name}`, async () => {
119
+ await testE2E(
120
+ tokens[pair[0].name],
121
+ tokens[pair[1].name],
122
+ holders[pair[0].name],
123
+ side === SwapSide.SELL
124
+ ? pair[0].sellAmount
125
+ : pair[0].buyAmount,
126
+ side,
127
+ dexKey,
128
+ contractMethod,
129
+ network,
130
+ provider,
131
+ );
132
+ });
133
+ it(`${pair[1].name} -> ${pair[0].name}`, async () => {
134
+ await testE2E(
135
+ tokens[pair[1].name],
136
+ tokens[pair[0].name],
137
+ holders[pair[1].name],
138
+ side === SwapSide.SELL
139
+ ? pair[1].sellAmount
140
+ : pair[1].buyAmount,
141
+ side,
142
+ dexKey,
143
+ contractMethod,
144
+ network,
145
+ provider,
146
+ );
147
+ });
148
+ });
149
+ });
150
+ });
151
+ }),
152
+ );
153
+ });
154
+
23
155
  describe('GearboxLinear pool', () => {
24
156
  const sideToContractMethods = new Map([
25
157
  [
@@ -30,12 +162,13 @@ describe('BalancerV2 E2E', () => {
30
162
  ContractMethod.megaSwap,
31
163
  ],
32
164
  ],
165
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
33
166
  ]);
34
167
 
35
- const pairs: { name: string; sellAmount: string }[][] = [
168
+ const pairs: { name: string; amount: string }[][] = [
36
169
  [
37
- { name: 'USDC', sellAmount: '1000000000' },
38
- { name: 'dUSDC', sellAmount: '1000000000' },
170
+ { name: 'USDC', amount: '1000000000' },
171
+ { name: 'dUSDC', amount: '100000000000' },
39
172
  ],
40
173
  ];
41
174
 
@@ -49,7 +182,7 @@ describe('BalancerV2 E2E', () => {
49
182
  tokens[pair[0].name],
50
183
  tokens[pair[1].name],
51
184
  holders[pair[0].name],
52
- pair[0].sellAmount,
185
+ pair[0].amount,
53
186
  side,
54
187
  dexKey,
55
188
  contractMethod,
@@ -62,7 +195,7 @@ describe('BalancerV2 E2E', () => {
62
195
  tokens[pair[1].name],
63
196
  tokens[pair[0].name],
64
197
  holders[pair[1].name],
65
- pair[1].sellAmount,
198
+ pair[1].amount,
66
199
  side,
67
200
  dexKey,
68
201
  contractMethod,
@@ -77,61 +210,8 @@ describe('BalancerV2 E2E', () => {
77
210
  );
78
211
  });
79
212
 
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 () => {
213
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
214
+ /*it('MAIN TOKEN -> BPT, LinearPool', async () => {
135
215
  // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
136
216
  await testE2E(
137
217
  tokens['USDT'],
@@ -158,67 +238,67 @@ describe('BalancerV2 E2E', () => {
158
238
  provider,
159
239
  );
160
240
  });*/
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
- // });
241
+ // NO HOLDERS OF waUSDT (ONLY VAULT)
242
+ // it('WRAPPED TOKEN -> BPT, LinearPool', async () => {
243
+ // // Linear Pools allow swaps between wrapped token (i.e. waUSDT) and pools BPT
244
+ // await testE2E(
245
+ // tokens['waUSDT'],
246
+ // tokens['BBAUSDT'],
247
+ // holders['waUSDT'],
248
+ // '20000000',
249
+ // SwapSide.SELL,
250
+ // dexKey,
251
+ // ContractMethod.simpleSwap,
252
+ // network,
253
+ // provider,
254
+ // );
255
+ // });
256
+ // NO HOLDERS OF BBADAI (ONLY VAULT)
257
+ // it('WRAPPED TOKEN -> MAIN TOKEN, LinearPool', async () => {
258
+ // await testE2E(
259
+ // tokens['waUSDT'],
260
+ // tokens['BBAUSDT'],
261
+ // holders['waUSDT'],
262
+ // '20000000',
263
+ // SwapSide.SELL,
264
+ // dexKey,
265
+ // ContractMethod.simpleSwap,
266
+ // network,
267
+ // provider,
268
+ // );
269
+ // });
270
+ // NO HOLDERS OF BBADAI (ONLY VAULT)
271
+ // it('BPT -> MAIN TOKEN, LinearPool', async () => {
272
+ // // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
273
+ // await testE2E(
274
+ // tokens['BBADAI'],
275
+ // tokens['DAI'],
276
+ // holders['BBADAI'],
277
+ // '20000000',
278
+ // SwapSide.SELL,
279
+ // dexKey,
280
+ // ContractMethod.simpleSwap,
281
+ // network,
282
+ // provider,
283
+ // );
284
+ // });
285
+ // it('BPT -> WRAPPED TOKEN, LinearPool', async () => {
286
+ // // Linear Pools allow swaps between wrapped token (i.e. waDAI) and pools BPT
287
+ // await testE2E(
288
+ // tokens['BBADAI'],
289
+ // tokens['waDAI'],
290
+ // holders['BBADAI'],
291
+ // '20000000',
292
+ // SwapSide.SELL,
293
+ // dexKey,
294
+ // ContractMethod.simpleSwap,
295
+ // network,
296
+ // provider,
297
+ // );
298
+ // });
219
299
 
220
- //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
221
- /*it('BPT -> TOKEN, PhantomStablePool', async () => {
300
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
301
+ /*it('BPT -> TOKEN, PhantomStablePool', async () => {
222
302
  // PhantomStable allows swaps between BPT and tokens
223
303
  await testE2E(
224
304
  tokens['BBAUSD'],
@@ -246,64 +326,8 @@ describe('BalancerV2 E2E', () => {
246
326
  );
247
327
  });*/
248
328
 
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
- /*
329
+ //daniel: BPT swaps are currently not supported, we've refactored to focus on mainToken paths
330
+ /*
307
331
  it('MAIN TOKEN -> BPT, LinearPool', async () => {
308
332
  // Linear Pools allow swaps between main token (i.e. USDT) and pools BPT
309
333
  await testE2E(
@@ -359,50 +383,6 @@ describe('BalancerV2 E2E', () => {
359
383
  );
360
384
  });
361
385
  */
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
386
  });
407
387
 
408
388
  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,