@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.
- package/.idea/aws.xml +17 -0
- package/.idea/codeStyles/Project.xml +19 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/paraswap-dex-lib.iml +9 -0
- package/.idea/vcs.xml +6 -0
- package/build/config.js +5 -5
- package/build/dex/balancer-v2/balancer-v2.d.ts +9 -14
- package/build/dex/balancer-v2/balancer-v2.js +19 -16
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/balancer-v2/config.d.ts +2 -7
- package/build/dex/balancer-v2/config.js +20 -30
- package/build/dex/balancer-v2/config.js.map +1 -1
- package/build/dex/balancer-v2/pools/balancer-v2-pool.d.ts +25 -0
- package/build/dex/balancer-v2/pools/balancer-v2-pool.js +107 -0
- package/build/dex/balancer-v2/pools/balancer-v2-pool.js.map +1 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.d.ts +20 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.js +186 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.d.ts +51 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.js +477 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.js.map +1 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.d.ts +10 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js +314 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.d.ts +50 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js +367 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js.map +1 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.d.ts +7 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.js +111 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.d.ts +30 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.js +129 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.js.map +1 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.d.ts +6 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.js +61 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.d.ts +30 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.js +112 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.js.map +1 -0
- package/build/dex/balancer-v2/types.d.ts +1 -0
- package/build/dex/balancer-v2/types.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +5 -5
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +204 -224
- package/src/dex/balancer-v2/balancer-v2.ts +41 -29
- package/src/dex/balancer-v2/config.ts +23 -35
- package/src/dex/balancer-v2/pools/balancer-v2-pool.ts +274 -0
- package/src/dex/balancer-v2/{LinearMath.ts → pools/linear/LinearMath.ts} +81 -23
- package/src/dex/balancer-v2/{LinearPool.ts → pools/linear/LinearPool.ts} +241 -5
- package/src/dex/balancer-v2/{StableMath.ts → pools/phantom-stable/PhantomStableMath.ts} +101 -21
- package/src/dex/balancer-v2/{PhantomStablePool.ts → pools/phantom-stable/PhantomStablePool.ts} +165 -11
- package/src/dex/balancer-v2/pools/stable/StableMath.ts +204 -0
- package/src/dex/balancer-v2/pools/stable/StablePool.ts +221 -0
- package/src/dex/balancer-v2/pools/weighted/WeightedMath.ts +84 -0
- package/src/dex/balancer-v2/pools/weighted/WeightedPool.ts +189 -0
- package/src/dex/balancer-v2/types.ts +1 -0
- package/tests/constants-e2e.ts +9 -4
- package/build/abi/DirectSwap.json +0 -970
- package/build/dex/test-dex/config.d.ts +0 -4
- package/build/dex/test-dex/config.js +0 -15
- package/build/dex/test-dex/config.js.map +0 -1
- package/build/dex/test-dex/test-dex-pool.d.ts +0 -39
- package/build/dex/test-dex/test-dex-pool.js +0 -63
- package/build/dex/test-dex/test-dex-pool.js.map +0 -1
- package/build/dex/test-dex/test-dex.d.ts +0 -37
- package/build/dex/test-dex/test-dex.js +0 -126
- package/build/dex/test-dex/test-dex.js.map +0 -1
- package/build/dex/test-dex/types.d.ts +0 -6
- package/build/dex/test-dex/types.js +0 -3
- package/build/dex/test-dex/types.js.map +0 -1
- package/build/dex/woo-fi-v2/woo-fi-math.d.ts +0 -16
- package/build/dex/woo-fi-v2/woo-fi-math.js +0 -137
- package/build/dex/woo-fi-v2/woo-fi-math.js.map +0 -1
- 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 {
|
|
6
|
-
import {
|
|
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;
|
|
168
|
+
const pairs: { name: string; amount: string }[][] = [
|
|
36
169
|
[
|
|
37
|
-
{ name: 'USDC',
|
|
38
|
-
{ name: 'dUSDC',
|
|
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].
|
|
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].
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
221
|
-
|
|
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
|
-
|
|
250
|
-
|
|
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
|
-
|
|
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
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
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 {
|
|
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
|
-
|
|
41
|
-
PoolStateMap,
|
|
40
|
+
PoolState,
|
|
42
41
|
PoolStateCache,
|
|
43
|
-
|
|
42
|
+
PoolStateMap,
|
|
44
43
|
SubgraphPoolAddressDictionary,
|
|
44
|
+
SubgraphPoolBase,
|
|
45
|
+
SwapTypes,
|
|
45
46
|
} from './types';
|
|
46
47
|
import { SimpleExchange } from '../simple-exchange';
|
|
47
|
-
import {
|
|
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
|
-
:
|
|
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
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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
|
-
|
|
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:
|
|
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,
|