@paraswap/dex-lib 3.4.2-balancer-v2-single-swap.0 → 3.4.2
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/README.md +377 -377
- package/build/config.js +9 -5
- package/build/config.js.map +1 -1
- package/build/dex/algebra/algebra.js +25 -25
- package/build/dex/balancer-v1/balancer-v1.js +34 -34
- package/build/dex/balancer-v2/balancer-v2.d.ts +1 -1
- package/build/dex/balancer-v2/balancer-v2.js +65 -78
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/camelot/camelot.js +27 -27
- package/build/dex/kyberdmm/kyberdmm.js +27 -27
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js +25 -25
- package/build/dex/solidly/solidly.js +27 -27
- package/build/dex/solidly-v3/solidly-v3.js +25 -25
- package/build/dex/swaap-v2/config.js +15 -0
- package/build/dex/swaap-v2/config.js.map +1 -1
- package/build/dex/uniswap-v2/uniswap-v2.js +26 -26
- package/build/dex/uniswap-v3/uniswap-v3.js +25 -25
- package/funding.json +5 -5
- package/package.json +1 -1
- package/src/config.ts +500 -496
- package/src/constants.ts +67 -67
- package/src/dex/aave-v2/aave-v2.ts +409 -409
- package/src/dex/aave-v3/aave-v3.ts +320 -320
- package/src/dex/algebra/algebra.ts +1180 -1180
- package/src/dex/angle-staked-stable/angle-staked-stable.ts +347 -347
- package/src/dex/augustus-rfq.ts +180 -180
- package/src/dex/bProtocol/bProtocol.ts +108 -108
- package/src/dex/balancer-v1/balancer-v1.ts +572 -572
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +1699 -1699
- package/src/dex/balancer-v2/balancer-v2.ts +1669 -1701
- package/src/dex/bancor/bancor.ts +128 -128
- package/src/dex/camelot/camelot.ts +873 -873
- package/src/dex/compound/compound.ts +107 -107
- package/src/dex/curve-v1/config.ts +1179 -1179
- package/src/dex/curve-v1/curve-v1-e2e.test.ts +507 -507
- package/src/dex/curve-v1/curve-v1.ts +1315 -1315
- package/src/dex/curve-v1-factory/config.ts +1018 -1018
- package/src/dex/curve-v1-factory/curve-v1-factory.ts +1288 -1288
- package/src/dex/curve-v2/curve-v2.ts +440 -440
- package/src/dex/dexalot/dexalot.ts +1100 -1100
- package/src/dex/dodo-v1/dodo-v1.ts +132 -132
- package/src/dex/dodo-v2.ts +266 -266
- package/src/dex/etherfi.ts +239 -239
- package/src/dex/generic-rfq/generic-rfq.ts +431 -431
- package/src/dex/gmx/gmx.ts +321 -321
- package/src/dex/hashflow/hashflow.ts +1135 -1135
- package/src/dex/idex.ts +254 -254
- package/src/dex/index.ts +357 -357
- package/src/dex/jarvis-v6/jarvis-v6.ts +509 -509
- package/src/dex/jarvis.ts +262 -262
- package/src/dex/kyberdmm/kyberdmm.ts +649 -649
- package/src/dex/lido/lido.ts +110 -110
- package/src/dex/maker-psm/maker-psm.ts +592 -592
- package/src/dex/maverick-v1/maverick-v1.ts +537 -537
- package/src/dex/nerve/config.ts +635 -635
- package/src/dex/nerve/nerve-e2e.test.ts +731 -731
- package/src/dex/nerve/nerve-events.test.ts +911 -911
- package/src/dex/nerve/nerve.ts +467 -467
- package/src/dex/onebit/onebit.ts +113 -113
- package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +1150 -1150
- package/src/dex/paraswap-limit-orders/config.ts +60 -60
- package/src/dex/paraswap-limit-orders/paraswap-limit-orders-e2e.test.ts +137 -137
- package/src/dex/paraswap-limit-orders/paraswap-limit-orders-integration.test.ts +328 -328
- package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +631 -631
- package/src/dex/polygon-migrator/polygon-migrator.ts +194 -194
- package/src/dex/quick-perps/quick-perps.ts +337 -337
- package/src/dex/quickswap/config.ts +16 -16
- package/src/dex/quickswap/quickswap-e2e.test.ts +384 -384
- package/src/dex/smoothy/smoothy.ts +110 -110
- package/src/dex/solidly/config.ts +225 -225
- package/src/dex/solidly/solidly-e2e.test.ts +1421 -1421
- package/src/dex/solidly/solidly-integration.test.ts +1753 -1753
- package/src/dex/solidly/solidly.ts +687 -687
- package/src/dex/solidly-v3/solidly-v3.ts +968 -968
- package/src/dex/spark/spark.ts +284 -284
- package/src/dex/stable-pool/stable-pool.ts +129 -129
- package/src/dex/swaap-v2/config.ts +15 -0
- package/src/dex/swaap-v2/swaap-v2-e2e.test.ts +233 -17
- package/src/dex/swaap-v2/swaap-v2-integration.test.ts +1 -1
- package/src/dex/swaap-v2/swaap-v2.ts +1056 -1056
- package/src/dex/swell/swell.ts +312 -312
- package/src/dex/synthetix/synthetix.ts +420 -420
- package/src/dex/trader-joe-v2.1/trader-joe-v2.1.ts +180 -180
- package/src/dex/uniswap-v2/config.ts +637 -637
- package/src/dex/uniswap-v2/constants.ts +58 -58
- package/src/dex/uniswap-v2/uniswap-v2-e2e-avalanche.test.ts +1257 -1257
- package/src/dex/uniswap-v2/uniswap-v2-e2e-base.test.ts +42 -42
- package/src/dex/uniswap-v2/uniswap-v2-e2e-bsc.test.ts +1295 -1295
- package/src/dex/uniswap-v2/uniswap-v2-e2e-mainnet.test.ts +1834 -1834
- package/src/dex/uniswap-v2/uniswap-v2-e2e-polygon.test.ts +871 -871
- package/src/dex/uniswap-v2/uniswap-v2.ts +1117 -1117
- package/src/dex/uniswap-v3/uniswap-v3.ts +1501 -1501
- package/src/dex/uniswap-v3.ts +242 -242
- package/src/dex/weth/config.ts +73 -73
- package/src/dex/weth/weth.ts +230 -230
- package/src/dex/wombat/wombat.ts +467 -467
- package/src/dex/woo-fi-v2/woo-fi-v2.ts +529 -529
- package/src/dex/wsteth/wsteth.ts +304 -304
- package/src/dex/zerox/index.ts +328 -328
- package/src/executor/Executor01BytecodeBuilder.ts +474 -474
- package/src/executor/Executor02BytecodeBuilder.ts +1392 -1392
- package/src/executor/ExecutorBytecodeBuilder.ts +390 -390
- package/src/executor/ExecutorDetector.ts +131 -131
- package/src/executor/constants.ts +66 -66
- package/src/executor/executor01-bytecode-builder-e2e.test.ts +1478 -1478
- package/src/executor/utils.ts +62 -62
- package/src/router/simpleswap.ts +366 -366
- package/src/types.ts +342 -342
- package/tests/constants-e2e.ts +1632 -1622
- package/tests/generate-new-limit-order.ts +107 -107
|
@@ -1,1478 +1,1478 @@
|
|
|
1
|
-
import dotenv from 'dotenv';
|
|
2
|
-
dotenv.config();
|
|
3
|
-
|
|
4
|
-
import { testE2E } from '../../tests/utils-e2e';
|
|
5
|
-
import { Holders, NativeTokenSymbols, Tokens } from '../../tests/constants-e2e';
|
|
6
|
-
import { ContractMethod, Network, SwapSide } from '../constants';
|
|
7
|
-
import { StaticJsonRpcProvider } from '@ethersproject/providers';
|
|
8
|
-
import { generateConfig } from '../config';
|
|
9
|
-
import { OptimalRate } from '../types';
|
|
10
|
-
|
|
11
|
-
function testForNetwork(
|
|
12
|
-
network: Network,
|
|
13
|
-
dexKey: string,
|
|
14
|
-
tokenASymbol: string,
|
|
15
|
-
tokenBSymbol: string,
|
|
16
|
-
tokenAAmount: string,
|
|
17
|
-
tokenBAmount: string,
|
|
18
|
-
nativeTokenAmount: string,
|
|
19
|
-
slippage?: number | undefined,
|
|
20
|
-
) {
|
|
21
|
-
const provider = new StaticJsonRpcProvider(
|
|
22
|
-
generateConfig(network).privateHttpProvider,
|
|
23
|
-
network,
|
|
24
|
-
);
|
|
25
|
-
const tokens = Tokens[network];
|
|
26
|
-
const holders = Holders[network];
|
|
27
|
-
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
28
|
-
|
|
29
|
-
const sideToContractMethods = new Map([
|
|
30
|
-
[SwapSide.SELL, [ContractMethod.simpleSwap]],
|
|
31
|
-
]);
|
|
32
|
-
|
|
33
|
-
describe(`${network}`, () => {
|
|
34
|
-
sideToContractMethods.forEach((contractMethods, side) =>
|
|
35
|
-
describe(`${side}`, () => {
|
|
36
|
-
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
37
|
-
describe(`${contractMethod}`, () => {
|
|
38
|
-
it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
39
|
-
await testE2E(
|
|
40
|
-
tokens[nativeTokenSymbol],
|
|
41
|
-
tokens[tokenASymbol],
|
|
42
|
-
holders[nativeTokenSymbol],
|
|
43
|
-
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
44
|
-
side,
|
|
45
|
-
dexKey,
|
|
46
|
-
contractMethod,
|
|
47
|
-
network,
|
|
48
|
-
provider,
|
|
49
|
-
undefined,
|
|
50
|
-
undefined,
|
|
51
|
-
undefined,
|
|
52
|
-
slippage,
|
|
53
|
-
2000,
|
|
54
|
-
);
|
|
55
|
-
});
|
|
56
|
-
it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
57
|
-
await testE2E(
|
|
58
|
-
tokens[tokenASymbol],
|
|
59
|
-
tokens[nativeTokenSymbol],
|
|
60
|
-
holders[tokenASymbol],
|
|
61
|
-
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
62
|
-
side,
|
|
63
|
-
dexKey,
|
|
64
|
-
contractMethod,
|
|
65
|
-
network,
|
|
66
|
-
provider,
|
|
67
|
-
undefined,
|
|
68
|
-
undefined,
|
|
69
|
-
undefined,
|
|
70
|
-
slippage,
|
|
71
|
-
2000,
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
75
|
-
await testE2E(
|
|
76
|
-
tokens[tokenASymbol],
|
|
77
|
-
tokens[tokenBSymbol],
|
|
78
|
-
holders[tokenASymbol],
|
|
79
|
-
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
80
|
-
side,
|
|
81
|
-
dexKey,
|
|
82
|
-
contractMethod,
|
|
83
|
-
network,
|
|
84
|
-
provider,
|
|
85
|
-
undefined,
|
|
86
|
-
undefined,
|
|
87
|
-
undefined,
|
|
88
|
-
slippage,
|
|
89
|
-
2000,
|
|
90
|
-
);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
}),
|
|
95
|
-
);
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
jest.setTimeout(200000);
|
|
100
|
-
describe('Executor01ByteCodeBuilder e2e tests', () => {
|
|
101
|
-
describe('Mainnet', () => {
|
|
102
|
-
const network = Network.MAINNET;
|
|
103
|
-
|
|
104
|
-
describe('SimpleSwap', () => {
|
|
105
|
-
describe('UniswapV3', () => {
|
|
106
|
-
const dexKey = 'UniswapV3';
|
|
107
|
-
|
|
108
|
-
const tokenASymbol: string = 'USDC';
|
|
109
|
-
const tokenBSymbol: string = 'USDT';
|
|
110
|
-
|
|
111
|
-
const tokenAAmount: string = '1000000';
|
|
112
|
-
const tokenBAmount: string = '1100000000';
|
|
113
|
-
const nativeTokenAmount = '1000000000000000000';
|
|
114
|
-
|
|
115
|
-
testForNetwork(
|
|
116
|
-
network,
|
|
117
|
-
dexKey,
|
|
118
|
-
tokenASymbol,
|
|
119
|
-
tokenBSymbol,
|
|
120
|
-
tokenAAmount,
|
|
121
|
-
tokenBAmount,
|
|
122
|
-
nativeTokenAmount,
|
|
123
|
-
);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
describe('SushiSwapV3', () => {
|
|
127
|
-
const dexKey = 'SushiswapV3';
|
|
128
|
-
|
|
129
|
-
const tokenASymbol: string = 'USDC';
|
|
130
|
-
const tokenBSymbol: string = 'USDT';
|
|
131
|
-
|
|
132
|
-
const tokenAAmount: string = '1000000';
|
|
133
|
-
const tokenBAmount: string = '1100000000';
|
|
134
|
-
const nativeTokenAmount = '1000000000000000000';
|
|
135
|
-
//
|
|
136
|
-
testForNetwork(
|
|
137
|
-
network,
|
|
138
|
-
dexKey,
|
|
139
|
-
tokenASymbol,
|
|
140
|
-
tokenBSymbol,
|
|
141
|
-
tokenAAmount,
|
|
142
|
-
tokenBAmount,
|
|
143
|
-
nativeTokenAmount,
|
|
144
|
-
);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
describe('BalancerV1', () => {
|
|
148
|
-
const dexKey = 'BalancerV1';
|
|
149
|
-
|
|
150
|
-
const tokenASymbol: string = 'USDC';
|
|
151
|
-
const tokenBSymbol: string = 'WBTC';
|
|
152
|
-
const tokenAAmount: string = '3333000000';
|
|
153
|
-
const tokenBAmount: string = '17000000';
|
|
154
|
-
const nativeTokenAmount = '3000000000000000000';
|
|
155
|
-
|
|
156
|
-
testForNetwork(
|
|
157
|
-
network,
|
|
158
|
-
dexKey,
|
|
159
|
-
tokenASymbol,
|
|
160
|
-
tokenBSymbol,
|
|
161
|
-
tokenAAmount,
|
|
162
|
-
tokenBAmount,
|
|
163
|
-
nativeTokenAmount,
|
|
164
|
-
);
|
|
165
|
-
|
|
166
|
-
const tokens = Tokens[network];
|
|
167
|
-
const holders = Holders[network];
|
|
168
|
-
const provider = new StaticJsonRpcProvider(
|
|
169
|
-
generateConfig(network).privateHttpProvider,
|
|
170
|
-
network,
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
it('simpleSwap USDC -> DAI', async () => {
|
|
174
|
-
await testE2E(
|
|
175
|
-
tokens['USDC'],
|
|
176
|
-
tokens['DAI'],
|
|
177
|
-
holders['USDC'],
|
|
178
|
-
'100000000',
|
|
179
|
-
SwapSide.SELL,
|
|
180
|
-
dexKey,
|
|
181
|
-
ContractMethod.simpleSwap,
|
|
182
|
-
network,
|
|
183
|
-
provider,
|
|
184
|
-
);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('simpleSwap USDC -> ETH', async () => {
|
|
188
|
-
await testE2E(
|
|
189
|
-
tokens['USDC'],
|
|
190
|
-
tokens['ETH'],
|
|
191
|
-
holders['USDC'],
|
|
192
|
-
'100000000',
|
|
193
|
-
SwapSide.SELL,
|
|
194
|
-
dexKey,
|
|
195
|
-
ContractMethod.simpleSwap,
|
|
196
|
-
network,
|
|
197
|
-
provider,
|
|
198
|
-
);
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
describe('Etherfi', () => {
|
|
203
|
-
const dexKey = 'EtherFi';
|
|
204
|
-
|
|
205
|
-
const tokens = Tokens[network];
|
|
206
|
-
const holders = Holders[network];
|
|
207
|
-
const provider = new StaticJsonRpcProvider(
|
|
208
|
-
generateConfig(network).privateHttpProvider,
|
|
209
|
-
network,
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
it('simpleSwap eETH -> weETH', async () => {
|
|
213
|
-
await testE2E(
|
|
214
|
-
tokens['eETH'],
|
|
215
|
-
tokens['weETH'],
|
|
216
|
-
holders['eETH'],
|
|
217
|
-
'100000000000000000',
|
|
218
|
-
SwapSide.SELL,
|
|
219
|
-
dexKey,
|
|
220
|
-
ContractMethod.simpleSwap,
|
|
221
|
-
network,
|
|
222
|
-
provider,
|
|
223
|
-
);
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
describe('BalancerV2', () => {
|
|
228
|
-
const dexKey = 'BalancerV2';
|
|
229
|
-
|
|
230
|
-
const tokenASymbol: string = 'USDT';
|
|
231
|
-
const tokenBSymbol: string = 'DAI';
|
|
232
|
-
const tokenAAmount: string = '100000000';
|
|
233
|
-
const tokenBAmount: string = '100000000000000000000';
|
|
234
|
-
const nativeTokenAmount = '500000000000000000';
|
|
235
|
-
|
|
236
|
-
testForNetwork(
|
|
237
|
-
network,
|
|
238
|
-
dexKey,
|
|
239
|
-
tokenASymbol,
|
|
240
|
-
tokenBSymbol,
|
|
241
|
-
tokenAAmount,
|
|
242
|
-
tokenBAmount,
|
|
243
|
-
nativeTokenAmount,
|
|
244
|
-
);
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
describe('UniswapV2Fork', () => {
|
|
248
|
-
const dexKey = 'UniswapV2';
|
|
249
|
-
|
|
250
|
-
const tokenASymbol: string = 'USDT';
|
|
251
|
-
const tokenBSymbol: string = 'DAI';
|
|
252
|
-
const tokenAAmount: string = '100000000';
|
|
253
|
-
const tokenBAmount: string = '100000000000000000000';
|
|
254
|
-
const nativeTokenAmount = '500000000000000000';
|
|
255
|
-
|
|
256
|
-
testForNetwork(
|
|
257
|
-
network,
|
|
258
|
-
dexKey,
|
|
259
|
-
tokenASymbol,
|
|
260
|
-
tokenBSymbol,
|
|
261
|
-
tokenAAmount,
|
|
262
|
-
tokenBAmount,
|
|
263
|
-
nativeTokenAmount,
|
|
264
|
-
);
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
describe('CurveV1', () => {
|
|
268
|
-
const dexKey = 'CurveV1';
|
|
269
|
-
|
|
270
|
-
const tokens = Tokens[network];
|
|
271
|
-
const holders = Holders[network];
|
|
272
|
-
const provider = new StaticJsonRpcProvider(
|
|
273
|
-
generateConfig(network).privateHttpProvider,
|
|
274
|
-
network,
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
const tokensToTest = [
|
|
278
|
-
[
|
|
279
|
-
{
|
|
280
|
-
symbol: 'USDT',
|
|
281
|
-
amount: (10 ** 8).toString(),
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
symbol: 'DAI',
|
|
285
|
-
amount: (10 ** 8).toString(),
|
|
286
|
-
},
|
|
287
|
-
],
|
|
288
|
-
[
|
|
289
|
-
{
|
|
290
|
-
symbol: 'CUSDC',
|
|
291
|
-
amount: (10 ** 8).toString(),
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
symbol: 'CDAI',
|
|
295
|
-
amount: (10 ** 8).toString(),
|
|
296
|
-
},
|
|
297
|
-
],
|
|
298
|
-
];
|
|
299
|
-
|
|
300
|
-
const sideToContractMethods = new Map([
|
|
301
|
-
[
|
|
302
|
-
SwapSide.SELL,
|
|
303
|
-
[
|
|
304
|
-
ContractMethod.simpleSwap,
|
|
305
|
-
ContractMethod.multiSwap,
|
|
306
|
-
ContractMethod.megaSwap,
|
|
307
|
-
],
|
|
308
|
-
],
|
|
309
|
-
]);
|
|
310
|
-
|
|
311
|
-
sideToContractMethods.forEach((contractMethods, side) =>
|
|
312
|
-
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
313
|
-
tokensToTest.forEach(pair => {
|
|
314
|
-
describe(`${contractMethod}`, () => {
|
|
315
|
-
it(`${pair[0].symbol} -> ${pair[1].symbol}`, async () => {
|
|
316
|
-
await testE2E(
|
|
317
|
-
tokens[pair[0].symbol],
|
|
318
|
-
tokens[pair[1].symbol],
|
|
319
|
-
holders[pair[0].symbol],
|
|
320
|
-
side === SwapSide.SELL ? pair[0].amount : pair[1].amount,
|
|
321
|
-
side,
|
|
322
|
-
dexKey,
|
|
323
|
-
contractMethod,
|
|
324
|
-
network,
|
|
325
|
-
provider,
|
|
326
|
-
);
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
});
|
|
330
|
-
}),
|
|
331
|
-
);
|
|
332
|
-
it('simpleSwap DAI -> USDT', async () => {
|
|
333
|
-
await testE2E(
|
|
334
|
-
tokens['DAI'],
|
|
335
|
-
tokens['USDT'],
|
|
336
|
-
holders['DAI'],
|
|
337
|
-
'100000000000000000000',
|
|
338
|
-
SwapSide.SELL,
|
|
339
|
-
dexKey,
|
|
340
|
-
ContractMethod.simpleSwap,
|
|
341
|
-
network,
|
|
342
|
-
provider,
|
|
343
|
-
);
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
it('USDC -> DAI', async () => {
|
|
347
|
-
await testE2E(
|
|
348
|
-
tokens['USDC'],
|
|
349
|
-
tokens['DAI'],
|
|
350
|
-
holders['USDC'],
|
|
351
|
-
'100000000',
|
|
352
|
-
SwapSide.SELL,
|
|
353
|
-
dexKey,
|
|
354
|
-
ContractMethod.simpleSwap,
|
|
355
|
-
network,
|
|
356
|
-
provider,
|
|
357
|
-
);
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
it('DAI -> GUSD', async () => {
|
|
361
|
-
await testE2E(
|
|
362
|
-
tokens['DAI'],
|
|
363
|
-
tokens['GUSD'],
|
|
364
|
-
holders['DAI'],
|
|
365
|
-
'100000000000000000000',
|
|
366
|
-
SwapSide.SELL,
|
|
367
|
-
dexKey,
|
|
368
|
-
ContractMethod.simpleSwap,
|
|
369
|
-
network,
|
|
370
|
-
provider,
|
|
371
|
-
null,
|
|
372
|
-
undefined,
|
|
373
|
-
undefined,
|
|
374
|
-
1000,
|
|
375
|
-
);
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
describe('FeeOnTransfer', () => {
|
|
379
|
-
describe('sell', () => {
|
|
380
|
-
const contractMethod = ContractMethod.megaSwap;
|
|
381
|
-
it('stETH -> ETH', async () => {
|
|
382
|
-
await testE2E(
|
|
383
|
-
tokens['STETH'],
|
|
384
|
-
tokens['ETH'],
|
|
385
|
-
holders['STETH'],
|
|
386
|
-
'1000000000000000000',
|
|
387
|
-
SwapSide.SELL,
|
|
388
|
-
dexKey,
|
|
389
|
-
contractMethod,
|
|
390
|
-
network,
|
|
391
|
-
provider,
|
|
392
|
-
undefined,
|
|
393
|
-
undefined,
|
|
394
|
-
{ srcFee: 1, destFee: 0, srcDexFee: 1, destDexFee: 0 },
|
|
395
|
-
);
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
it('ETH -> stETH', async () => {
|
|
399
|
-
await testE2E(
|
|
400
|
-
tokens['ETH'],
|
|
401
|
-
tokens['STETH'],
|
|
402
|
-
holders['ETH'],
|
|
403
|
-
'1000000000000000000',
|
|
404
|
-
SwapSide.SELL,
|
|
405
|
-
dexKey,
|
|
406
|
-
contractMethod,
|
|
407
|
-
network,
|
|
408
|
-
provider,
|
|
409
|
-
undefined,
|
|
410
|
-
undefined,
|
|
411
|
-
{ srcFee: 0, destFee: 1, srcDexFee: 0, destDexFee: 1 },
|
|
412
|
-
);
|
|
413
|
-
});
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
describe('MaverickV1', () => {
|
|
419
|
-
const dexKey = 'MaverickV1';
|
|
420
|
-
|
|
421
|
-
const tokens = Tokens[network];
|
|
422
|
-
const holders = Holders[network];
|
|
423
|
-
const provider = new StaticJsonRpcProvider(
|
|
424
|
-
generateConfig(network).privateHttpProvider,
|
|
425
|
-
network,
|
|
426
|
-
);
|
|
427
|
-
|
|
428
|
-
it('USDC -> DAI', async () => {
|
|
429
|
-
await testE2E(
|
|
430
|
-
tokens['USDC'],
|
|
431
|
-
tokens['DAI'],
|
|
432
|
-
holders['USDC'],
|
|
433
|
-
'100000000',
|
|
434
|
-
SwapSide.SELL,
|
|
435
|
-
dexKey,
|
|
436
|
-
ContractMethod.simpleSwap,
|
|
437
|
-
network,
|
|
438
|
-
provider,
|
|
439
|
-
);
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
it('ETH -> USDC', async () => {
|
|
443
|
-
await testE2E(
|
|
444
|
-
tokens['ETH'],
|
|
445
|
-
tokens['USDC'],
|
|
446
|
-
holders['ETH'],
|
|
447
|
-
'1000000000000000000',
|
|
448
|
-
SwapSide.SELL,
|
|
449
|
-
dexKey,
|
|
450
|
-
ContractMethod.simpleSwap,
|
|
451
|
-
network,
|
|
452
|
-
provider,
|
|
453
|
-
);
|
|
454
|
-
});
|
|
455
|
-
|
|
456
|
-
it('USDC -> ETH', async () => {
|
|
457
|
-
await testE2E(
|
|
458
|
-
tokens['USDC'],
|
|
459
|
-
tokens['ETH'],
|
|
460
|
-
holders['USDC'],
|
|
461
|
-
'100000000',
|
|
462
|
-
SwapSide.SELL,
|
|
463
|
-
dexKey,
|
|
464
|
-
ContractMethod.simpleSwap,
|
|
465
|
-
network,
|
|
466
|
-
provider,
|
|
467
|
-
);
|
|
468
|
-
});
|
|
469
|
-
});
|
|
470
|
-
|
|
471
|
-
describe('AaveV3', () => {
|
|
472
|
-
const dexKey = 'AaveV3';
|
|
473
|
-
|
|
474
|
-
const tokens = Tokens[network];
|
|
475
|
-
const holders = Holders[network];
|
|
476
|
-
const provider = new StaticJsonRpcProvider(
|
|
477
|
-
generateConfig(network).privateHttpProvider,
|
|
478
|
-
network,
|
|
479
|
-
);
|
|
480
|
-
|
|
481
|
-
it('USDC -> aEthUSDC', async () => {
|
|
482
|
-
await testE2E(
|
|
483
|
-
tokens['USDC'],
|
|
484
|
-
tokens['aEthUSDC'],
|
|
485
|
-
holders['USDC'],
|
|
486
|
-
'1000000',
|
|
487
|
-
SwapSide.SELL,
|
|
488
|
-
dexKey,
|
|
489
|
-
ContractMethod.simpleSwap,
|
|
490
|
-
network,
|
|
491
|
-
provider,
|
|
492
|
-
);
|
|
493
|
-
});
|
|
494
|
-
|
|
495
|
-
it('ETH -> aEthWETH', async () => {
|
|
496
|
-
await testE2E(
|
|
497
|
-
tokens['ETH'],
|
|
498
|
-
tokens['aEthWETH'],
|
|
499
|
-
holders['ETH'],
|
|
500
|
-
'300000000000000000',
|
|
501
|
-
SwapSide.SELL,
|
|
502
|
-
dexKey,
|
|
503
|
-
ContractMethod.simpleSwap,
|
|
504
|
-
network,
|
|
505
|
-
provider,
|
|
506
|
-
);
|
|
507
|
-
});
|
|
508
|
-
|
|
509
|
-
it('aEthWETH -> ETH', async () => {
|
|
510
|
-
await testE2E(
|
|
511
|
-
tokens['aEthWETH'],
|
|
512
|
-
tokens['ETH'],
|
|
513
|
-
holders['aEthWETH'],
|
|
514
|
-
'300000000000000000',
|
|
515
|
-
SwapSide.SELL,
|
|
516
|
-
dexKey,
|
|
517
|
-
ContractMethod.simpleSwap,
|
|
518
|
-
network,
|
|
519
|
-
provider,
|
|
520
|
-
);
|
|
521
|
-
});
|
|
522
|
-
});
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
describe('MutliSwap', () => {
|
|
526
|
-
describe('MaverickV1', () => {
|
|
527
|
-
describe('DAI -> USDC -> MAV via MaverickV1', () => {
|
|
528
|
-
const dexKeys = ['MaverickV1'];
|
|
529
|
-
const provider = new StaticJsonRpcProvider(
|
|
530
|
-
generateConfig(network).privateHttpProvider,
|
|
531
|
-
network,
|
|
532
|
-
);
|
|
533
|
-
const slippage = undefined;
|
|
534
|
-
|
|
535
|
-
const tokenASymbol: string = 'DAI';
|
|
536
|
-
const tokenBSymbol: string = 'MAV';
|
|
537
|
-
|
|
538
|
-
const tokenAAmount: string = '100000000000000000000';
|
|
539
|
-
|
|
540
|
-
const tokens = Tokens[network];
|
|
541
|
-
const holders = Holders[network];
|
|
542
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
543
|
-
const side = SwapSide.SELL;
|
|
544
|
-
|
|
545
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
546
|
-
await testE2E(
|
|
547
|
-
tokens[tokenASymbol],
|
|
548
|
-
tokens[tokenBSymbol],
|
|
549
|
-
holders[tokenASymbol],
|
|
550
|
-
tokenAAmount,
|
|
551
|
-
side,
|
|
552
|
-
dexKeys,
|
|
553
|
-
contractMethod,
|
|
554
|
-
network,
|
|
555
|
-
provider,
|
|
556
|
-
undefined,
|
|
557
|
-
undefined,
|
|
558
|
-
undefined,
|
|
559
|
-
slippage,
|
|
560
|
-
2000,
|
|
561
|
-
);
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
|
|
565
|
-
describe('ETH -> USDC -> MAV via MaverickV1', () => {
|
|
566
|
-
const dexKeys = ['MaverickV1'];
|
|
567
|
-
const provider = new StaticJsonRpcProvider(
|
|
568
|
-
generateConfig(network).privateHttpProvider,
|
|
569
|
-
network,
|
|
570
|
-
);
|
|
571
|
-
const slippage = undefined;
|
|
572
|
-
|
|
573
|
-
const tokenASymbol: string = 'ETH';
|
|
574
|
-
const tokenBSymbol: string = 'MAV';
|
|
575
|
-
|
|
576
|
-
const tokenAAmount: string = '1500000000000000000';
|
|
577
|
-
|
|
578
|
-
const tokens = Tokens[network];
|
|
579
|
-
const holders = Holders[network];
|
|
580
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
581
|
-
const side = SwapSide.SELL;
|
|
582
|
-
|
|
583
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
584
|
-
await testE2E(
|
|
585
|
-
tokens[tokenASymbol],
|
|
586
|
-
tokens[tokenBSymbol],
|
|
587
|
-
holders[tokenASymbol],
|
|
588
|
-
tokenAAmount,
|
|
589
|
-
side,
|
|
590
|
-
dexKeys,
|
|
591
|
-
contractMethod,
|
|
592
|
-
network,
|
|
593
|
-
provider,
|
|
594
|
-
undefined,
|
|
595
|
-
undefined,
|
|
596
|
-
undefined,
|
|
597
|
-
slippage,
|
|
598
|
-
2000,
|
|
599
|
-
);
|
|
600
|
-
});
|
|
601
|
-
});
|
|
602
|
-
|
|
603
|
-
describe('DAI -> USDC -> ETH via MaverickV1', () => {
|
|
604
|
-
const dexKeys = ['MaverickV1'];
|
|
605
|
-
const provider = new StaticJsonRpcProvider(
|
|
606
|
-
generateConfig(network).privateHttpProvider,
|
|
607
|
-
network,
|
|
608
|
-
);
|
|
609
|
-
const slippage = undefined;
|
|
610
|
-
|
|
611
|
-
const tokenASymbol: string = 'DAI';
|
|
612
|
-
const tokenBSymbol: string = 'ETH';
|
|
613
|
-
|
|
614
|
-
const tokenAAmount: string = '15000000000000000000';
|
|
615
|
-
|
|
616
|
-
const tokens = Tokens[network];
|
|
617
|
-
const holders = Holders[network];
|
|
618
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
619
|
-
const side = SwapSide.SELL;
|
|
620
|
-
|
|
621
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
622
|
-
await testE2E(
|
|
623
|
-
tokens[tokenASymbol],
|
|
624
|
-
tokens[tokenBSymbol],
|
|
625
|
-
holders[tokenASymbol],
|
|
626
|
-
tokenAAmount,
|
|
627
|
-
side,
|
|
628
|
-
dexKeys,
|
|
629
|
-
contractMethod,
|
|
630
|
-
network,
|
|
631
|
-
provider,
|
|
632
|
-
undefined,
|
|
633
|
-
undefined,
|
|
634
|
-
undefined,
|
|
635
|
-
slippage,
|
|
636
|
-
2000,
|
|
637
|
-
);
|
|
638
|
-
});
|
|
639
|
-
});
|
|
640
|
-
});
|
|
641
|
-
|
|
642
|
-
describe('SushiSwapV3', () => {
|
|
643
|
-
describe('USDC -> ETH -> WBTC via SushiSwapV3', () => {
|
|
644
|
-
const dexKeys = ['SushiSwapV3'];
|
|
645
|
-
const provider = new StaticJsonRpcProvider(
|
|
646
|
-
generateConfig(network).privateHttpProvider,
|
|
647
|
-
network,
|
|
648
|
-
);
|
|
649
|
-
const slippage = undefined;
|
|
650
|
-
|
|
651
|
-
const tokenASymbol: string = 'USDC';
|
|
652
|
-
const tokenBSymbol: string = 'WBTC';
|
|
653
|
-
|
|
654
|
-
const tokenAAmount: string = '10000000';
|
|
655
|
-
|
|
656
|
-
const tokens = Tokens[network];
|
|
657
|
-
const holders = Holders[network];
|
|
658
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
659
|
-
const side = SwapSide.SELL;
|
|
660
|
-
|
|
661
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
662
|
-
await testE2E(
|
|
663
|
-
tokens[tokenASymbol],
|
|
664
|
-
tokens[tokenBSymbol],
|
|
665
|
-
holders[tokenASymbol],
|
|
666
|
-
tokenAAmount,
|
|
667
|
-
side,
|
|
668
|
-
dexKeys,
|
|
669
|
-
contractMethod,
|
|
670
|
-
network,
|
|
671
|
-
provider,
|
|
672
|
-
undefined,
|
|
673
|
-
undefined,
|
|
674
|
-
undefined,
|
|
675
|
-
slippage,
|
|
676
|
-
2000,
|
|
677
|
-
);
|
|
678
|
-
});
|
|
679
|
-
});
|
|
680
|
-
|
|
681
|
-
describe('USDT -> USDC -> ETH via SushiSwapV3', () => {
|
|
682
|
-
const dexKeys = ['SushiSwapV3'];
|
|
683
|
-
const provider = new StaticJsonRpcProvider(
|
|
684
|
-
generateConfig(network).privateHttpProvider,
|
|
685
|
-
network,
|
|
686
|
-
);
|
|
687
|
-
const slippage = undefined;
|
|
688
|
-
|
|
689
|
-
const tokenASymbol: string = 'USDT';
|
|
690
|
-
const tokenBSymbol: string = 'ETH';
|
|
691
|
-
|
|
692
|
-
const tokenAAmount: string = '1000000000';
|
|
693
|
-
|
|
694
|
-
const tokens = Tokens[network];
|
|
695
|
-
const holders = Holders[network];
|
|
696
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
697
|
-
const side = SwapSide.SELL;
|
|
698
|
-
|
|
699
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
700
|
-
await testE2E(
|
|
701
|
-
tokens[tokenASymbol],
|
|
702
|
-
tokens[tokenBSymbol],
|
|
703
|
-
holders[tokenASymbol],
|
|
704
|
-
tokenAAmount,
|
|
705
|
-
side,
|
|
706
|
-
dexKeys,
|
|
707
|
-
contractMethod,
|
|
708
|
-
network,
|
|
709
|
-
provider,
|
|
710
|
-
undefined,
|
|
711
|
-
undefined,
|
|
712
|
-
undefined,
|
|
713
|
-
slippage,
|
|
714
|
-
2000,
|
|
715
|
-
);
|
|
716
|
-
});
|
|
717
|
-
});
|
|
718
|
-
|
|
719
|
-
describe('ETH -> USDC -> DAI via SushiSwapV3', () => {
|
|
720
|
-
const dexKeys = ['SushiSwapV3'];
|
|
721
|
-
const provider = new StaticJsonRpcProvider(
|
|
722
|
-
generateConfig(network).privateHttpProvider,
|
|
723
|
-
network,
|
|
724
|
-
);
|
|
725
|
-
const slippage = undefined;
|
|
726
|
-
|
|
727
|
-
const tokenASymbol: string = 'ETH';
|
|
728
|
-
const tokenBSymbol: string = 'DAI';
|
|
729
|
-
|
|
730
|
-
const tokenAAmount: string = '100000000000000000';
|
|
731
|
-
|
|
732
|
-
const tokens = Tokens[network];
|
|
733
|
-
const holders = Holders[network];
|
|
734
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
735
|
-
const side = SwapSide.SELL;
|
|
736
|
-
|
|
737
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
738
|
-
await testE2E(
|
|
739
|
-
tokens[tokenASymbol],
|
|
740
|
-
tokens[tokenBSymbol],
|
|
741
|
-
holders[tokenASymbol],
|
|
742
|
-
tokenAAmount,
|
|
743
|
-
side,
|
|
744
|
-
dexKeys,
|
|
745
|
-
contractMethod,
|
|
746
|
-
network,
|
|
747
|
-
provider,
|
|
748
|
-
undefined,
|
|
749
|
-
undefined,
|
|
750
|
-
undefined,
|
|
751
|
-
slippage,
|
|
752
|
-
2000,
|
|
753
|
-
);
|
|
754
|
-
});
|
|
755
|
-
});
|
|
756
|
-
|
|
757
|
-
describe('USDT -> USDC -> DAI via SushiSwapV3', () => {
|
|
758
|
-
const dexKeys = ['SushiSwapV3'];
|
|
759
|
-
const provider = new StaticJsonRpcProvider(
|
|
760
|
-
generateConfig(network).privateHttpProvider,
|
|
761
|
-
network,
|
|
762
|
-
);
|
|
763
|
-
const slippage = undefined;
|
|
764
|
-
|
|
765
|
-
const tokenASymbol: string = 'USDT';
|
|
766
|
-
const tokenBSymbol: string = 'DAI';
|
|
767
|
-
|
|
768
|
-
const tokenAAmount: string = '100000000';
|
|
769
|
-
|
|
770
|
-
const tokens = Tokens[network];
|
|
771
|
-
const holders = Holders[network];
|
|
772
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
773
|
-
const side = SwapSide.SELL;
|
|
774
|
-
|
|
775
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
776
|
-
await testE2E(
|
|
777
|
-
tokens[tokenASymbol],
|
|
778
|
-
tokens[tokenBSymbol],
|
|
779
|
-
holders[tokenASymbol],
|
|
780
|
-
tokenAAmount,
|
|
781
|
-
side,
|
|
782
|
-
dexKeys,
|
|
783
|
-
contractMethod,
|
|
784
|
-
network,
|
|
785
|
-
provider,
|
|
786
|
-
undefined,
|
|
787
|
-
undefined,
|
|
788
|
-
undefined,
|
|
789
|
-
slippage,
|
|
790
|
-
2000,
|
|
791
|
-
);
|
|
792
|
-
});
|
|
793
|
-
});
|
|
794
|
-
});
|
|
795
|
-
|
|
796
|
-
describe('BalancerV2', () => {
|
|
797
|
-
describe('WBTC -> ETH -> BAL via BalancerV2', () => {
|
|
798
|
-
const dexKeys = ['BalancerV2'];
|
|
799
|
-
const provider = new StaticJsonRpcProvider(
|
|
800
|
-
generateConfig(network).privateHttpProvider,
|
|
801
|
-
network,
|
|
802
|
-
);
|
|
803
|
-
const slippage = undefined;
|
|
804
|
-
|
|
805
|
-
const tokenASymbol: string = 'WBTC';
|
|
806
|
-
const tokenBSymbol: string = 'BAL';
|
|
807
|
-
|
|
808
|
-
const tokenAAmount: string = '500000000';
|
|
809
|
-
|
|
810
|
-
const tokens = Tokens[network];
|
|
811
|
-
const holders = Holders[network];
|
|
812
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
813
|
-
const side = SwapSide.SELL;
|
|
814
|
-
|
|
815
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
816
|
-
await testE2E(
|
|
817
|
-
tokens[tokenASymbol],
|
|
818
|
-
tokens[tokenBSymbol],
|
|
819
|
-
holders[tokenASymbol],
|
|
820
|
-
tokenAAmount,
|
|
821
|
-
side,
|
|
822
|
-
dexKeys,
|
|
823
|
-
contractMethod,
|
|
824
|
-
network,
|
|
825
|
-
provider,
|
|
826
|
-
undefined,
|
|
827
|
-
undefined,
|
|
828
|
-
undefined,
|
|
829
|
-
slippage,
|
|
830
|
-
2000,
|
|
831
|
-
);
|
|
832
|
-
});
|
|
833
|
-
});
|
|
834
|
-
|
|
835
|
-
describe('USDC -> DAI -> USDT via BalancerV2', () => {
|
|
836
|
-
const dexKeys = ['BalancerV2'];
|
|
837
|
-
const provider = new StaticJsonRpcProvider(
|
|
838
|
-
generateConfig(network).privateHttpProvider,
|
|
839
|
-
network,
|
|
840
|
-
);
|
|
841
|
-
const slippage = undefined;
|
|
842
|
-
|
|
843
|
-
const tokenASymbol: string = 'USDC';
|
|
844
|
-
const tokenBSymbol: string = 'USDT';
|
|
845
|
-
|
|
846
|
-
const tokenAAmount: string = '50000000000';
|
|
847
|
-
|
|
848
|
-
const tokens = Tokens[network];
|
|
849
|
-
const holders = Holders[network];
|
|
850
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
851
|
-
const side = SwapSide.SELL;
|
|
852
|
-
|
|
853
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
854
|
-
await testE2E(
|
|
855
|
-
tokens[tokenASymbol],
|
|
856
|
-
tokens[tokenBSymbol],
|
|
857
|
-
holders[tokenASymbol],
|
|
858
|
-
tokenAAmount,
|
|
859
|
-
side,
|
|
860
|
-
dexKeys,
|
|
861
|
-
contractMethod,
|
|
862
|
-
network,
|
|
863
|
-
provider,
|
|
864
|
-
undefined,
|
|
865
|
-
undefined,
|
|
866
|
-
undefined,
|
|
867
|
-
slippage,
|
|
868
|
-
2000,
|
|
869
|
-
false,
|
|
870
|
-
[
|
|
871
|
-
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
872
|
-
'0x6b175474e89094c44da98b954eedeac495271d0f', // DAI
|
|
873
|
-
'0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT
|
|
874
|
-
],
|
|
875
|
-
);
|
|
876
|
-
});
|
|
877
|
-
});
|
|
878
|
-
|
|
879
|
-
describe('ETH -> USDC -> DAI via BalancerV2', () => {
|
|
880
|
-
const dexKeys = ['BalancerV2'];
|
|
881
|
-
const provider = new StaticJsonRpcProvider(
|
|
882
|
-
generateConfig(network).privateHttpProvider,
|
|
883
|
-
network,
|
|
884
|
-
);
|
|
885
|
-
const slippage = undefined;
|
|
886
|
-
|
|
887
|
-
const tokenASymbol: string = 'ETH';
|
|
888
|
-
const tokenBSymbol: string = 'DAI';
|
|
889
|
-
|
|
890
|
-
const tokenAAmount: string = '1000000000000000000';
|
|
891
|
-
|
|
892
|
-
const tokens = Tokens[network];
|
|
893
|
-
const holders = Holders[network];
|
|
894
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
895
|
-
const side = SwapSide.SELL;
|
|
896
|
-
|
|
897
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
898
|
-
await testE2E(
|
|
899
|
-
tokens[tokenASymbol],
|
|
900
|
-
tokens[tokenBSymbol],
|
|
901
|
-
holders[tokenASymbol],
|
|
902
|
-
tokenAAmount,
|
|
903
|
-
side,
|
|
904
|
-
dexKeys,
|
|
905
|
-
contractMethod,
|
|
906
|
-
network,
|
|
907
|
-
provider,
|
|
908
|
-
undefined,
|
|
909
|
-
undefined,
|
|
910
|
-
undefined,
|
|
911
|
-
slippage,
|
|
912
|
-
2000,
|
|
913
|
-
false,
|
|
914
|
-
[
|
|
915
|
-
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
916
|
-
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
917
|
-
'0x6b175474e89094c44da98b954eedeac495271d0f', // BAL
|
|
918
|
-
],
|
|
919
|
-
);
|
|
920
|
-
});
|
|
921
|
-
});
|
|
922
|
-
});
|
|
923
|
-
|
|
924
|
-
describe('Dex combinations', () => {
|
|
925
|
-
describe('GUSD -> USDC -> ETH via SushiSwapV3 and CurveV1', () => {
|
|
926
|
-
const dexKeys = ['SushiSwapV3', 'CurveV1'];
|
|
927
|
-
const provider = new StaticJsonRpcProvider(
|
|
928
|
-
generateConfig(network).privateHttpProvider,
|
|
929
|
-
network,
|
|
930
|
-
);
|
|
931
|
-
const slippage = undefined;
|
|
932
|
-
|
|
933
|
-
const tokenASymbol: string = 'GUSD';
|
|
934
|
-
const tokenBSymbol: string = 'ETH';
|
|
935
|
-
|
|
936
|
-
const tokenAAmount: string = '100000';
|
|
937
|
-
|
|
938
|
-
const tokens = Tokens[network];
|
|
939
|
-
const holders = Holders[network];
|
|
940
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
941
|
-
const side = SwapSide.SELL;
|
|
942
|
-
|
|
943
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
944
|
-
await testE2E(
|
|
945
|
-
tokens[tokenASymbol],
|
|
946
|
-
tokens[tokenBSymbol],
|
|
947
|
-
holders[tokenASymbol],
|
|
948
|
-
tokenAAmount,
|
|
949
|
-
side,
|
|
950
|
-
dexKeys,
|
|
951
|
-
contractMethod,
|
|
952
|
-
network,
|
|
953
|
-
provider,
|
|
954
|
-
undefined,
|
|
955
|
-
undefined,
|
|
956
|
-
undefined,
|
|
957
|
-
slippage,
|
|
958
|
-
2000,
|
|
959
|
-
);
|
|
960
|
-
});
|
|
961
|
-
});
|
|
962
|
-
|
|
963
|
-
describe('ETH -> USDC -> GUSD via SushiSwapV3 and CurveV1', () => {
|
|
964
|
-
const dexKeys = ['SushiSwapV3', 'CurveV1'];
|
|
965
|
-
const provider = new StaticJsonRpcProvider(
|
|
966
|
-
generateConfig(network).privateHttpProvider,
|
|
967
|
-
network,
|
|
968
|
-
);
|
|
969
|
-
const slippage = undefined;
|
|
970
|
-
|
|
971
|
-
const tokenASymbol: string = 'ETH';
|
|
972
|
-
const tokenBSymbol: string = 'GUSD';
|
|
973
|
-
|
|
974
|
-
const tokenAAmount: string = '100000000000000000';
|
|
975
|
-
|
|
976
|
-
const tokens = Tokens[network];
|
|
977
|
-
const holders = Holders[network];
|
|
978
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
979
|
-
const side = SwapSide.SELL;
|
|
980
|
-
|
|
981
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
982
|
-
await testE2E(
|
|
983
|
-
tokens[tokenASymbol],
|
|
984
|
-
tokens[tokenBSymbol],
|
|
985
|
-
holders[tokenASymbol],
|
|
986
|
-
tokenAAmount,
|
|
987
|
-
side,
|
|
988
|
-
dexKeys,
|
|
989
|
-
contractMethod,
|
|
990
|
-
network,
|
|
991
|
-
provider,
|
|
992
|
-
undefined,
|
|
993
|
-
undefined,
|
|
994
|
-
undefined,
|
|
995
|
-
slippage,
|
|
996
|
-
2000,
|
|
997
|
-
);
|
|
998
|
-
});
|
|
999
|
-
});
|
|
1000
|
-
|
|
1001
|
-
describe('ETH -> USDC -> GUSD via BalancerV1 and CurveV1', () => {
|
|
1002
|
-
const dexKeys = ['BalancerV1', 'CurveV1'];
|
|
1003
|
-
const provider = new StaticJsonRpcProvider(
|
|
1004
|
-
generateConfig(network).privateHttpProvider,
|
|
1005
|
-
network,
|
|
1006
|
-
);
|
|
1007
|
-
const slippage = undefined;
|
|
1008
|
-
|
|
1009
|
-
const tokenASymbol: string = 'ETH';
|
|
1010
|
-
const tokenBSymbol: string = 'GUSD';
|
|
1011
|
-
|
|
1012
|
-
const tokenAAmount: string = '100000000000000000';
|
|
1013
|
-
|
|
1014
|
-
const tokens = Tokens[network];
|
|
1015
|
-
const holders = Holders[network];
|
|
1016
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1017
|
-
const side = SwapSide.SELL;
|
|
1018
|
-
|
|
1019
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1020
|
-
await testE2E(
|
|
1021
|
-
tokens[tokenASymbol],
|
|
1022
|
-
tokens[tokenBSymbol],
|
|
1023
|
-
holders[tokenASymbol],
|
|
1024
|
-
tokenAAmount,
|
|
1025
|
-
side,
|
|
1026
|
-
dexKeys,
|
|
1027
|
-
contractMethod,
|
|
1028
|
-
network,
|
|
1029
|
-
provider,
|
|
1030
|
-
undefined,
|
|
1031
|
-
undefined,
|
|
1032
|
-
undefined,
|
|
1033
|
-
slippage,
|
|
1034
|
-
2000,
|
|
1035
|
-
);
|
|
1036
|
-
});
|
|
1037
|
-
});
|
|
1038
|
-
|
|
1039
|
-
describe('TUSD -> DAI -> GUSD via BalancerV1 and CurveV1', () => {
|
|
1040
|
-
const dexKeys = ['CurveV1'];
|
|
1041
|
-
const provider = new StaticJsonRpcProvider(
|
|
1042
|
-
generateConfig(network).privateHttpProvider,
|
|
1043
|
-
network,
|
|
1044
|
-
);
|
|
1045
|
-
const slippage = undefined;
|
|
1046
|
-
|
|
1047
|
-
const tokenASymbol: string = 'TUSD';
|
|
1048
|
-
const tokenBSymbol: string = 'GUSD';
|
|
1049
|
-
|
|
1050
|
-
const tokenAAmount: string = '100000000000000000000';
|
|
1051
|
-
|
|
1052
|
-
const tokens = Tokens[network];
|
|
1053
|
-
const holders = Holders[network];
|
|
1054
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1055
|
-
const side = SwapSide.SELL;
|
|
1056
|
-
|
|
1057
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1058
|
-
await testE2E(
|
|
1059
|
-
tokens[tokenASymbol],
|
|
1060
|
-
tokens[tokenBSymbol],
|
|
1061
|
-
holders[tokenASymbol],
|
|
1062
|
-
tokenAAmount,
|
|
1063
|
-
side,
|
|
1064
|
-
dexKeys,
|
|
1065
|
-
contractMethod,
|
|
1066
|
-
network,
|
|
1067
|
-
provider,
|
|
1068
|
-
undefined,
|
|
1069
|
-
undefined,
|
|
1070
|
-
undefined,
|
|
1071
|
-
slippage,
|
|
1072
|
-
2000,
|
|
1073
|
-
);
|
|
1074
|
-
});
|
|
1075
|
-
});
|
|
1076
|
-
|
|
1077
|
-
describe('WBTC -> ETH -> SUSHI via BalancerV1 and SushiSwapV3', () => {
|
|
1078
|
-
const dexKeys = ['BalancerV1', 'SushiSwapV3'];
|
|
1079
|
-
const provider = new StaticJsonRpcProvider(
|
|
1080
|
-
generateConfig(network).privateHttpProvider,
|
|
1081
|
-
network,
|
|
1082
|
-
);
|
|
1083
|
-
const slippage = undefined;
|
|
1084
|
-
|
|
1085
|
-
const tokenASymbol: string = 'WBTC';
|
|
1086
|
-
const tokenBSymbol: string = 'SUSHI';
|
|
1087
|
-
|
|
1088
|
-
const tokenAAmount: string = '2000000';
|
|
1089
|
-
|
|
1090
|
-
const tokens = Tokens[network];
|
|
1091
|
-
const holders = Holders[network];
|
|
1092
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1093
|
-
const side = SwapSide.SELL;
|
|
1094
|
-
|
|
1095
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1096
|
-
await testE2E(
|
|
1097
|
-
tokens[tokenASymbol],
|
|
1098
|
-
tokens[tokenBSymbol],
|
|
1099
|
-
holders[tokenASymbol],
|
|
1100
|
-
tokenAAmount,
|
|
1101
|
-
side,
|
|
1102
|
-
dexKeys,
|
|
1103
|
-
contractMethod,
|
|
1104
|
-
network,
|
|
1105
|
-
provider,
|
|
1106
|
-
undefined,
|
|
1107
|
-
undefined,
|
|
1108
|
-
undefined,
|
|
1109
|
-
slippage,
|
|
1110
|
-
2000,
|
|
1111
|
-
);
|
|
1112
|
-
});
|
|
1113
|
-
});
|
|
1114
|
-
|
|
1115
|
-
describe('PSP -> ETH -> stETH', () => {
|
|
1116
|
-
const dexKeys = ['SushiSwap', 'Lido'];
|
|
1117
|
-
const provider = new StaticJsonRpcProvider(
|
|
1118
|
-
generateConfig(network).privateHttpProvider,
|
|
1119
|
-
network,
|
|
1120
|
-
);
|
|
1121
|
-
const slippage = undefined;
|
|
1122
|
-
|
|
1123
|
-
const tokenASymbol: string = 'PSP';
|
|
1124
|
-
const tokenBSymbol: string = 'STETH';
|
|
1125
|
-
|
|
1126
|
-
const tokenAAmount: string = '3396186773559304606863';
|
|
1127
|
-
|
|
1128
|
-
const tokens = Tokens[network];
|
|
1129
|
-
const holders = Holders[network];
|
|
1130
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1131
|
-
const side = SwapSide.SELL;
|
|
1132
|
-
|
|
1133
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1134
|
-
await testE2E(
|
|
1135
|
-
tokens[tokenASymbol],
|
|
1136
|
-
tokens[tokenBSymbol],
|
|
1137
|
-
holders[tokenASymbol],
|
|
1138
|
-
tokenAAmount,
|
|
1139
|
-
side,
|
|
1140
|
-
dexKeys,
|
|
1141
|
-
contractMethod,
|
|
1142
|
-
network,
|
|
1143
|
-
provider,
|
|
1144
|
-
undefined,
|
|
1145
|
-
undefined,
|
|
1146
|
-
undefined,
|
|
1147
|
-
slippage,
|
|
1148
|
-
2000,
|
|
1149
|
-
undefined,
|
|
1150
|
-
[
|
|
1151
|
-
'0xcafe001067cdef266afb7eb5a286dcfd277f3de5', // PSP
|
|
1152
|
-
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
1153
|
-
'0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', // stETH
|
|
1154
|
-
],
|
|
1155
|
-
);
|
|
1156
|
-
});
|
|
1157
|
-
});
|
|
1158
|
-
});
|
|
1159
|
-
});
|
|
1160
|
-
});
|
|
1161
|
-
|
|
1162
|
-
describe('Polygon', () => {
|
|
1163
|
-
const network = Network.POLYGON;
|
|
1164
|
-
|
|
1165
|
-
describe('SimpleSwap', () => {
|
|
1166
|
-
describe('Dfyn', () => {
|
|
1167
|
-
const dexKey = 'Dfyn';
|
|
1168
|
-
|
|
1169
|
-
const tokenASymbol: string = 'USDC';
|
|
1170
|
-
const tokenBSymbol: string = 'WBTC';
|
|
1171
|
-
|
|
1172
|
-
const tokenAAmount: string = '10000000';
|
|
1173
|
-
const tokenBAmount: string = '10000000';
|
|
1174
|
-
const nativeTokenAmount = '1000000000000000000';
|
|
1175
|
-
|
|
1176
|
-
testForNetwork(
|
|
1177
|
-
network,
|
|
1178
|
-
dexKey,
|
|
1179
|
-
tokenASymbol,
|
|
1180
|
-
tokenBSymbol,
|
|
1181
|
-
tokenAAmount,
|
|
1182
|
-
tokenBAmount,
|
|
1183
|
-
nativeTokenAmount,
|
|
1184
|
-
);
|
|
1185
|
-
});
|
|
1186
|
-
});
|
|
1187
|
-
|
|
1188
|
-
describe('MultiSwap', () => {
|
|
1189
|
-
describe('USDC.e -> MATIC -> CRV via Dystopia and QuickSwap', () => {
|
|
1190
|
-
const dexKeys = ['Dystopia', 'QuickSwap'];
|
|
1191
|
-
const provider = new StaticJsonRpcProvider(
|
|
1192
|
-
generateConfig(network).privateHttpProvider,
|
|
1193
|
-
network,
|
|
1194
|
-
);
|
|
1195
|
-
const slippage = undefined;
|
|
1196
|
-
|
|
1197
|
-
const tokenASymbol: string = 'USDC';
|
|
1198
|
-
const tokenBSymbol: string = 'CRV';
|
|
1199
|
-
|
|
1200
|
-
const tokenAAmount: string = '4439351';
|
|
1201
|
-
|
|
1202
|
-
const tokens = Tokens[network];
|
|
1203
|
-
const holders = Holders[network];
|
|
1204
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1205
|
-
const side = SwapSide.SELL;
|
|
1206
|
-
|
|
1207
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1208
|
-
await testE2E(
|
|
1209
|
-
tokens[tokenASymbol],
|
|
1210
|
-
tokens[tokenBSymbol],
|
|
1211
|
-
holders[tokenASymbol],
|
|
1212
|
-
tokenAAmount,
|
|
1213
|
-
side,
|
|
1214
|
-
dexKeys,
|
|
1215
|
-
contractMethod,
|
|
1216
|
-
network,
|
|
1217
|
-
provider,
|
|
1218
|
-
undefined,
|
|
1219
|
-
undefined,
|
|
1220
|
-
undefined,
|
|
1221
|
-
slippage,
|
|
1222
|
-
2000,
|
|
1223
|
-
);
|
|
1224
|
-
});
|
|
1225
|
-
});
|
|
1226
|
-
|
|
1227
|
-
// describe('MATIC -> ETH -> SUSHI via Dfyn and SushiV3', () => {
|
|
1228
|
-
// const dexKeys = ['Dfyn', 'SushiSwapV3'];
|
|
1229
|
-
// const provider = new StaticJsonRpcProvider(
|
|
1230
|
-
// generateConfig(network).privateHttpProvider,
|
|
1231
|
-
// network,
|
|
1232
|
-
// );
|
|
1233
|
-
// const slippage = undefined;
|
|
1234
|
-
//
|
|
1235
|
-
// const tokenASymbol: string = 'MATIC';
|
|
1236
|
-
// const tokenBSymbol: string = 'SUSHI';
|
|
1237
|
-
//
|
|
1238
|
-
// const tokenAAmount: string = '10000000000000000000';
|
|
1239
|
-
//
|
|
1240
|
-
// const tokens = Tokens[network];
|
|
1241
|
-
// const holders = Holders[network];
|
|
1242
|
-
// const contractMethod = ContractMethod.multiSwap;
|
|
1243
|
-
// const side = SwapSide.SELL;
|
|
1244
|
-
//
|
|
1245
|
-
// it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1246
|
-
// await testE2E(
|
|
1247
|
-
// tokens[tokenASymbol],
|
|
1248
|
-
// tokens[tokenBSymbol],
|
|
1249
|
-
// holders[tokenASymbol],
|
|
1250
|
-
// tokenAAmount,
|
|
1251
|
-
// side,
|
|
1252
|
-
// dexKeys,
|
|
1253
|
-
// contractMethod,
|
|
1254
|
-
// network,
|
|
1255
|
-
// provider,
|
|
1256
|
-
// undefined,
|
|
1257
|
-
// undefined,
|
|
1258
|
-
// undefined,
|
|
1259
|
-
// slippage,
|
|
1260
|
-
// 2000,
|
|
1261
|
-
// );
|
|
1262
|
-
// });
|
|
1263
|
-
// });
|
|
1264
|
-
});
|
|
1265
|
-
});
|
|
1266
|
-
|
|
1267
|
-
describe('Optimism', () => {
|
|
1268
|
-
const network = Network.OPTIMISM;
|
|
1269
|
-
|
|
1270
|
-
describe('MultiSwap', () => {
|
|
1271
|
-
describe('USDC -> ETH -> sETH', () => {
|
|
1272
|
-
const dexKeys = ['UniswapV3', 'CurveV1Factory'];
|
|
1273
|
-
const provider = new StaticJsonRpcProvider(
|
|
1274
|
-
generateConfig(network).privateHttpProvider,
|
|
1275
|
-
network,
|
|
1276
|
-
);
|
|
1277
|
-
const slippage = undefined;
|
|
1278
|
-
|
|
1279
|
-
const tokenASymbol: string = 'USDC';
|
|
1280
|
-
const tokenBSymbol: string = 'sETH';
|
|
1281
|
-
|
|
1282
|
-
const tokenAAmount: string = '1617000000';
|
|
1283
|
-
|
|
1284
|
-
const tokens = Tokens[network];
|
|
1285
|
-
const holders = Holders[network];
|
|
1286
|
-
const contractMethod = ContractMethod.multiSwap;
|
|
1287
|
-
const side = SwapSide.SELL;
|
|
1288
|
-
|
|
1289
|
-
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1290
|
-
await testE2E(
|
|
1291
|
-
tokens[tokenASymbol],
|
|
1292
|
-
tokens[tokenBSymbol],
|
|
1293
|
-
holders[tokenASymbol],
|
|
1294
|
-
tokenAAmount,
|
|
1295
|
-
side,
|
|
1296
|
-
dexKeys,
|
|
1297
|
-
contractMethod,
|
|
1298
|
-
network,
|
|
1299
|
-
provider,
|
|
1300
|
-
undefined,
|
|
1301
|
-
undefined,
|
|
1302
|
-
undefined,
|
|
1303
|
-
slippage,
|
|
1304
|
-
2000,
|
|
1305
|
-
);
|
|
1306
|
-
});
|
|
1307
|
-
});
|
|
1308
|
-
});
|
|
1309
|
-
});
|
|
1310
|
-
|
|
1311
|
-
// describe('Arbitrum', () => {
|
|
1312
|
-
// const network = Network.ARBITRUM;
|
|
1313
|
-
// describe('MultiSwap', () => {
|
|
1314
|
-
// const priceRoute = {
|
|
1315
|
-
// blockNumber: 184603981,
|
|
1316
|
-
// network: 42161,
|
|
1317
|
-
// srcToken: '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1318
|
-
// srcDecimals: 18,
|
|
1319
|
-
// srcAmount: '10000000000000000000',
|
|
1320
|
-
// destToken: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1321
|
-
// destDecimals: 18,
|
|
1322
|
-
// destAmount: '58376015865102035852',
|
|
1323
|
-
// bestRoute: [
|
|
1324
|
-
// {
|
|
1325
|
-
// percent: 100,
|
|
1326
|
-
// swaps: [
|
|
1327
|
-
// {
|
|
1328
|
-
// srcToken: '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1329
|
-
// srcDecimals: 18,
|
|
1330
|
-
// destToken: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1331
|
-
// destDecimals: 6,
|
|
1332
|
-
// swapExchanges: [
|
|
1333
|
-
// {
|
|
1334
|
-
// exchange: 'Camelot',
|
|
1335
|
-
// srcAmount: '10000000000000000000',
|
|
1336
|
-
// destAmount: '160519565',
|
|
1337
|
-
// percent: 100,
|
|
1338
|
-
// poolAddresses: ['0x410c879c62f22794bD5eE98e2EE01490F6d47A6b'],
|
|
1339
|
-
// data: {
|
|
1340
|
-
// router: '0x1Be46c7A40906c19d91d07B3AE69Ef5893268F25',
|
|
1341
|
-
// path: [
|
|
1342
|
-
// '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1343
|
-
// '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1344
|
-
// ],
|
|
1345
|
-
// factory: '0x6EcCab422D763aC031210895C81787E87B43A652',
|
|
1346
|
-
// initCode:
|
|
1347
|
-
// '0xa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1',
|
|
1348
|
-
// feeFactor: 100000,
|
|
1349
|
-
// isFeeTokenInRoute: false,
|
|
1350
|
-
// pools: [
|
|
1351
|
-
// {
|
|
1352
|
-
// address: '0x410c879c62f22794bD5eE98e2EE01490F6d47A6b',
|
|
1353
|
-
// fee: 500,
|
|
1354
|
-
// direction: true,
|
|
1355
|
-
// },
|
|
1356
|
-
// ],
|
|
1357
|
-
// gasUSD: '0.323201',
|
|
1358
|
-
// },
|
|
1359
|
-
// },
|
|
1360
|
-
// ],
|
|
1361
|
-
// },
|
|
1362
|
-
// {
|
|
1363
|
-
// srcToken: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1364
|
-
// srcDecimals: 6,
|
|
1365
|
-
// destToken: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1366
|
-
// destDecimals: 18,
|
|
1367
|
-
// swapExchanges: [
|
|
1368
|
-
// {
|
|
1369
|
-
// exchange: 'Camelot',
|
|
1370
|
-
// srcAmount: '160519565',
|
|
1371
|
-
// destAmount: '51771474390335981',
|
|
1372
|
-
// percent: 100,
|
|
1373
|
-
// poolAddresses: ['0x84652bb2539513BAf36e225c930Fdd8eaa63CE27'],
|
|
1374
|
-
// data: {
|
|
1375
|
-
// router: '0x1Be46c7A40906c19d91d07B3AE69Ef5893268F25',
|
|
1376
|
-
// path: [
|
|
1377
|
-
// '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1378
|
-
// '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1379
|
-
// ],
|
|
1380
|
-
// factory: '0x6EcCab422D763aC031210895C81787E87B43A652',
|
|
1381
|
-
// initCode:
|
|
1382
|
-
// '0xa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1',
|
|
1383
|
-
// feeFactor: 100000,
|
|
1384
|
-
// isFeeTokenInRoute: false,
|
|
1385
|
-
// pools: [
|
|
1386
|
-
// {
|
|
1387
|
-
// address: '0x84652bb2539513BAf36e225c930Fdd8eaa63CE27',
|
|
1388
|
-
// fee: 300,
|
|
1389
|
-
// direction: false,
|
|
1390
|
-
// },
|
|
1391
|
-
// ],
|
|
1392
|
-
// gasUSD: '0.323201',
|
|
1393
|
-
// },
|
|
1394
|
-
// },
|
|
1395
|
-
// ],
|
|
1396
|
-
// },
|
|
1397
|
-
// {
|
|
1398
|
-
// srcToken: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1399
|
-
// srcDecimals: 18,
|
|
1400
|
-
// destToken: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1401
|
-
// destDecimals: 18,
|
|
1402
|
-
// swapExchanges: [
|
|
1403
|
-
// {
|
|
1404
|
-
// exchange: 'CamelotV3',
|
|
1405
|
-
// srcAmount: '51771474390335981',
|
|
1406
|
-
// destAmount: '58376015865102035852',
|
|
1407
|
-
// percent: 100,
|
|
1408
|
-
// poolAddresses: ['0xe461f84c3fe6bcdd1162eb0ef4284f3bb6e4cad3'],
|
|
1409
|
-
// data: {
|
|
1410
|
-
// feeOnTransfer: false,
|
|
1411
|
-
// path: [
|
|
1412
|
-
// {
|
|
1413
|
-
// tokenIn: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1414
|
-
// tokenOut: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1415
|
-
// },
|
|
1416
|
-
// ],
|
|
1417
|
-
// gasUSD: '0.290559',
|
|
1418
|
-
// },
|
|
1419
|
-
// },
|
|
1420
|
-
// ],
|
|
1421
|
-
// },
|
|
1422
|
-
// ],
|
|
1423
|
-
// },
|
|
1424
|
-
// ],
|
|
1425
|
-
// gasCostUSD: '1.757908',
|
|
1426
|
-
// gasCost: '598300',
|
|
1427
|
-
// others: [],
|
|
1428
|
-
// side: 'SELL',
|
|
1429
|
-
// tokenTransferProxy: '0x216b4b4ba9f3e719726886d34a177484278bfcae',
|
|
1430
|
-
// contractAddress: '0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57',
|
|
1431
|
-
// contractMethod: 'multiSwap',
|
|
1432
|
-
// partnerFee: 0,
|
|
1433
|
-
// srcUSD: '160.9000000000',
|
|
1434
|
-
// destUSD: '159.3665233117',
|
|
1435
|
-
// partner: 'Camelot',
|
|
1436
|
-
// maxImpactReached: false,
|
|
1437
|
-
// hmac: 'c53e8a540a60a7d05aa50865d306f8d5458243a1',
|
|
1438
|
-
// } as unknown as OptimalRate;
|
|
1439
|
-
// describe('DMT-> USDC.e -> WETH -> PENDLE via Camelot and CamelotV3', () => {
|
|
1440
|
-
// const dexKeys = ['Camelot', 'CamelotV3'];
|
|
1441
|
-
// const provider = new StaticJsonRpcProvider(
|
|
1442
|
-
// generateConfig(network).privateHttpProvider,
|
|
1443
|
-
// network,
|
|
1444
|
-
// );
|
|
1445
|
-
// const slippage = undefined;
|
|
1446
|
-
//
|
|
1447
|
-
// const tokenASymbol: string = 'DMT';
|
|
1448
|
-
// const tokenBSymbol: string = 'PENDLE';
|
|
1449
|
-
//
|
|
1450
|
-
// const tokenAAmount: string = '10000000000000000000';
|
|
1451
|
-
//
|
|
1452
|
-
// const tokens = Tokens[network];
|
|
1453
|
-
// const holders = Holders[network];
|
|
1454
|
-
// const contractMethod = ContractMethod.multiSwap;
|
|
1455
|
-
// const side = SwapSide.SELL;
|
|
1456
|
-
//
|
|
1457
|
-
// it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1458
|
-
// await testE2E(
|
|
1459
|
-
// tokens[tokenASymbol],
|
|
1460
|
-
// tokens[tokenBSymbol],
|
|
1461
|
-
// holders[tokenASymbol],
|
|
1462
|
-
// tokenAAmount,
|
|
1463
|
-
// side,
|
|
1464
|
-
// dexKeys,
|
|
1465
|
-
// contractMethod,
|
|
1466
|
-
// network,
|
|
1467
|
-
// provider,
|
|
1468
|
-
// undefined,
|
|
1469
|
-
// undefined,
|
|
1470
|
-
// undefined,
|
|
1471
|
-
// slippage,
|
|
1472
|
-
// 2000,
|
|
1473
|
-
// );
|
|
1474
|
-
// });
|
|
1475
|
-
// });
|
|
1476
|
-
// });
|
|
1477
|
-
// });
|
|
1478
|
-
});
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
dotenv.config();
|
|
3
|
+
|
|
4
|
+
import { testE2E } from '../../tests/utils-e2e';
|
|
5
|
+
import { Holders, NativeTokenSymbols, Tokens } from '../../tests/constants-e2e';
|
|
6
|
+
import { ContractMethod, Network, SwapSide } from '../constants';
|
|
7
|
+
import { StaticJsonRpcProvider } from '@ethersproject/providers';
|
|
8
|
+
import { generateConfig } from '../config';
|
|
9
|
+
import { OptimalRate } from '../types';
|
|
10
|
+
|
|
11
|
+
function testForNetwork(
|
|
12
|
+
network: Network,
|
|
13
|
+
dexKey: string,
|
|
14
|
+
tokenASymbol: string,
|
|
15
|
+
tokenBSymbol: string,
|
|
16
|
+
tokenAAmount: string,
|
|
17
|
+
tokenBAmount: string,
|
|
18
|
+
nativeTokenAmount: string,
|
|
19
|
+
slippage?: number | undefined,
|
|
20
|
+
) {
|
|
21
|
+
const provider = new StaticJsonRpcProvider(
|
|
22
|
+
generateConfig(network).privateHttpProvider,
|
|
23
|
+
network,
|
|
24
|
+
);
|
|
25
|
+
const tokens = Tokens[network];
|
|
26
|
+
const holders = Holders[network];
|
|
27
|
+
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
28
|
+
|
|
29
|
+
const sideToContractMethods = new Map([
|
|
30
|
+
[SwapSide.SELL, [ContractMethod.simpleSwap]],
|
|
31
|
+
]);
|
|
32
|
+
|
|
33
|
+
describe(`${network}`, () => {
|
|
34
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
35
|
+
describe(`${side}`, () => {
|
|
36
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
37
|
+
describe(`${contractMethod}`, () => {
|
|
38
|
+
it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
39
|
+
await testE2E(
|
|
40
|
+
tokens[nativeTokenSymbol],
|
|
41
|
+
tokens[tokenASymbol],
|
|
42
|
+
holders[nativeTokenSymbol],
|
|
43
|
+
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
44
|
+
side,
|
|
45
|
+
dexKey,
|
|
46
|
+
contractMethod,
|
|
47
|
+
network,
|
|
48
|
+
provider,
|
|
49
|
+
undefined,
|
|
50
|
+
undefined,
|
|
51
|
+
undefined,
|
|
52
|
+
slippage,
|
|
53
|
+
2000,
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
57
|
+
await testE2E(
|
|
58
|
+
tokens[tokenASymbol],
|
|
59
|
+
tokens[nativeTokenSymbol],
|
|
60
|
+
holders[tokenASymbol],
|
|
61
|
+
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
62
|
+
side,
|
|
63
|
+
dexKey,
|
|
64
|
+
contractMethod,
|
|
65
|
+
network,
|
|
66
|
+
provider,
|
|
67
|
+
undefined,
|
|
68
|
+
undefined,
|
|
69
|
+
undefined,
|
|
70
|
+
slippage,
|
|
71
|
+
2000,
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
75
|
+
await testE2E(
|
|
76
|
+
tokens[tokenASymbol],
|
|
77
|
+
tokens[tokenBSymbol],
|
|
78
|
+
holders[tokenASymbol],
|
|
79
|
+
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
80
|
+
side,
|
|
81
|
+
dexKey,
|
|
82
|
+
contractMethod,
|
|
83
|
+
network,
|
|
84
|
+
provider,
|
|
85
|
+
undefined,
|
|
86
|
+
undefined,
|
|
87
|
+
undefined,
|
|
88
|
+
slippage,
|
|
89
|
+
2000,
|
|
90
|
+
);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}),
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
jest.setTimeout(200000);
|
|
100
|
+
describe('Executor01ByteCodeBuilder e2e tests', () => {
|
|
101
|
+
describe('Mainnet', () => {
|
|
102
|
+
const network = Network.MAINNET;
|
|
103
|
+
|
|
104
|
+
describe('SimpleSwap', () => {
|
|
105
|
+
describe('UniswapV3', () => {
|
|
106
|
+
const dexKey = 'UniswapV3';
|
|
107
|
+
|
|
108
|
+
const tokenASymbol: string = 'USDC';
|
|
109
|
+
const tokenBSymbol: string = 'USDT';
|
|
110
|
+
|
|
111
|
+
const tokenAAmount: string = '1000000';
|
|
112
|
+
const tokenBAmount: string = '1100000000';
|
|
113
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
114
|
+
|
|
115
|
+
testForNetwork(
|
|
116
|
+
network,
|
|
117
|
+
dexKey,
|
|
118
|
+
tokenASymbol,
|
|
119
|
+
tokenBSymbol,
|
|
120
|
+
tokenAAmount,
|
|
121
|
+
tokenBAmount,
|
|
122
|
+
nativeTokenAmount,
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('SushiSwapV3', () => {
|
|
127
|
+
const dexKey = 'SushiswapV3';
|
|
128
|
+
|
|
129
|
+
const tokenASymbol: string = 'USDC';
|
|
130
|
+
const tokenBSymbol: string = 'USDT';
|
|
131
|
+
|
|
132
|
+
const tokenAAmount: string = '1000000';
|
|
133
|
+
const tokenBAmount: string = '1100000000';
|
|
134
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
135
|
+
//
|
|
136
|
+
testForNetwork(
|
|
137
|
+
network,
|
|
138
|
+
dexKey,
|
|
139
|
+
tokenASymbol,
|
|
140
|
+
tokenBSymbol,
|
|
141
|
+
tokenAAmount,
|
|
142
|
+
tokenBAmount,
|
|
143
|
+
nativeTokenAmount,
|
|
144
|
+
);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe('BalancerV1', () => {
|
|
148
|
+
const dexKey = 'BalancerV1';
|
|
149
|
+
|
|
150
|
+
const tokenASymbol: string = 'USDC';
|
|
151
|
+
const tokenBSymbol: string = 'WBTC';
|
|
152
|
+
const tokenAAmount: string = '3333000000';
|
|
153
|
+
const tokenBAmount: string = '17000000';
|
|
154
|
+
const nativeTokenAmount = '3000000000000000000';
|
|
155
|
+
|
|
156
|
+
testForNetwork(
|
|
157
|
+
network,
|
|
158
|
+
dexKey,
|
|
159
|
+
tokenASymbol,
|
|
160
|
+
tokenBSymbol,
|
|
161
|
+
tokenAAmount,
|
|
162
|
+
tokenBAmount,
|
|
163
|
+
nativeTokenAmount,
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const tokens = Tokens[network];
|
|
167
|
+
const holders = Holders[network];
|
|
168
|
+
const provider = new StaticJsonRpcProvider(
|
|
169
|
+
generateConfig(network).privateHttpProvider,
|
|
170
|
+
network,
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
it('simpleSwap USDC -> DAI', async () => {
|
|
174
|
+
await testE2E(
|
|
175
|
+
tokens['USDC'],
|
|
176
|
+
tokens['DAI'],
|
|
177
|
+
holders['USDC'],
|
|
178
|
+
'100000000',
|
|
179
|
+
SwapSide.SELL,
|
|
180
|
+
dexKey,
|
|
181
|
+
ContractMethod.simpleSwap,
|
|
182
|
+
network,
|
|
183
|
+
provider,
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it('simpleSwap USDC -> ETH', async () => {
|
|
188
|
+
await testE2E(
|
|
189
|
+
tokens['USDC'],
|
|
190
|
+
tokens['ETH'],
|
|
191
|
+
holders['USDC'],
|
|
192
|
+
'100000000',
|
|
193
|
+
SwapSide.SELL,
|
|
194
|
+
dexKey,
|
|
195
|
+
ContractMethod.simpleSwap,
|
|
196
|
+
network,
|
|
197
|
+
provider,
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
describe('Etherfi', () => {
|
|
203
|
+
const dexKey = 'EtherFi';
|
|
204
|
+
|
|
205
|
+
const tokens = Tokens[network];
|
|
206
|
+
const holders = Holders[network];
|
|
207
|
+
const provider = new StaticJsonRpcProvider(
|
|
208
|
+
generateConfig(network).privateHttpProvider,
|
|
209
|
+
network,
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
it('simpleSwap eETH -> weETH', async () => {
|
|
213
|
+
await testE2E(
|
|
214
|
+
tokens['eETH'],
|
|
215
|
+
tokens['weETH'],
|
|
216
|
+
holders['eETH'],
|
|
217
|
+
'100000000000000000',
|
|
218
|
+
SwapSide.SELL,
|
|
219
|
+
dexKey,
|
|
220
|
+
ContractMethod.simpleSwap,
|
|
221
|
+
network,
|
|
222
|
+
provider,
|
|
223
|
+
);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
describe('BalancerV2', () => {
|
|
228
|
+
const dexKey = 'BalancerV2';
|
|
229
|
+
|
|
230
|
+
const tokenASymbol: string = 'USDT';
|
|
231
|
+
const tokenBSymbol: string = 'DAI';
|
|
232
|
+
const tokenAAmount: string = '100000000';
|
|
233
|
+
const tokenBAmount: string = '100000000000000000000';
|
|
234
|
+
const nativeTokenAmount = '500000000000000000';
|
|
235
|
+
|
|
236
|
+
testForNetwork(
|
|
237
|
+
network,
|
|
238
|
+
dexKey,
|
|
239
|
+
tokenASymbol,
|
|
240
|
+
tokenBSymbol,
|
|
241
|
+
tokenAAmount,
|
|
242
|
+
tokenBAmount,
|
|
243
|
+
nativeTokenAmount,
|
|
244
|
+
);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
describe('UniswapV2Fork', () => {
|
|
248
|
+
const dexKey = 'UniswapV2';
|
|
249
|
+
|
|
250
|
+
const tokenASymbol: string = 'USDT';
|
|
251
|
+
const tokenBSymbol: string = 'DAI';
|
|
252
|
+
const tokenAAmount: string = '100000000';
|
|
253
|
+
const tokenBAmount: string = '100000000000000000000';
|
|
254
|
+
const nativeTokenAmount = '500000000000000000';
|
|
255
|
+
|
|
256
|
+
testForNetwork(
|
|
257
|
+
network,
|
|
258
|
+
dexKey,
|
|
259
|
+
tokenASymbol,
|
|
260
|
+
tokenBSymbol,
|
|
261
|
+
tokenAAmount,
|
|
262
|
+
tokenBAmount,
|
|
263
|
+
nativeTokenAmount,
|
|
264
|
+
);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
describe('CurveV1', () => {
|
|
268
|
+
const dexKey = 'CurveV1';
|
|
269
|
+
|
|
270
|
+
const tokens = Tokens[network];
|
|
271
|
+
const holders = Holders[network];
|
|
272
|
+
const provider = new StaticJsonRpcProvider(
|
|
273
|
+
generateConfig(network).privateHttpProvider,
|
|
274
|
+
network,
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
const tokensToTest = [
|
|
278
|
+
[
|
|
279
|
+
{
|
|
280
|
+
symbol: 'USDT',
|
|
281
|
+
amount: (10 ** 8).toString(),
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
symbol: 'DAI',
|
|
285
|
+
amount: (10 ** 8).toString(),
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
[
|
|
289
|
+
{
|
|
290
|
+
symbol: 'CUSDC',
|
|
291
|
+
amount: (10 ** 8).toString(),
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
symbol: 'CDAI',
|
|
295
|
+
amount: (10 ** 8).toString(),
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
];
|
|
299
|
+
|
|
300
|
+
const sideToContractMethods = new Map([
|
|
301
|
+
[
|
|
302
|
+
SwapSide.SELL,
|
|
303
|
+
[
|
|
304
|
+
ContractMethod.simpleSwap,
|
|
305
|
+
ContractMethod.multiSwap,
|
|
306
|
+
ContractMethod.megaSwap,
|
|
307
|
+
],
|
|
308
|
+
],
|
|
309
|
+
]);
|
|
310
|
+
|
|
311
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
312
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
313
|
+
tokensToTest.forEach(pair => {
|
|
314
|
+
describe(`${contractMethod}`, () => {
|
|
315
|
+
it(`${pair[0].symbol} -> ${pair[1].symbol}`, async () => {
|
|
316
|
+
await testE2E(
|
|
317
|
+
tokens[pair[0].symbol],
|
|
318
|
+
tokens[pair[1].symbol],
|
|
319
|
+
holders[pair[0].symbol],
|
|
320
|
+
side === SwapSide.SELL ? pair[0].amount : pair[1].amount,
|
|
321
|
+
side,
|
|
322
|
+
dexKey,
|
|
323
|
+
contractMethod,
|
|
324
|
+
network,
|
|
325
|
+
provider,
|
|
326
|
+
);
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
}),
|
|
331
|
+
);
|
|
332
|
+
it('simpleSwap DAI -> USDT', async () => {
|
|
333
|
+
await testE2E(
|
|
334
|
+
tokens['DAI'],
|
|
335
|
+
tokens['USDT'],
|
|
336
|
+
holders['DAI'],
|
|
337
|
+
'100000000000000000000',
|
|
338
|
+
SwapSide.SELL,
|
|
339
|
+
dexKey,
|
|
340
|
+
ContractMethod.simpleSwap,
|
|
341
|
+
network,
|
|
342
|
+
provider,
|
|
343
|
+
);
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
it('USDC -> DAI', async () => {
|
|
347
|
+
await testE2E(
|
|
348
|
+
tokens['USDC'],
|
|
349
|
+
tokens['DAI'],
|
|
350
|
+
holders['USDC'],
|
|
351
|
+
'100000000',
|
|
352
|
+
SwapSide.SELL,
|
|
353
|
+
dexKey,
|
|
354
|
+
ContractMethod.simpleSwap,
|
|
355
|
+
network,
|
|
356
|
+
provider,
|
|
357
|
+
);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
it('DAI -> GUSD', async () => {
|
|
361
|
+
await testE2E(
|
|
362
|
+
tokens['DAI'],
|
|
363
|
+
tokens['GUSD'],
|
|
364
|
+
holders['DAI'],
|
|
365
|
+
'100000000000000000000',
|
|
366
|
+
SwapSide.SELL,
|
|
367
|
+
dexKey,
|
|
368
|
+
ContractMethod.simpleSwap,
|
|
369
|
+
network,
|
|
370
|
+
provider,
|
|
371
|
+
null,
|
|
372
|
+
undefined,
|
|
373
|
+
undefined,
|
|
374
|
+
1000,
|
|
375
|
+
);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
describe('FeeOnTransfer', () => {
|
|
379
|
+
describe('sell', () => {
|
|
380
|
+
const contractMethod = ContractMethod.megaSwap;
|
|
381
|
+
it('stETH -> ETH', async () => {
|
|
382
|
+
await testE2E(
|
|
383
|
+
tokens['STETH'],
|
|
384
|
+
tokens['ETH'],
|
|
385
|
+
holders['STETH'],
|
|
386
|
+
'1000000000000000000',
|
|
387
|
+
SwapSide.SELL,
|
|
388
|
+
dexKey,
|
|
389
|
+
contractMethod,
|
|
390
|
+
network,
|
|
391
|
+
provider,
|
|
392
|
+
undefined,
|
|
393
|
+
undefined,
|
|
394
|
+
{ srcFee: 1, destFee: 0, srcDexFee: 1, destDexFee: 0 },
|
|
395
|
+
);
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
it('ETH -> stETH', async () => {
|
|
399
|
+
await testE2E(
|
|
400
|
+
tokens['ETH'],
|
|
401
|
+
tokens['STETH'],
|
|
402
|
+
holders['ETH'],
|
|
403
|
+
'1000000000000000000',
|
|
404
|
+
SwapSide.SELL,
|
|
405
|
+
dexKey,
|
|
406
|
+
contractMethod,
|
|
407
|
+
network,
|
|
408
|
+
provider,
|
|
409
|
+
undefined,
|
|
410
|
+
undefined,
|
|
411
|
+
{ srcFee: 0, destFee: 1, srcDexFee: 0, destDexFee: 1 },
|
|
412
|
+
);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
describe('MaverickV1', () => {
|
|
419
|
+
const dexKey = 'MaverickV1';
|
|
420
|
+
|
|
421
|
+
const tokens = Tokens[network];
|
|
422
|
+
const holders = Holders[network];
|
|
423
|
+
const provider = new StaticJsonRpcProvider(
|
|
424
|
+
generateConfig(network).privateHttpProvider,
|
|
425
|
+
network,
|
|
426
|
+
);
|
|
427
|
+
|
|
428
|
+
it('USDC -> DAI', async () => {
|
|
429
|
+
await testE2E(
|
|
430
|
+
tokens['USDC'],
|
|
431
|
+
tokens['DAI'],
|
|
432
|
+
holders['USDC'],
|
|
433
|
+
'100000000',
|
|
434
|
+
SwapSide.SELL,
|
|
435
|
+
dexKey,
|
|
436
|
+
ContractMethod.simpleSwap,
|
|
437
|
+
network,
|
|
438
|
+
provider,
|
|
439
|
+
);
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
it('ETH -> USDC', async () => {
|
|
443
|
+
await testE2E(
|
|
444
|
+
tokens['ETH'],
|
|
445
|
+
tokens['USDC'],
|
|
446
|
+
holders['ETH'],
|
|
447
|
+
'1000000000000000000',
|
|
448
|
+
SwapSide.SELL,
|
|
449
|
+
dexKey,
|
|
450
|
+
ContractMethod.simpleSwap,
|
|
451
|
+
network,
|
|
452
|
+
provider,
|
|
453
|
+
);
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
it('USDC -> ETH', async () => {
|
|
457
|
+
await testE2E(
|
|
458
|
+
tokens['USDC'],
|
|
459
|
+
tokens['ETH'],
|
|
460
|
+
holders['USDC'],
|
|
461
|
+
'100000000',
|
|
462
|
+
SwapSide.SELL,
|
|
463
|
+
dexKey,
|
|
464
|
+
ContractMethod.simpleSwap,
|
|
465
|
+
network,
|
|
466
|
+
provider,
|
|
467
|
+
);
|
|
468
|
+
});
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
describe('AaveV3', () => {
|
|
472
|
+
const dexKey = 'AaveV3';
|
|
473
|
+
|
|
474
|
+
const tokens = Tokens[network];
|
|
475
|
+
const holders = Holders[network];
|
|
476
|
+
const provider = new StaticJsonRpcProvider(
|
|
477
|
+
generateConfig(network).privateHttpProvider,
|
|
478
|
+
network,
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
it('USDC -> aEthUSDC', async () => {
|
|
482
|
+
await testE2E(
|
|
483
|
+
tokens['USDC'],
|
|
484
|
+
tokens['aEthUSDC'],
|
|
485
|
+
holders['USDC'],
|
|
486
|
+
'1000000',
|
|
487
|
+
SwapSide.SELL,
|
|
488
|
+
dexKey,
|
|
489
|
+
ContractMethod.simpleSwap,
|
|
490
|
+
network,
|
|
491
|
+
provider,
|
|
492
|
+
);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
it('ETH -> aEthWETH', async () => {
|
|
496
|
+
await testE2E(
|
|
497
|
+
tokens['ETH'],
|
|
498
|
+
tokens['aEthWETH'],
|
|
499
|
+
holders['ETH'],
|
|
500
|
+
'300000000000000000',
|
|
501
|
+
SwapSide.SELL,
|
|
502
|
+
dexKey,
|
|
503
|
+
ContractMethod.simpleSwap,
|
|
504
|
+
network,
|
|
505
|
+
provider,
|
|
506
|
+
);
|
|
507
|
+
});
|
|
508
|
+
|
|
509
|
+
it('aEthWETH -> ETH', async () => {
|
|
510
|
+
await testE2E(
|
|
511
|
+
tokens['aEthWETH'],
|
|
512
|
+
tokens['ETH'],
|
|
513
|
+
holders['aEthWETH'],
|
|
514
|
+
'300000000000000000',
|
|
515
|
+
SwapSide.SELL,
|
|
516
|
+
dexKey,
|
|
517
|
+
ContractMethod.simpleSwap,
|
|
518
|
+
network,
|
|
519
|
+
provider,
|
|
520
|
+
);
|
|
521
|
+
});
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
describe('MutliSwap', () => {
|
|
526
|
+
describe('MaverickV1', () => {
|
|
527
|
+
describe('DAI -> USDC -> MAV via MaverickV1', () => {
|
|
528
|
+
const dexKeys = ['MaverickV1'];
|
|
529
|
+
const provider = new StaticJsonRpcProvider(
|
|
530
|
+
generateConfig(network).privateHttpProvider,
|
|
531
|
+
network,
|
|
532
|
+
);
|
|
533
|
+
const slippage = undefined;
|
|
534
|
+
|
|
535
|
+
const tokenASymbol: string = 'DAI';
|
|
536
|
+
const tokenBSymbol: string = 'MAV';
|
|
537
|
+
|
|
538
|
+
const tokenAAmount: string = '100000000000000000000';
|
|
539
|
+
|
|
540
|
+
const tokens = Tokens[network];
|
|
541
|
+
const holders = Holders[network];
|
|
542
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
543
|
+
const side = SwapSide.SELL;
|
|
544
|
+
|
|
545
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
546
|
+
await testE2E(
|
|
547
|
+
tokens[tokenASymbol],
|
|
548
|
+
tokens[tokenBSymbol],
|
|
549
|
+
holders[tokenASymbol],
|
|
550
|
+
tokenAAmount,
|
|
551
|
+
side,
|
|
552
|
+
dexKeys,
|
|
553
|
+
contractMethod,
|
|
554
|
+
network,
|
|
555
|
+
provider,
|
|
556
|
+
undefined,
|
|
557
|
+
undefined,
|
|
558
|
+
undefined,
|
|
559
|
+
slippage,
|
|
560
|
+
2000,
|
|
561
|
+
);
|
|
562
|
+
});
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
describe('ETH -> USDC -> MAV via MaverickV1', () => {
|
|
566
|
+
const dexKeys = ['MaverickV1'];
|
|
567
|
+
const provider = new StaticJsonRpcProvider(
|
|
568
|
+
generateConfig(network).privateHttpProvider,
|
|
569
|
+
network,
|
|
570
|
+
);
|
|
571
|
+
const slippage = undefined;
|
|
572
|
+
|
|
573
|
+
const tokenASymbol: string = 'ETH';
|
|
574
|
+
const tokenBSymbol: string = 'MAV';
|
|
575
|
+
|
|
576
|
+
const tokenAAmount: string = '1500000000000000000';
|
|
577
|
+
|
|
578
|
+
const tokens = Tokens[network];
|
|
579
|
+
const holders = Holders[network];
|
|
580
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
581
|
+
const side = SwapSide.SELL;
|
|
582
|
+
|
|
583
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
584
|
+
await testE2E(
|
|
585
|
+
tokens[tokenASymbol],
|
|
586
|
+
tokens[tokenBSymbol],
|
|
587
|
+
holders[tokenASymbol],
|
|
588
|
+
tokenAAmount,
|
|
589
|
+
side,
|
|
590
|
+
dexKeys,
|
|
591
|
+
contractMethod,
|
|
592
|
+
network,
|
|
593
|
+
provider,
|
|
594
|
+
undefined,
|
|
595
|
+
undefined,
|
|
596
|
+
undefined,
|
|
597
|
+
slippage,
|
|
598
|
+
2000,
|
|
599
|
+
);
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
describe('DAI -> USDC -> ETH via MaverickV1', () => {
|
|
604
|
+
const dexKeys = ['MaverickV1'];
|
|
605
|
+
const provider = new StaticJsonRpcProvider(
|
|
606
|
+
generateConfig(network).privateHttpProvider,
|
|
607
|
+
network,
|
|
608
|
+
);
|
|
609
|
+
const slippage = undefined;
|
|
610
|
+
|
|
611
|
+
const tokenASymbol: string = 'DAI';
|
|
612
|
+
const tokenBSymbol: string = 'ETH';
|
|
613
|
+
|
|
614
|
+
const tokenAAmount: string = '15000000000000000000';
|
|
615
|
+
|
|
616
|
+
const tokens = Tokens[network];
|
|
617
|
+
const holders = Holders[network];
|
|
618
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
619
|
+
const side = SwapSide.SELL;
|
|
620
|
+
|
|
621
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
622
|
+
await testE2E(
|
|
623
|
+
tokens[tokenASymbol],
|
|
624
|
+
tokens[tokenBSymbol],
|
|
625
|
+
holders[tokenASymbol],
|
|
626
|
+
tokenAAmount,
|
|
627
|
+
side,
|
|
628
|
+
dexKeys,
|
|
629
|
+
contractMethod,
|
|
630
|
+
network,
|
|
631
|
+
provider,
|
|
632
|
+
undefined,
|
|
633
|
+
undefined,
|
|
634
|
+
undefined,
|
|
635
|
+
slippage,
|
|
636
|
+
2000,
|
|
637
|
+
);
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
});
|
|
641
|
+
|
|
642
|
+
describe('SushiSwapV3', () => {
|
|
643
|
+
describe('USDC -> ETH -> WBTC via SushiSwapV3', () => {
|
|
644
|
+
const dexKeys = ['SushiSwapV3'];
|
|
645
|
+
const provider = new StaticJsonRpcProvider(
|
|
646
|
+
generateConfig(network).privateHttpProvider,
|
|
647
|
+
network,
|
|
648
|
+
);
|
|
649
|
+
const slippage = undefined;
|
|
650
|
+
|
|
651
|
+
const tokenASymbol: string = 'USDC';
|
|
652
|
+
const tokenBSymbol: string = 'WBTC';
|
|
653
|
+
|
|
654
|
+
const tokenAAmount: string = '10000000';
|
|
655
|
+
|
|
656
|
+
const tokens = Tokens[network];
|
|
657
|
+
const holders = Holders[network];
|
|
658
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
659
|
+
const side = SwapSide.SELL;
|
|
660
|
+
|
|
661
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
662
|
+
await testE2E(
|
|
663
|
+
tokens[tokenASymbol],
|
|
664
|
+
tokens[tokenBSymbol],
|
|
665
|
+
holders[tokenASymbol],
|
|
666
|
+
tokenAAmount,
|
|
667
|
+
side,
|
|
668
|
+
dexKeys,
|
|
669
|
+
contractMethod,
|
|
670
|
+
network,
|
|
671
|
+
provider,
|
|
672
|
+
undefined,
|
|
673
|
+
undefined,
|
|
674
|
+
undefined,
|
|
675
|
+
slippage,
|
|
676
|
+
2000,
|
|
677
|
+
);
|
|
678
|
+
});
|
|
679
|
+
});
|
|
680
|
+
|
|
681
|
+
describe('USDT -> USDC -> ETH via SushiSwapV3', () => {
|
|
682
|
+
const dexKeys = ['SushiSwapV3'];
|
|
683
|
+
const provider = new StaticJsonRpcProvider(
|
|
684
|
+
generateConfig(network).privateHttpProvider,
|
|
685
|
+
network,
|
|
686
|
+
);
|
|
687
|
+
const slippage = undefined;
|
|
688
|
+
|
|
689
|
+
const tokenASymbol: string = 'USDT';
|
|
690
|
+
const tokenBSymbol: string = 'ETH';
|
|
691
|
+
|
|
692
|
+
const tokenAAmount: string = '1000000000';
|
|
693
|
+
|
|
694
|
+
const tokens = Tokens[network];
|
|
695
|
+
const holders = Holders[network];
|
|
696
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
697
|
+
const side = SwapSide.SELL;
|
|
698
|
+
|
|
699
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
700
|
+
await testE2E(
|
|
701
|
+
tokens[tokenASymbol],
|
|
702
|
+
tokens[tokenBSymbol],
|
|
703
|
+
holders[tokenASymbol],
|
|
704
|
+
tokenAAmount,
|
|
705
|
+
side,
|
|
706
|
+
dexKeys,
|
|
707
|
+
contractMethod,
|
|
708
|
+
network,
|
|
709
|
+
provider,
|
|
710
|
+
undefined,
|
|
711
|
+
undefined,
|
|
712
|
+
undefined,
|
|
713
|
+
slippage,
|
|
714
|
+
2000,
|
|
715
|
+
);
|
|
716
|
+
});
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
describe('ETH -> USDC -> DAI via SushiSwapV3', () => {
|
|
720
|
+
const dexKeys = ['SushiSwapV3'];
|
|
721
|
+
const provider = new StaticJsonRpcProvider(
|
|
722
|
+
generateConfig(network).privateHttpProvider,
|
|
723
|
+
network,
|
|
724
|
+
);
|
|
725
|
+
const slippage = undefined;
|
|
726
|
+
|
|
727
|
+
const tokenASymbol: string = 'ETH';
|
|
728
|
+
const tokenBSymbol: string = 'DAI';
|
|
729
|
+
|
|
730
|
+
const tokenAAmount: string = '100000000000000000';
|
|
731
|
+
|
|
732
|
+
const tokens = Tokens[network];
|
|
733
|
+
const holders = Holders[network];
|
|
734
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
735
|
+
const side = SwapSide.SELL;
|
|
736
|
+
|
|
737
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
738
|
+
await testE2E(
|
|
739
|
+
tokens[tokenASymbol],
|
|
740
|
+
tokens[tokenBSymbol],
|
|
741
|
+
holders[tokenASymbol],
|
|
742
|
+
tokenAAmount,
|
|
743
|
+
side,
|
|
744
|
+
dexKeys,
|
|
745
|
+
contractMethod,
|
|
746
|
+
network,
|
|
747
|
+
provider,
|
|
748
|
+
undefined,
|
|
749
|
+
undefined,
|
|
750
|
+
undefined,
|
|
751
|
+
slippage,
|
|
752
|
+
2000,
|
|
753
|
+
);
|
|
754
|
+
});
|
|
755
|
+
});
|
|
756
|
+
|
|
757
|
+
describe('USDT -> USDC -> DAI via SushiSwapV3', () => {
|
|
758
|
+
const dexKeys = ['SushiSwapV3'];
|
|
759
|
+
const provider = new StaticJsonRpcProvider(
|
|
760
|
+
generateConfig(network).privateHttpProvider,
|
|
761
|
+
network,
|
|
762
|
+
);
|
|
763
|
+
const slippage = undefined;
|
|
764
|
+
|
|
765
|
+
const tokenASymbol: string = 'USDT';
|
|
766
|
+
const tokenBSymbol: string = 'DAI';
|
|
767
|
+
|
|
768
|
+
const tokenAAmount: string = '100000000';
|
|
769
|
+
|
|
770
|
+
const tokens = Tokens[network];
|
|
771
|
+
const holders = Holders[network];
|
|
772
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
773
|
+
const side = SwapSide.SELL;
|
|
774
|
+
|
|
775
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
776
|
+
await testE2E(
|
|
777
|
+
tokens[tokenASymbol],
|
|
778
|
+
tokens[tokenBSymbol],
|
|
779
|
+
holders[tokenASymbol],
|
|
780
|
+
tokenAAmount,
|
|
781
|
+
side,
|
|
782
|
+
dexKeys,
|
|
783
|
+
contractMethod,
|
|
784
|
+
network,
|
|
785
|
+
provider,
|
|
786
|
+
undefined,
|
|
787
|
+
undefined,
|
|
788
|
+
undefined,
|
|
789
|
+
slippage,
|
|
790
|
+
2000,
|
|
791
|
+
);
|
|
792
|
+
});
|
|
793
|
+
});
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
describe('BalancerV2', () => {
|
|
797
|
+
describe('WBTC -> ETH -> BAL via BalancerV2', () => {
|
|
798
|
+
const dexKeys = ['BalancerV2'];
|
|
799
|
+
const provider = new StaticJsonRpcProvider(
|
|
800
|
+
generateConfig(network).privateHttpProvider,
|
|
801
|
+
network,
|
|
802
|
+
);
|
|
803
|
+
const slippage = undefined;
|
|
804
|
+
|
|
805
|
+
const tokenASymbol: string = 'WBTC';
|
|
806
|
+
const tokenBSymbol: string = 'BAL';
|
|
807
|
+
|
|
808
|
+
const tokenAAmount: string = '500000000';
|
|
809
|
+
|
|
810
|
+
const tokens = Tokens[network];
|
|
811
|
+
const holders = Holders[network];
|
|
812
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
813
|
+
const side = SwapSide.SELL;
|
|
814
|
+
|
|
815
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
816
|
+
await testE2E(
|
|
817
|
+
tokens[tokenASymbol],
|
|
818
|
+
tokens[tokenBSymbol],
|
|
819
|
+
holders[tokenASymbol],
|
|
820
|
+
tokenAAmount,
|
|
821
|
+
side,
|
|
822
|
+
dexKeys,
|
|
823
|
+
contractMethod,
|
|
824
|
+
network,
|
|
825
|
+
provider,
|
|
826
|
+
undefined,
|
|
827
|
+
undefined,
|
|
828
|
+
undefined,
|
|
829
|
+
slippage,
|
|
830
|
+
2000,
|
|
831
|
+
);
|
|
832
|
+
});
|
|
833
|
+
});
|
|
834
|
+
|
|
835
|
+
describe('USDC -> DAI -> USDT via BalancerV2', () => {
|
|
836
|
+
const dexKeys = ['BalancerV2'];
|
|
837
|
+
const provider = new StaticJsonRpcProvider(
|
|
838
|
+
generateConfig(network).privateHttpProvider,
|
|
839
|
+
network,
|
|
840
|
+
);
|
|
841
|
+
const slippage = undefined;
|
|
842
|
+
|
|
843
|
+
const tokenASymbol: string = 'USDC';
|
|
844
|
+
const tokenBSymbol: string = 'USDT';
|
|
845
|
+
|
|
846
|
+
const tokenAAmount: string = '50000000000';
|
|
847
|
+
|
|
848
|
+
const tokens = Tokens[network];
|
|
849
|
+
const holders = Holders[network];
|
|
850
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
851
|
+
const side = SwapSide.SELL;
|
|
852
|
+
|
|
853
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
854
|
+
await testE2E(
|
|
855
|
+
tokens[tokenASymbol],
|
|
856
|
+
tokens[tokenBSymbol],
|
|
857
|
+
holders[tokenASymbol],
|
|
858
|
+
tokenAAmount,
|
|
859
|
+
side,
|
|
860
|
+
dexKeys,
|
|
861
|
+
contractMethod,
|
|
862
|
+
network,
|
|
863
|
+
provider,
|
|
864
|
+
undefined,
|
|
865
|
+
undefined,
|
|
866
|
+
undefined,
|
|
867
|
+
slippage,
|
|
868
|
+
2000,
|
|
869
|
+
false,
|
|
870
|
+
[
|
|
871
|
+
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
872
|
+
'0x6b175474e89094c44da98b954eedeac495271d0f', // DAI
|
|
873
|
+
'0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT
|
|
874
|
+
],
|
|
875
|
+
);
|
|
876
|
+
});
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
describe('ETH -> USDC -> DAI via BalancerV2', () => {
|
|
880
|
+
const dexKeys = ['BalancerV2'];
|
|
881
|
+
const provider = new StaticJsonRpcProvider(
|
|
882
|
+
generateConfig(network).privateHttpProvider,
|
|
883
|
+
network,
|
|
884
|
+
);
|
|
885
|
+
const slippage = undefined;
|
|
886
|
+
|
|
887
|
+
const tokenASymbol: string = 'ETH';
|
|
888
|
+
const tokenBSymbol: string = 'DAI';
|
|
889
|
+
|
|
890
|
+
const tokenAAmount: string = '1000000000000000000';
|
|
891
|
+
|
|
892
|
+
const tokens = Tokens[network];
|
|
893
|
+
const holders = Holders[network];
|
|
894
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
895
|
+
const side = SwapSide.SELL;
|
|
896
|
+
|
|
897
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
898
|
+
await testE2E(
|
|
899
|
+
tokens[tokenASymbol],
|
|
900
|
+
tokens[tokenBSymbol],
|
|
901
|
+
holders[tokenASymbol],
|
|
902
|
+
tokenAAmount,
|
|
903
|
+
side,
|
|
904
|
+
dexKeys,
|
|
905
|
+
contractMethod,
|
|
906
|
+
network,
|
|
907
|
+
provider,
|
|
908
|
+
undefined,
|
|
909
|
+
undefined,
|
|
910
|
+
undefined,
|
|
911
|
+
slippage,
|
|
912
|
+
2000,
|
|
913
|
+
false,
|
|
914
|
+
[
|
|
915
|
+
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
916
|
+
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
917
|
+
'0x6b175474e89094c44da98b954eedeac495271d0f', // BAL
|
|
918
|
+
],
|
|
919
|
+
);
|
|
920
|
+
});
|
|
921
|
+
});
|
|
922
|
+
});
|
|
923
|
+
|
|
924
|
+
describe('Dex combinations', () => {
|
|
925
|
+
describe('GUSD -> USDC -> ETH via SushiSwapV3 and CurveV1', () => {
|
|
926
|
+
const dexKeys = ['SushiSwapV3', 'CurveV1'];
|
|
927
|
+
const provider = new StaticJsonRpcProvider(
|
|
928
|
+
generateConfig(network).privateHttpProvider,
|
|
929
|
+
network,
|
|
930
|
+
);
|
|
931
|
+
const slippage = undefined;
|
|
932
|
+
|
|
933
|
+
const tokenASymbol: string = 'GUSD';
|
|
934
|
+
const tokenBSymbol: string = 'ETH';
|
|
935
|
+
|
|
936
|
+
const tokenAAmount: string = '100000';
|
|
937
|
+
|
|
938
|
+
const tokens = Tokens[network];
|
|
939
|
+
const holders = Holders[network];
|
|
940
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
941
|
+
const side = SwapSide.SELL;
|
|
942
|
+
|
|
943
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
944
|
+
await testE2E(
|
|
945
|
+
tokens[tokenASymbol],
|
|
946
|
+
tokens[tokenBSymbol],
|
|
947
|
+
holders[tokenASymbol],
|
|
948
|
+
tokenAAmount,
|
|
949
|
+
side,
|
|
950
|
+
dexKeys,
|
|
951
|
+
contractMethod,
|
|
952
|
+
network,
|
|
953
|
+
provider,
|
|
954
|
+
undefined,
|
|
955
|
+
undefined,
|
|
956
|
+
undefined,
|
|
957
|
+
slippage,
|
|
958
|
+
2000,
|
|
959
|
+
);
|
|
960
|
+
});
|
|
961
|
+
});
|
|
962
|
+
|
|
963
|
+
describe('ETH -> USDC -> GUSD via SushiSwapV3 and CurveV1', () => {
|
|
964
|
+
const dexKeys = ['SushiSwapV3', 'CurveV1'];
|
|
965
|
+
const provider = new StaticJsonRpcProvider(
|
|
966
|
+
generateConfig(network).privateHttpProvider,
|
|
967
|
+
network,
|
|
968
|
+
);
|
|
969
|
+
const slippage = undefined;
|
|
970
|
+
|
|
971
|
+
const tokenASymbol: string = 'ETH';
|
|
972
|
+
const tokenBSymbol: string = 'GUSD';
|
|
973
|
+
|
|
974
|
+
const tokenAAmount: string = '100000000000000000';
|
|
975
|
+
|
|
976
|
+
const tokens = Tokens[network];
|
|
977
|
+
const holders = Holders[network];
|
|
978
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
979
|
+
const side = SwapSide.SELL;
|
|
980
|
+
|
|
981
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
982
|
+
await testE2E(
|
|
983
|
+
tokens[tokenASymbol],
|
|
984
|
+
tokens[tokenBSymbol],
|
|
985
|
+
holders[tokenASymbol],
|
|
986
|
+
tokenAAmount,
|
|
987
|
+
side,
|
|
988
|
+
dexKeys,
|
|
989
|
+
contractMethod,
|
|
990
|
+
network,
|
|
991
|
+
provider,
|
|
992
|
+
undefined,
|
|
993
|
+
undefined,
|
|
994
|
+
undefined,
|
|
995
|
+
slippage,
|
|
996
|
+
2000,
|
|
997
|
+
);
|
|
998
|
+
});
|
|
999
|
+
});
|
|
1000
|
+
|
|
1001
|
+
describe('ETH -> USDC -> GUSD via BalancerV1 and CurveV1', () => {
|
|
1002
|
+
const dexKeys = ['BalancerV1', 'CurveV1'];
|
|
1003
|
+
const provider = new StaticJsonRpcProvider(
|
|
1004
|
+
generateConfig(network).privateHttpProvider,
|
|
1005
|
+
network,
|
|
1006
|
+
);
|
|
1007
|
+
const slippage = undefined;
|
|
1008
|
+
|
|
1009
|
+
const tokenASymbol: string = 'ETH';
|
|
1010
|
+
const tokenBSymbol: string = 'GUSD';
|
|
1011
|
+
|
|
1012
|
+
const tokenAAmount: string = '100000000000000000';
|
|
1013
|
+
|
|
1014
|
+
const tokens = Tokens[network];
|
|
1015
|
+
const holders = Holders[network];
|
|
1016
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1017
|
+
const side = SwapSide.SELL;
|
|
1018
|
+
|
|
1019
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1020
|
+
await testE2E(
|
|
1021
|
+
tokens[tokenASymbol],
|
|
1022
|
+
tokens[tokenBSymbol],
|
|
1023
|
+
holders[tokenASymbol],
|
|
1024
|
+
tokenAAmount,
|
|
1025
|
+
side,
|
|
1026
|
+
dexKeys,
|
|
1027
|
+
contractMethod,
|
|
1028
|
+
network,
|
|
1029
|
+
provider,
|
|
1030
|
+
undefined,
|
|
1031
|
+
undefined,
|
|
1032
|
+
undefined,
|
|
1033
|
+
slippage,
|
|
1034
|
+
2000,
|
|
1035
|
+
);
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
|
|
1039
|
+
describe('TUSD -> DAI -> GUSD via BalancerV1 and CurveV1', () => {
|
|
1040
|
+
const dexKeys = ['CurveV1'];
|
|
1041
|
+
const provider = new StaticJsonRpcProvider(
|
|
1042
|
+
generateConfig(network).privateHttpProvider,
|
|
1043
|
+
network,
|
|
1044
|
+
);
|
|
1045
|
+
const slippage = undefined;
|
|
1046
|
+
|
|
1047
|
+
const tokenASymbol: string = 'TUSD';
|
|
1048
|
+
const tokenBSymbol: string = 'GUSD';
|
|
1049
|
+
|
|
1050
|
+
const tokenAAmount: string = '100000000000000000000';
|
|
1051
|
+
|
|
1052
|
+
const tokens = Tokens[network];
|
|
1053
|
+
const holders = Holders[network];
|
|
1054
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1055
|
+
const side = SwapSide.SELL;
|
|
1056
|
+
|
|
1057
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1058
|
+
await testE2E(
|
|
1059
|
+
tokens[tokenASymbol],
|
|
1060
|
+
tokens[tokenBSymbol],
|
|
1061
|
+
holders[tokenASymbol],
|
|
1062
|
+
tokenAAmount,
|
|
1063
|
+
side,
|
|
1064
|
+
dexKeys,
|
|
1065
|
+
contractMethod,
|
|
1066
|
+
network,
|
|
1067
|
+
provider,
|
|
1068
|
+
undefined,
|
|
1069
|
+
undefined,
|
|
1070
|
+
undefined,
|
|
1071
|
+
slippage,
|
|
1072
|
+
2000,
|
|
1073
|
+
);
|
|
1074
|
+
});
|
|
1075
|
+
});
|
|
1076
|
+
|
|
1077
|
+
describe('WBTC -> ETH -> SUSHI via BalancerV1 and SushiSwapV3', () => {
|
|
1078
|
+
const dexKeys = ['BalancerV1', 'SushiSwapV3'];
|
|
1079
|
+
const provider = new StaticJsonRpcProvider(
|
|
1080
|
+
generateConfig(network).privateHttpProvider,
|
|
1081
|
+
network,
|
|
1082
|
+
);
|
|
1083
|
+
const slippage = undefined;
|
|
1084
|
+
|
|
1085
|
+
const tokenASymbol: string = 'WBTC';
|
|
1086
|
+
const tokenBSymbol: string = 'SUSHI';
|
|
1087
|
+
|
|
1088
|
+
const tokenAAmount: string = '2000000';
|
|
1089
|
+
|
|
1090
|
+
const tokens = Tokens[network];
|
|
1091
|
+
const holders = Holders[network];
|
|
1092
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1093
|
+
const side = SwapSide.SELL;
|
|
1094
|
+
|
|
1095
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1096
|
+
await testE2E(
|
|
1097
|
+
tokens[tokenASymbol],
|
|
1098
|
+
tokens[tokenBSymbol],
|
|
1099
|
+
holders[tokenASymbol],
|
|
1100
|
+
tokenAAmount,
|
|
1101
|
+
side,
|
|
1102
|
+
dexKeys,
|
|
1103
|
+
contractMethod,
|
|
1104
|
+
network,
|
|
1105
|
+
provider,
|
|
1106
|
+
undefined,
|
|
1107
|
+
undefined,
|
|
1108
|
+
undefined,
|
|
1109
|
+
slippage,
|
|
1110
|
+
2000,
|
|
1111
|
+
);
|
|
1112
|
+
});
|
|
1113
|
+
});
|
|
1114
|
+
|
|
1115
|
+
describe('PSP -> ETH -> stETH', () => {
|
|
1116
|
+
const dexKeys = ['SushiSwap', 'Lido'];
|
|
1117
|
+
const provider = new StaticJsonRpcProvider(
|
|
1118
|
+
generateConfig(network).privateHttpProvider,
|
|
1119
|
+
network,
|
|
1120
|
+
);
|
|
1121
|
+
const slippage = undefined;
|
|
1122
|
+
|
|
1123
|
+
const tokenASymbol: string = 'PSP';
|
|
1124
|
+
const tokenBSymbol: string = 'STETH';
|
|
1125
|
+
|
|
1126
|
+
const tokenAAmount: string = '3396186773559304606863';
|
|
1127
|
+
|
|
1128
|
+
const tokens = Tokens[network];
|
|
1129
|
+
const holders = Holders[network];
|
|
1130
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1131
|
+
const side = SwapSide.SELL;
|
|
1132
|
+
|
|
1133
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1134
|
+
await testE2E(
|
|
1135
|
+
tokens[tokenASymbol],
|
|
1136
|
+
tokens[tokenBSymbol],
|
|
1137
|
+
holders[tokenASymbol],
|
|
1138
|
+
tokenAAmount,
|
|
1139
|
+
side,
|
|
1140
|
+
dexKeys,
|
|
1141
|
+
contractMethod,
|
|
1142
|
+
network,
|
|
1143
|
+
provider,
|
|
1144
|
+
undefined,
|
|
1145
|
+
undefined,
|
|
1146
|
+
undefined,
|
|
1147
|
+
slippage,
|
|
1148
|
+
2000,
|
|
1149
|
+
undefined,
|
|
1150
|
+
[
|
|
1151
|
+
'0xcafe001067cdef266afb7eb5a286dcfd277f3de5', // PSP
|
|
1152
|
+
'0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', // ETH
|
|
1153
|
+
'0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', // stETH
|
|
1154
|
+
],
|
|
1155
|
+
);
|
|
1156
|
+
});
|
|
1157
|
+
});
|
|
1158
|
+
});
|
|
1159
|
+
});
|
|
1160
|
+
});
|
|
1161
|
+
|
|
1162
|
+
describe('Polygon', () => {
|
|
1163
|
+
const network = Network.POLYGON;
|
|
1164
|
+
|
|
1165
|
+
describe('SimpleSwap', () => {
|
|
1166
|
+
describe('Dfyn', () => {
|
|
1167
|
+
const dexKey = 'Dfyn';
|
|
1168
|
+
|
|
1169
|
+
const tokenASymbol: string = 'USDC';
|
|
1170
|
+
const tokenBSymbol: string = 'WBTC';
|
|
1171
|
+
|
|
1172
|
+
const tokenAAmount: string = '10000000';
|
|
1173
|
+
const tokenBAmount: string = '10000000';
|
|
1174
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
1175
|
+
|
|
1176
|
+
testForNetwork(
|
|
1177
|
+
network,
|
|
1178
|
+
dexKey,
|
|
1179
|
+
tokenASymbol,
|
|
1180
|
+
tokenBSymbol,
|
|
1181
|
+
tokenAAmount,
|
|
1182
|
+
tokenBAmount,
|
|
1183
|
+
nativeTokenAmount,
|
|
1184
|
+
);
|
|
1185
|
+
});
|
|
1186
|
+
});
|
|
1187
|
+
|
|
1188
|
+
describe('MultiSwap', () => {
|
|
1189
|
+
describe('USDC.e -> MATIC -> CRV via Dystopia and QuickSwap', () => {
|
|
1190
|
+
const dexKeys = ['Dystopia', 'QuickSwap'];
|
|
1191
|
+
const provider = new StaticJsonRpcProvider(
|
|
1192
|
+
generateConfig(network).privateHttpProvider,
|
|
1193
|
+
network,
|
|
1194
|
+
);
|
|
1195
|
+
const slippage = undefined;
|
|
1196
|
+
|
|
1197
|
+
const tokenASymbol: string = 'USDC';
|
|
1198
|
+
const tokenBSymbol: string = 'CRV';
|
|
1199
|
+
|
|
1200
|
+
const tokenAAmount: string = '4439351';
|
|
1201
|
+
|
|
1202
|
+
const tokens = Tokens[network];
|
|
1203
|
+
const holders = Holders[network];
|
|
1204
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1205
|
+
const side = SwapSide.SELL;
|
|
1206
|
+
|
|
1207
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1208
|
+
await testE2E(
|
|
1209
|
+
tokens[tokenASymbol],
|
|
1210
|
+
tokens[tokenBSymbol],
|
|
1211
|
+
holders[tokenASymbol],
|
|
1212
|
+
tokenAAmount,
|
|
1213
|
+
side,
|
|
1214
|
+
dexKeys,
|
|
1215
|
+
contractMethod,
|
|
1216
|
+
network,
|
|
1217
|
+
provider,
|
|
1218
|
+
undefined,
|
|
1219
|
+
undefined,
|
|
1220
|
+
undefined,
|
|
1221
|
+
slippage,
|
|
1222
|
+
2000,
|
|
1223
|
+
);
|
|
1224
|
+
});
|
|
1225
|
+
});
|
|
1226
|
+
|
|
1227
|
+
// describe('MATIC -> ETH -> SUSHI via Dfyn and SushiV3', () => {
|
|
1228
|
+
// const dexKeys = ['Dfyn', 'SushiSwapV3'];
|
|
1229
|
+
// const provider = new StaticJsonRpcProvider(
|
|
1230
|
+
// generateConfig(network).privateHttpProvider,
|
|
1231
|
+
// network,
|
|
1232
|
+
// );
|
|
1233
|
+
// const slippage = undefined;
|
|
1234
|
+
//
|
|
1235
|
+
// const tokenASymbol: string = 'MATIC';
|
|
1236
|
+
// const tokenBSymbol: string = 'SUSHI';
|
|
1237
|
+
//
|
|
1238
|
+
// const tokenAAmount: string = '10000000000000000000';
|
|
1239
|
+
//
|
|
1240
|
+
// const tokens = Tokens[network];
|
|
1241
|
+
// const holders = Holders[network];
|
|
1242
|
+
// const contractMethod = ContractMethod.multiSwap;
|
|
1243
|
+
// const side = SwapSide.SELL;
|
|
1244
|
+
//
|
|
1245
|
+
// it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1246
|
+
// await testE2E(
|
|
1247
|
+
// tokens[tokenASymbol],
|
|
1248
|
+
// tokens[tokenBSymbol],
|
|
1249
|
+
// holders[tokenASymbol],
|
|
1250
|
+
// tokenAAmount,
|
|
1251
|
+
// side,
|
|
1252
|
+
// dexKeys,
|
|
1253
|
+
// contractMethod,
|
|
1254
|
+
// network,
|
|
1255
|
+
// provider,
|
|
1256
|
+
// undefined,
|
|
1257
|
+
// undefined,
|
|
1258
|
+
// undefined,
|
|
1259
|
+
// slippage,
|
|
1260
|
+
// 2000,
|
|
1261
|
+
// );
|
|
1262
|
+
// });
|
|
1263
|
+
// });
|
|
1264
|
+
});
|
|
1265
|
+
});
|
|
1266
|
+
|
|
1267
|
+
describe('Optimism', () => {
|
|
1268
|
+
const network = Network.OPTIMISM;
|
|
1269
|
+
|
|
1270
|
+
describe('MultiSwap', () => {
|
|
1271
|
+
describe('USDC -> ETH -> sETH', () => {
|
|
1272
|
+
const dexKeys = ['UniswapV3', 'CurveV1Factory'];
|
|
1273
|
+
const provider = new StaticJsonRpcProvider(
|
|
1274
|
+
generateConfig(network).privateHttpProvider,
|
|
1275
|
+
network,
|
|
1276
|
+
);
|
|
1277
|
+
const slippage = undefined;
|
|
1278
|
+
|
|
1279
|
+
const tokenASymbol: string = 'USDC';
|
|
1280
|
+
const tokenBSymbol: string = 'sETH';
|
|
1281
|
+
|
|
1282
|
+
const tokenAAmount: string = '1617000000';
|
|
1283
|
+
|
|
1284
|
+
const tokens = Tokens[network];
|
|
1285
|
+
const holders = Holders[network];
|
|
1286
|
+
const contractMethod = ContractMethod.multiSwap;
|
|
1287
|
+
const side = SwapSide.SELL;
|
|
1288
|
+
|
|
1289
|
+
it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1290
|
+
await testE2E(
|
|
1291
|
+
tokens[tokenASymbol],
|
|
1292
|
+
tokens[tokenBSymbol],
|
|
1293
|
+
holders[tokenASymbol],
|
|
1294
|
+
tokenAAmount,
|
|
1295
|
+
side,
|
|
1296
|
+
dexKeys,
|
|
1297
|
+
contractMethod,
|
|
1298
|
+
network,
|
|
1299
|
+
provider,
|
|
1300
|
+
undefined,
|
|
1301
|
+
undefined,
|
|
1302
|
+
undefined,
|
|
1303
|
+
slippage,
|
|
1304
|
+
2000,
|
|
1305
|
+
);
|
|
1306
|
+
});
|
|
1307
|
+
});
|
|
1308
|
+
});
|
|
1309
|
+
});
|
|
1310
|
+
|
|
1311
|
+
// describe('Arbitrum', () => {
|
|
1312
|
+
// const network = Network.ARBITRUM;
|
|
1313
|
+
// describe('MultiSwap', () => {
|
|
1314
|
+
// const priceRoute = {
|
|
1315
|
+
// blockNumber: 184603981,
|
|
1316
|
+
// network: 42161,
|
|
1317
|
+
// srcToken: '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1318
|
+
// srcDecimals: 18,
|
|
1319
|
+
// srcAmount: '10000000000000000000',
|
|
1320
|
+
// destToken: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1321
|
+
// destDecimals: 18,
|
|
1322
|
+
// destAmount: '58376015865102035852',
|
|
1323
|
+
// bestRoute: [
|
|
1324
|
+
// {
|
|
1325
|
+
// percent: 100,
|
|
1326
|
+
// swaps: [
|
|
1327
|
+
// {
|
|
1328
|
+
// srcToken: '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1329
|
+
// srcDecimals: 18,
|
|
1330
|
+
// destToken: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1331
|
+
// destDecimals: 6,
|
|
1332
|
+
// swapExchanges: [
|
|
1333
|
+
// {
|
|
1334
|
+
// exchange: 'Camelot',
|
|
1335
|
+
// srcAmount: '10000000000000000000',
|
|
1336
|
+
// destAmount: '160519565',
|
|
1337
|
+
// percent: 100,
|
|
1338
|
+
// poolAddresses: ['0x410c879c62f22794bD5eE98e2EE01490F6d47A6b'],
|
|
1339
|
+
// data: {
|
|
1340
|
+
// router: '0x1Be46c7A40906c19d91d07B3AE69Ef5893268F25',
|
|
1341
|
+
// path: [
|
|
1342
|
+
// '0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8',
|
|
1343
|
+
// '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1344
|
+
// ],
|
|
1345
|
+
// factory: '0x6EcCab422D763aC031210895C81787E87B43A652',
|
|
1346
|
+
// initCode:
|
|
1347
|
+
// '0xa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1',
|
|
1348
|
+
// feeFactor: 100000,
|
|
1349
|
+
// isFeeTokenInRoute: false,
|
|
1350
|
+
// pools: [
|
|
1351
|
+
// {
|
|
1352
|
+
// address: '0x410c879c62f22794bD5eE98e2EE01490F6d47A6b',
|
|
1353
|
+
// fee: 500,
|
|
1354
|
+
// direction: true,
|
|
1355
|
+
// },
|
|
1356
|
+
// ],
|
|
1357
|
+
// gasUSD: '0.323201',
|
|
1358
|
+
// },
|
|
1359
|
+
// },
|
|
1360
|
+
// ],
|
|
1361
|
+
// },
|
|
1362
|
+
// {
|
|
1363
|
+
// srcToken: '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1364
|
+
// srcDecimals: 6,
|
|
1365
|
+
// destToken: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1366
|
+
// destDecimals: 18,
|
|
1367
|
+
// swapExchanges: [
|
|
1368
|
+
// {
|
|
1369
|
+
// exchange: 'Camelot',
|
|
1370
|
+
// srcAmount: '160519565',
|
|
1371
|
+
// destAmount: '51771474390335981',
|
|
1372
|
+
// percent: 100,
|
|
1373
|
+
// poolAddresses: ['0x84652bb2539513BAf36e225c930Fdd8eaa63CE27'],
|
|
1374
|
+
// data: {
|
|
1375
|
+
// router: '0x1Be46c7A40906c19d91d07B3AE69Ef5893268F25',
|
|
1376
|
+
// path: [
|
|
1377
|
+
// '0xff970a61a04b1ca14834a43f5de4533ebddb5cc8',
|
|
1378
|
+
// '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1379
|
+
// ],
|
|
1380
|
+
// factory: '0x6EcCab422D763aC031210895C81787E87B43A652',
|
|
1381
|
+
// initCode:
|
|
1382
|
+
// '0xa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1',
|
|
1383
|
+
// feeFactor: 100000,
|
|
1384
|
+
// isFeeTokenInRoute: false,
|
|
1385
|
+
// pools: [
|
|
1386
|
+
// {
|
|
1387
|
+
// address: '0x84652bb2539513BAf36e225c930Fdd8eaa63CE27',
|
|
1388
|
+
// fee: 300,
|
|
1389
|
+
// direction: false,
|
|
1390
|
+
// },
|
|
1391
|
+
// ],
|
|
1392
|
+
// gasUSD: '0.323201',
|
|
1393
|
+
// },
|
|
1394
|
+
// },
|
|
1395
|
+
// ],
|
|
1396
|
+
// },
|
|
1397
|
+
// {
|
|
1398
|
+
// srcToken: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1399
|
+
// srcDecimals: 18,
|
|
1400
|
+
// destToken: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1401
|
+
// destDecimals: 18,
|
|
1402
|
+
// swapExchanges: [
|
|
1403
|
+
// {
|
|
1404
|
+
// exchange: 'CamelotV3',
|
|
1405
|
+
// srcAmount: '51771474390335981',
|
|
1406
|
+
// destAmount: '58376015865102035852',
|
|
1407
|
+
// percent: 100,
|
|
1408
|
+
// poolAddresses: ['0xe461f84c3fe6bcdd1162eb0ef4284f3bb6e4cad3'],
|
|
1409
|
+
// data: {
|
|
1410
|
+
// feeOnTransfer: false,
|
|
1411
|
+
// path: [
|
|
1412
|
+
// {
|
|
1413
|
+
// tokenIn: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1',
|
|
1414
|
+
// tokenOut: '0x0c880f6761f1af8d9aa9c466984b80dab9a8c9e8',
|
|
1415
|
+
// },
|
|
1416
|
+
// ],
|
|
1417
|
+
// gasUSD: '0.290559',
|
|
1418
|
+
// },
|
|
1419
|
+
// },
|
|
1420
|
+
// ],
|
|
1421
|
+
// },
|
|
1422
|
+
// ],
|
|
1423
|
+
// },
|
|
1424
|
+
// ],
|
|
1425
|
+
// gasCostUSD: '1.757908',
|
|
1426
|
+
// gasCost: '598300',
|
|
1427
|
+
// others: [],
|
|
1428
|
+
// side: 'SELL',
|
|
1429
|
+
// tokenTransferProxy: '0x216b4b4ba9f3e719726886d34a177484278bfcae',
|
|
1430
|
+
// contractAddress: '0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57',
|
|
1431
|
+
// contractMethod: 'multiSwap',
|
|
1432
|
+
// partnerFee: 0,
|
|
1433
|
+
// srcUSD: '160.9000000000',
|
|
1434
|
+
// destUSD: '159.3665233117',
|
|
1435
|
+
// partner: 'Camelot',
|
|
1436
|
+
// maxImpactReached: false,
|
|
1437
|
+
// hmac: 'c53e8a540a60a7d05aa50865d306f8d5458243a1',
|
|
1438
|
+
// } as unknown as OptimalRate;
|
|
1439
|
+
// describe('DMT-> USDC.e -> WETH -> PENDLE via Camelot and CamelotV3', () => {
|
|
1440
|
+
// const dexKeys = ['Camelot', 'CamelotV3'];
|
|
1441
|
+
// const provider = new StaticJsonRpcProvider(
|
|
1442
|
+
// generateConfig(network).privateHttpProvider,
|
|
1443
|
+
// network,
|
|
1444
|
+
// );
|
|
1445
|
+
// const slippage = undefined;
|
|
1446
|
+
//
|
|
1447
|
+
// const tokenASymbol: string = 'DMT';
|
|
1448
|
+
// const tokenBSymbol: string = 'PENDLE';
|
|
1449
|
+
//
|
|
1450
|
+
// const tokenAAmount: string = '10000000000000000000';
|
|
1451
|
+
//
|
|
1452
|
+
// const tokens = Tokens[network];
|
|
1453
|
+
// const holders = Holders[network];
|
|
1454
|
+
// const contractMethod = ContractMethod.multiSwap;
|
|
1455
|
+
// const side = SwapSide.SELL;
|
|
1456
|
+
//
|
|
1457
|
+
// it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
1458
|
+
// await testE2E(
|
|
1459
|
+
// tokens[tokenASymbol],
|
|
1460
|
+
// tokens[tokenBSymbol],
|
|
1461
|
+
// holders[tokenASymbol],
|
|
1462
|
+
// tokenAAmount,
|
|
1463
|
+
// side,
|
|
1464
|
+
// dexKeys,
|
|
1465
|
+
// contractMethod,
|
|
1466
|
+
// network,
|
|
1467
|
+
// provider,
|
|
1468
|
+
// undefined,
|
|
1469
|
+
// undefined,
|
|
1470
|
+
// undefined,
|
|
1471
|
+
// slippage,
|
|
1472
|
+
// 2000,
|
|
1473
|
+
// );
|
|
1474
|
+
// });
|
|
1475
|
+
// });
|
|
1476
|
+
// });
|
|
1477
|
+
// });
|
|
1478
|
+
});
|