@paraswap/dex-lib 2.28.12-ramses.2 → 2.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/build/dex/index.js +0 -2
  2. package/build/dex/index.js.map +1 -1
  3. package/build/dex/solidly/config.js +1 -11
  4. package/build/dex/solidly/config.js.map +1 -1
  5. package/build/dex/solidly/forks-override/ramses.js +2 -2
  6. package/build/dex/solidly/forks-override/ramses.js.map +1 -1
  7. package/build/dex/solidly/solidly.js +0 -1
  8. package/build/dex/solidly/solidly.js.map +1 -1
  9. package/build/dex/uniswap-v3/config.js +22 -0
  10. package/build/dex/uniswap-v3/config.js.map +1 -1
  11. package/build/dex/uniswap-v3/types.d.ts +6 -1
  12. package/build/dex/uniswap-v3/types.js.map +1 -1
  13. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +3 -2
  14. package/build/dex/uniswap-v3/uniswap-v3-pool.js +5 -2
  15. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  16. package/build/dex/uniswap-v3/uniswap-v3.js +7 -3
  17. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  18. package/package.json +1 -1
  19. package/src/abi/RamsesV2Pool.abi.json +1554 -0
  20. package/src/abi/RamsesV2Quoter.abi.json +274 -0
  21. package/src/abi/RamsesV2StateMulticall.abi.json +891 -0
  22. package/src/dex/index.ts +0 -2
  23. package/src/dex/solidly/config.ts +1 -13
  24. package/src/dex/solidly/solidly-e2e.test.ts +0 -95
  25. package/src/dex/solidly/solidly-integration.test.ts +1 -141
  26. package/src/dex/solidly/solidly.ts +0 -2
  27. package/src/dex/uniswap-v3/config.ts +22 -0
  28. package/src/dex/uniswap-v3/forks/ramses-v2/utils.ts +72 -0
  29. package/src/dex/uniswap-v3/types.ts +7 -1
  30. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +445 -354
  31. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +171 -13
  32. package/src/dex/uniswap-v3/uniswap-v3-pool.ts +7 -2
  33. package/src/dex/uniswap-v3/uniswap-v3.ts +7 -2
  34. package/tests/constants-e2e.ts +1 -1
  35. package/src/dex/solidly/forks-override/ramses.ts +0 -224
@@ -12,402 +12,493 @@ import { StaticJsonRpcProvider } from '@ethersproject/providers';
12
12
  import { generateConfig } from '../../config';
13
13
 
14
14
  describe('UniswapV3 E2E', () => {
15
- const dexKey = 'UniswapV3';
16
15
 
17
- describe('UniswapV3 MAINNET', () => {
18
- const network = Network.MAINNET;
19
- const tokens = Tokens[network];
20
- const holders = Holders[network];
21
- const provider = new StaticJsonRpcProvider(
22
- generateConfig(network).privateHttpProvider,
23
- network,
24
- );
16
+ describe('UniswapV3', () => {
17
+ const dexKey = 'UniswapV3';
25
18
 
26
- it('BUY DAI -> USDC', async () => {
27
- await testE2E(
28
- tokens['DAI'],
29
- tokens['USDC'],
30
- holders['DAI'],
31
- '100000000000',
32
- SwapSide.BUY,
33
- dexKey,
34
- ContractMethod.simpleBuy,
19
+ describe('UniswapV3 MAINNET', () => {
20
+ const network = Network.MAINNET;
21
+ const tokens = Tokens[network];
22
+ const holders = Holders[network];
23
+ const provider = new StaticJsonRpcProvider(
24
+ generateConfig(network).privateHttpProvider,
35
25
  network,
36
- provider,
37
- );
38
- });
39
- it('SELL WETH -> SHIBA', async () => {
40
- await testE2E(
41
- tokens['WETH'],
42
- tokens['SHIBA'],
43
- holders['WETH'],
44
- '1000000000000000000',
45
- SwapSide.SELL,
46
- dexKey,
47
- ContractMethod.simpleSwap,
48
- network,
49
- provider,
50
26
  );
27
+
28
+ it('BUY DAI -> USDC', async () => {
29
+ await testE2E(
30
+ tokens['DAI'],
31
+ tokens['USDC'],
32
+ holders['DAI'],
33
+ '100000000000',
34
+ SwapSide.BUY,
35
+ dexKey,
36
+ ContractMethod.simpleBuy,
37
+ network,
38
+ provider,
39
+ );
40
+ });
41
+ it('SELL WETH -> SHIBA', async () => {
42
+ await testE2E(
43
+ tokens['WETH'],
44
+ tokens['SHIBA'],
45
+ holders['WETH'],
46
+ '1000000000000000000',
47
+ SwapSide.SELL,
48
+ dexKey,
49
+ ContractMethod.simpleSwap,
50
+ network,
51
+ provider,
52
+ );
53
+ });
54
+
55
+ it('directSwap SELL WETH -> USDC', async () => {
56
+ await testE2E(
57
+ tokens['WETH'],
58
+ tokens['USDC'],
59
+ holders['WETH'],
60
+ '1000000000000000000',
61
+ SwapSide.SELL,
62
+ dexKey,
63
+ ContractMethod.directUniV3Swap,
64
+ network,
65
+ provider,
66
+ );
67
+ });
51
68
  });
52
69
 
53
- it('directSwap SELL WETH -> USDC', async () => {
54
- await testE2E(
55
- tokens['WETH'],
56
- tokens['USDC'],
57
- holders['WETH'],
58
- '1000000000000000000',
59
- SwapSide.SELL,
60
- dexKey,
61
- ContractMethod.directUniV3Swap,
70
+ describe('UniswapV3 POLYGON', () => {
71
+ const network = Network.POLYGON;
72
+ const tokens = Tokens[network];
73
+ const holders = Holders[network];
74
+ const provider = new StaticJsonRpcProvider(
75
+ generateConfig(network).privateHttpProvider,
62
76
  network,
63
- provider,
64
77
  );
65
- });
66
- });
67
-
68
- describe('UniswapV3 POLYGON', () => {
69
- const network = Network.POLYGON;
70
- const tokens = Tokens[network];
71
- const holders = Holders[network];
72
- const provider = new StaticJsonRpcProvider(
73
- generateConfig(network).privateHttpProvider,
74
- network,
75
- );
76
78
 
77
- const tokenASymbol: string = 'USDC';
78
- const tokenBSymbol: string = 'WETH';
79
- const nativeTokenSymbol = NativeTokenSymbols[network];
79
+ const tokenASymbol: string = 'USDC';
80
+ const tokenBSymbol: string = 'WETH';
81
+ const nativeTokenSymbol = NativeTokenSymbols[network];
80
82
 
81
- const tokenAAmount: string = '11000000';
82
- const tokenBAmount: string = '11000000000000000000';
83
- const nativeTokenAmount = '11000000000000000000';
83
+ const tokenAAmount: string = '11000000';
84
+ const tokenBAmount: string = '11000000000000000000';
85
+ const nativeTokenAmount = '11000000000000000000';
84
86
 
85
- const sideToContractMethods = new Map([
86
- [
87
- SwapSide.SELL,
87
+ const sideToContractMethods = new Map([
88
88
  [
89
- ContractMethod.simpleSwap,
90
- ContractMethod.multiSwap,
91
- ContractMethod.megaSwap,
92
- ContractMethod.directUniV3Swap,
89
+ SwapSide.SELL,
90
+ [
91
+ ContractMethod.simpleSwap,
92
+ ContractMethod.multiSwap,
93
+ ContractMethod.megaSwap,
94
+ ContractMethod.directUniV3Swap,
95
+ ],
93
96
  ],
94
- ],
95
- [
96
- SwapSide.BUY,
97
97
  [
98
- ContractMethod.simpleBuy,
99
- ContractMethod.buy,
100
- ContractMethod.directUniV3Buy,
98
+ SwapSide.BUY,
99
+ [
100
+ ContractMethod.simpleBuy,
101
+ ContractMethod.buy,
102
+ ContractMethod.directUniV3Buy,
103
+ ],
101
104
  ],
102
- ],
103
- ]);
105
+ ]);
104
106
 
105
- sideToContractMethods.forEach((contractMethods, side) =>
106
- contractMethods.forEach((contractMethod: ContractMethod) => {
107
- describe(`${contractMethod}`, () => {
108
- it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
109
- await testE2E(
110
- tokens[nativeTokenSymbol],
111
- tokens[tokenASymbol],
112
- holders[nativeTokenSymbol],
113
- side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
114
- side,
115
- dexKey,
116
- contractMethod,
117
- network,
118
- provider,
119
- );
120
- });
121
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
122
- await testE2E(
123
- tokens[tokenASymbol],
124
- tokens[nativeTokenSymbol],
125
- holders[tokenASymbol],
126
- side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
127
- side,
128
- dexKey,
129
- contractMethod,
130
- network,
131
- provider,
132
- );
133
- });
134
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
135
- await testE2E(
136
- tokens[tokenASymbol],
137
- tokens[tokenBSymbol],
138
- holders[tokenASymbol],
139
- side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
140
- side,
141
- dexKey,
142
- contractMethod,
143
- network,
144
- provider,
145
- );
107
+ sideToContractMethods.forEach((contractMethods, side) =>
108
+ contractMethods.forEach((contractMethod: ContractMethod) => {
109
+ describe(`${contractMethod}`, () => {
110
+ it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
111
+ await testE2E(
112
+ tokens[nativeTokenSymbol],
113
+ tokens[tokenASymbol],
114
+ holders[nativeTokenSymbol],
115
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
116
+ side,
117
+ dexKey,
118
+ contractMethod,
119
+ network,
120
+ provider,
121
+ );
122
+ });
123
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
124
+ await testE2E(
125
+ tokens[tokenASymbol],
126
+ tokens[nativeTokenSymbol],
127
+ holders[tokenASymbol],
128
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
129
+ side,
130
+ dexKey,
131
+ contractMethod,
132
+ network,
133
+ provider,
134
+ );
135
+ });
136
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
137
+ await testE2E(
138
+ tokens[tokenASymbol],
139
+ tokens[tokenBSymbol],
140
+ holders[tokenASymbol],
141
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
142
+ side,
143
+ dexKey,
144
+ contractMethod,
145
+ network,
146
+ provider,
147
+ );
148
+ });
146
149
  });
147
- });
148
- }),
149
- );
150
- });
150
+ }),
151
+ );
152
+ });
151
153
 
152
- describe('UniswapV3 BSC', () => {
153
- const network = Network.BSC;
154
- const tokens = Tokens[network];
155
- const holders = Holders[network];
156
- const provider = new StaticJsonRpcProvider(
157
- generateConfig(network).privateHttpProvider,
158
- network,
159
- );
154
+ describe('UniswapV3 BSC', () => {
155
+ const network = Network.BSC;
156
+ const tokens = Tokens[network];
157
+ const holders = Holders[network];
158
+ const provider = new StaticJsonRpcProvider(
159
+ generateConfig(network).privateHttpProvider,
160
+ network,
161
+ );
160
162
 
161
- const tokenASymbol: string = 'BUSD';
162
- const tokenBSymbol: string = 'WBNB';
163
- const nativeTokenSymbol = NativeTokenSymbols[network];
163
+ const tokenASymbol: string = 'BUSD';
164
+ const tokenBSymbol: string = 'WBNB';
165
+ const nativeTokenSymbol = NativeTokenSymbols[network];
164
166
 
165
- const tokenAAmount: string = '100000000000000000000';
166
- const tokenBAmount: string = '1000000000000000000';
167
- const nativeTokenAmount = '1000000000000000000';
167
+ const tokenAAmount: string = '100000000000000000000';
168
+ const tokenBAmount: string = '1000000000000000000';
169
+ const nativeTokenAmount = '1000000000000000000';
168
170
 
169
- const sideToContractMethods = new Map([
170
- [
171
- SwapSide.SELL,
171
+ const sideToContractMethods = new Map([
172
172
  [
173
- ContractMethod.simpleSwap,
174
- ContractMethod.multiSwap,
175
- ContractMethod.megaSwap,
173
+ SwapSide.SELL,
174
+ [
175
+ ContractMethod.simpleSwap,
176
+ ContractMethod.multiSwap,
177
+ ContractMethod.megaSwap,
178
+ ],
176
179
  ],
177
- ],
178
- [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
179
- ]);
180
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
181
+ ]);
180
182
 
181
- sideToContractMethods.forEach((contractMethods, side) =>
182
- contractMethods.forEach((contractMethod: ContractMethod) => {
183
- describe(`${contractMethod}`, () => {
184
- it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
185
- await testE2E(
186
- tokens[nativeTokenSymbol],
187
- tokens[tokenASymbol],
188
- holders[nativeTokenSymbol],
189
- side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
190
- side,
191
- dexKey,
192
- contractMethod,
193
- network,
194
- provider,
195
- );
196
- });
197
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
198
- await testE2E(
199
- tokens[tokenASymbol],
200
- tokens[nativeTokenSymbol],
201
- holders[tokenASymbol],
202
- side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
203
- side,
204
- dexKey,
205
- contractMethod,
206
- network,
207
- provider,
208
- );
209
- });
210
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
211
- await testE2E(
212
- tokens[tokenASymbol],
213
- tokens[tokenBSymbol],
214
- holders[tokenASymbol],
215
- side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
216
- side,
217
- dexKey,
218
- contractMethod,
219
- network,
220
- provider,
221
- );
183
+ sideToContractMethods.forEach((contractMethods, side) =>
184
+ contractMethods.forEach((contractMethod: ContractMethod) => {
185
+ describe(`${contractMethod}`, () => {
186
+ it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
187
+ await testE2E(
188
+ tokens[nativeTokenSymbol],
189
+ tokens[tokenASymbol],
190
+ holders[nativeTokenSymbol],
191
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
192
+ side,
193
+ dexKey,
194
+ contractMethod,
195
+ network,
196
+ provider,
197
+ );
198
+ });
199
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
200
+ await testE2E(
201
+ tokens[tokenASymbol],
202
+ tokens[nativeTokenSymbol],
203
+ holders[tokenASymbol],
204
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
205
+ side,
206
+ dexKey,
207
+ contractMethod,
208
+ network,
209
+ provider,
210
+ );
211
+ });
212
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
213
+ await testE2E(
214
+ tokens[tokenASymbol],
215
+ tokens[tokenBSymbol],
216
+ holders[tokenASymbol],
217
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
218
+ side,
219
+ dexKey,
220
+ contractMethod,
221
+ network,
222
+ provider,
223
+ );
224
+ });
222
225
  });
223
- });
224
- }),
225
- );
226
- });
226
+ }),
227
+ );
228
+ });
227
229
 
228
- describe('UniswapV3 Optimism', () => {
229
- const network = Network.OPTIMISM;
230
- const tokens = Tokens[network];
231
- const holders = Holders[network];
232
- const provider = new StaticJsonRpcProvider(
233
- generateConfig(network).privateHttpProvider,
234
- network,
235
- );
230
+ describe('UniswapV3 Optimism', () => {
231
+ const network = Network.OPTIMISM;
232
+ const tokens = Tokens[network];
233
+ const holders = Holders[network];
234
+ const provider = new StaticJsonRpcProvider(
235
+ generateConfig(network).privateHttpProvider,
236
+ network,
237
+ );
236
238
 
237
- const tokenASymbol: string = 'OP';
238
- const tokenBSymbol: string = 'ETH';
239
- const nativeTokenSymbol = NativeTokenSymbols[network];
239
+ const tokenASymbol: string = 'OP';
240
+ const tokenBSymbol: string = 'ETH';
241
+ const nativeTokenSymbol = NativeTokenSymbols[network];
240
242
 
241
- const tokenAAmount: string = '1000000000000000000';
242
- const tokenBAmount: string = '1000000000000000000';
243
- const nativeTokenAmount = '1000000000000000000';
243
+ const tokenAAmount: string = '1000000000000000000';
244
+ const tokenBAmount: string = '1000000000000000000';
245
+ const nativeTokenAmount = '1000000000000000000';
244
246
 
245
- const sideToContractMethods = new Map([
246
- [
247
- SwapSide.SELL,
247
+ const sideToContractMethods = new Map([
248
248
  [
249
- ContractMethod.simpleSwap,
250
- ContractMethod.multiSwap,
251
- ContractMethod.megaSwap,
249
+ SwapSide.SELL,
250
+ [
251
+ ContractMethod.simpleSwap,
252
+ ContractMethod.multiSwap,
253
+ ContractMethod.megaSwap,
254
+ ],
252
255
  ],
253
- ],
254
- [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
255
- ]);
256
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
257
+ ]);
256
258
 
257
- sideToContractMethods.forEach((contractMethods, side) =>
258
- contractMethods.forEach((contractMethod: ContractMethod) => {
259
- describe(`${contractMethod}`, () => {
260
- it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
261
- await testE2E(
262
- tokens[nativeTokenSymbol],
263
- tokens[tokenASymbol],
264
- holders[nativeTokenSymbol],
265
- side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
266
- side,
267
- dexKey,
268
- contractMethod,
269
- network,
270
- provider,
271
- );
272
- });
273
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
274
- await testE2E(
275
- tokens[tokenASymbol],
276
- tokens[nativeTokenSymbol],
277
- holders[tokenASymbol],
278
- side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
279
- side,
280
- dexKey,
281
- contractMethod,
282
- network,
283
- provider,
284
- );
259
+ sideToContractMethods.forEach((contractMethods, side) =>
260
+ contractMethods.forEach((contractMethod: ContractMethod) => {
261
+ describe(`${contractMethod}`, () => {
262
+ it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
263
+ await testE2E(
264
+ tokens[nativeTokenSymbol],
265
+ tokens[tokenASymbol],
266
+ holders[nativeTokenSymbol],
267
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
268
+ side,
269
+ dexKey,
270
+ contractMethod,
271
+ network,
272
+ provider,
273
+ );
274
+ });
275
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
276
+ await testE2E(
277
+ tokens[tokenASymbol],
278
+ tokens[nativeTokenSymbol],
279
+ holders[tokenASymbol],
280
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
281
+ side,
282
+ dexKey,
283
+ contractMethod,
284
+ network,
285
+ provider,
286
+ );
287
+ });
288
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
289
+ await testE2E(
290
+ tokens[tokenASymbol],
291
+ tokens[tokenBSymbol],
292
+ holders[tokenASymbol],
293
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
294
+ side,
295
+ dexKey,
296
+ contractMethod,
297
+ network,
298
+ provider,
299
+ );
300
+ });
285
301
  });
286
- it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
287
- await testE2E(
288
- tokens[tokenASymbol],
289
- tokens[tokenBSymbol],
290
- holders[tokenASymbol],
291
- side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
292
- side,
293
- dexKey,
294
- contractMethod,
295
- network,
296
- provider,
297
- );
302
+ }),
303
+ );
304
+ });
305
+
306
+ describe('UniswapV3 Avalanche', () => {
307
+ const network = Network.AVALANCHE;
308
+ const tokens = Tokens[network];
309
+ const holders = Holders[network];
310
+ const provider = new StaticJsonRpcProvider(
311
+ generateConfig(network).privateHttpProvider,
312
+ network,
313
+ );
314
+
315
+ const sideToContractMethods = new Map([
316
+ [
317
+ SwapSide.SELL,
318
+ [
319
+ ContractMethod.simpleSwap,
320
+ ContractMethod.multiSwap,
321
+ ContractMethod.megaSwap,
322
+ ],
323
+ ],
324
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
325
+ ]);
326
+
327
+ const pairs: { name: string; sellAmount: string; buyAmount: string }[][] = [
328
+ [
329
+ {
330
+ name: 'AVAX',
331
+ sellAmount: '1000000000000000000',
332
+ buyAmount: '500000',
333
+ },
334
+ {
335
+ name: 'USDT',
336
+ sellAmount: '1000000',
337
+ buyAmount: '10000000000000000000',
338
+ },
339
+ ],
340
+ [
341
+ {
342
+ name: 'AVAX',
343
+ sellAmount: '1000000000000000000',
344
+ buyAmount: '500000',
345
+ },
346
+ {
347
+ name: 'USDC',
348
+ sellAmount: '1000000',
349
+ buyAmount: '1000000000000000000',
350
+ },
351
+ ],
352
+ [
353
+ {
354
+ name: 'WAVAX',
355
+ sellAmount: '1000000000000000000',
356
+ buyAmount: '500000',
357
+ },
358
+ { name: 'USDC', sellAmount: '1000000', buyAmount: '20000000000000000' },
359
+ ],
360
+ [
361
+ {
362
+ name: 'WAVAX',
363
+ sellAmount: '1000000000000000000',
364
+ buyAmount: '10000000',
365
+ },
366
+ { name: 'USDT', sellAmount: '1000000', buyAmount: '2000000000000' },
367
+ ],
368
+ [
369
+ { name: 'USDC', sellAmount: '1000000', buyAmount: '100000000' },
370
+ { name: 'USDT', sellAmount: '100000000', buyAmount: '100000000' },
371
+ ],
372
+ ];
373
+
374
+ sideToContractMethods.forEach((contractMethods, side) =>
375
+ describe(`${side}`, () => {
376
+ contractMethods.forEach((contractMethod: ContractMethod) => {
377
+ pairs.forEach(pair => {
378
+ describe(`${contractMethod}`, () => {
379
+ it(`${pair[0].name} -> ${pair[1].name}`, async () => {
380
+ await testE2E(
381
+ tokens[pair[0].name],
382
+ tokens[pair[1].name],
383
+ holders[pair[0].name],
384
+ side === SwapSide.SELL
385
+ ? pair[0].sellAmount
386
+ : pair[0].buyAmount,
387
+ side,
388
+ dexKey,
389
+ contractMethod,
390
+ network,
391
+ provider,
392
+ );
393
+ });
394
+ it(`${pair[1].name} -> ${pair[0].name}`, async () => {
395
+ await testE2E(
396
+ tokens[pair[1].name],
397
+ tokens[pair[0].name],
398
+ holders[pair[1].name],
399
+ side === SwapSide.SELL
400
+ ? pair[1].sellAmount
401
+ : pair[1].buyAmount,
402
+ side,
403
+ dexKey,
404
+ contractMethod,
405
+ network,
406
+ provider,
407
+ );
408
+ });
409
+ });
410
+ });
298
411
  });
299
- });
300
- }),
301
- );
412
+ }),
413
+ );
414
+ });
302
415
  });
303
416
 
304
- describe('UniswapV3 Avalanche', () => {
305
- const network = Network.AVALANCHE;
306
- const tokens = Tokens[network];
307
- const holders = Holders[network];
308
- const provider = new StaticJsonRpcProvider(
309
- generateConfig(network).privateHttpProvider,
310
- network,
311
- );
417
+ describe('RamsesV2', () => {
418
+ const dexKey = 'RamsesV2';
419
+
420
+ describe('Arbitrum', () => {
421
+ const network = Network.ARBITRUM;
422
+ const tokens = Tokens[network];
423
+ const holders = Holders[network];
424
+ const provider = new StaticJsonRpcProvider(
425
+ generateConfig(network).privateHttpProvider,
426
+ network,
427
+ );
428
+
429
+ const tokenASymbol: string = 'USDCe';
430
+ const tokenBSymbol: string = 'USDT';
431
+ const nativeTokenSymbol = NativeTokenSymbols[network];
432
+
433
+ const tokenAAmount: string = '1100000';
434
+ const tokenBAmount: string = '1000000';
435
+ const nativeTokenAmount = '1100000000000';
312
436
 
313
- const sideToContractMethods = new Map([
314
- [
315
- SwapSide.SELL,
437
+ const sideToContractMethods = new Map([
316
438
  [
317
- ContractMethod.simpleSwap,
318
- ContractMethod.multiSwap,
319
- ContractMethod.megaSwap,
439
+ SwapSide.SELL,
440
+ [
441
+ ContractMethod.simpleSwap,
442
+ ContractMethod.multiSwap,
443
+ ContractMethod.megaSwap,
444
+ ContractMethod.directUniV3Swap,
445
+ ],
320
446
  ],
321
- ],
322
- [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
323
- ]);
324
-
325
- const pairs: { name: string; sellAmount: string; buyAmount: string }[][] = [
326
- [
327
- {
328
- name: 'AVAX',
329
- sellAmount: '1000000000000000000',
330
- buyAmount: '500000',
331
- },
332
- {
333
- name: 'USDT',
334
- sellAmount: '1000000',
335
- buyAmount: '10000000000000000000',
336
- },
337
- ],
338
- [
339
- {
340
- name: 'AVAX',
341
- sellAmount: '1000000000000000000',
342
- buyAmount: '500000',
343
- },
344
- {
345
- name: 'USDC',
346
- sellAmount: '1000000',
347
- buyAmount: '1000000000000000000',
348
- },
349
- ],
350
- [
351
- {
352
- name: 'WAVAX',
353
- sellAmount: '1000000000000000000',
354
- buyAmount: '500000',
355
- },
356
- { name: 'USDC', sellAmount: '1000000', buyAmount: '20000000000000000' },
357
- ],
358
- [
359
- {
360
- name: 'WAVAX',
361
- sellAmount: '1000000000000000000',
362
- buyAmount: '10000000',
363
- },
364
- { name: 'USDT', sellAmount: '1000000', buyAmount: '2000000000000' },
365
- ],
366
- [
367
- { name: 'USDC', sellAmount: '1000000', buyAmount: '100000000' },
368
- { name: 'USDT', sellAmount: '100000000', buyAmount: '100000000' },
369
- ],
370
- ];
447
+ [
448
+ SwapSide.BUY,
449
+ [
450
+ ContractMethod.simpleBuy,
451
+ ContractMethod.buy,
452
+ ContractMethod.directUniV3Buy,
453
+ ],
454
+ ],
455
+ ]);
371
456
 
372
- sideToContractMethods.forEach((contractMethods, side) =>
373
- describe(`${side}`, () => {
457
+ sideToContractMethods.forEach((contractMethods, side) =>
374
458
  contractMethods.forEach((contractMethod: ContractMethod) => {
375
- pairs.forEach(pair => {
376
- describe(`${contractMethod}`, () => {
377
- it(`${pair[0].name} -> ${pair[1].name}`, async () => {
378
- await testE2E(
379
- tokens[pair[0].name],
380
- tokens[pair[1].name],
381
- holders[pair[0].name],
382
- side === SwapSide.SELL
383
- ? pair[0].sellAmount
384
- : pair[0].buyAmount,
385
- side,
386
- dexKey,
387
- contractMethod,
388
- network,
389
- provider,
390
- );
391
- });
392
- it(`${pair[1].name} -> ${pair[0].name}`, async () => {
393
- await testE2E(
394
- tokens[pair[1].name],
395
- tokens[pair[0].name],
396
- holders[pair[1].name],
397
- side === SwapSide.SELL
398
- ? pair[1].sellAmount
399
- : pair[1].buyAmount,
400
- side,
401
- dexKey,
402
- contractMethod,
403
- network,
404
- provider,
405
- );
406
- });
459
+ describe(`${contractMethod}`, () => {
460
+ it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
461
+ await testE2E(
462
+ tokens[nativeTokenSymbol],
463
+ tokens[tokenASymbol],
464
+ holders[nativeTokenSymbol],
465
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
466
+ side,
467
+ dexKey,
468
+ contractMethod,
469
+ network,
470
+ provider,
471
+ );
472
+ });
473
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
474
+ await testE2E(
475
+ tokens[tokenASymbol],
476
+ tokens[nativeTokenSymbol],
477
+ holders[tokenASymbol],
478
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
479
+ side,
480
+ dexKey,
481
+ contractMethod,
482
+ network,
483
+ provider,
484
+ );
485
+ });
486
+ it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
487
+ await testE2E(
488
+ tokens[tokenASymbol],
489
+ tokens[tokenBSymbol],
490
+ holders[tokenASymbol],
491
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
492
+ side,
493
+ dexKey,
494
+ contractMethod,
495
+ network,
496
+ provider,
497
+ );
407
498
  });
408
499
  });
409
- });
410
- }),
411
- );
500
+ }),
501
+ );
502
+ });
412
503
  });
413
504
  });