@paraswap/dex-lib 2.12.11 → 2.12.12-rfqtests.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 (59) hide show
  1. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  2. package/.idea/misc.xml +6 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.vscode/launch.json +21 -0
  6. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  7. package/build/dex/aave-v3/tokens/avalanche.json +50 -0
  8. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  9. package/build/dex/aave-v3/tokens/mainnet.json +44 -0
  10. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  11. package/build/dex/aave-v3/tokens/polygon.json +98 -0
  12. package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +79 -0
  13. package/build/dex/balancer-v2/VirtualBoostedPool.js +382 -0
  14. package/build/dex/balancer-v2/VirtualBoostedPool.js.map +1 -0
  15. package/build/dex/generic-rfq/validators.d.ts +1 -1
  16. package/build/dex/generic-rfq/validators.js +36 -26
  17. package/build/dex/generic-rfq/validators.js.map +1 -1
  18. package/build/dex/test-aave-v3/config.d.ts +4 -0
  19. package/build/dex/test-aave-v3/config.js +15 -0
  20. package/build/dex/test-aave-v3/config.js.map +1 -0
  21. package/build/dex/test-aave-v3/test-aave-v3-pool.d.ts +39 -0
  22. package/build/dex/test-aave-v3/test-aave-v3-pool.js +63 -0
  23. package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +1 -0
  24. package/build/dex/test-aave-v3/test-aave-v3.d.ts +37 -0
  25. package/build/dex/test-aave-v3/test-aave-v3.js +126 -0
  26. package/build/dex/test-aave-v3/test-aave-v3.js.map +1 -0
  27. package/build/dex/test-aave-v3/types.d.ts +6 -0
  28. package/build/dex/{maverick → test-aave-v3}/types.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/dex/generic-rfq/generic-rfq-e2e-arbitrum.test.ts +360 -0
  31. package/src/dex/generic-rfq/generic-rfq-e2e-bsc.test.ts +346 -0
  32. package/src/dex/generic-rfq/generic-rfq-e2e-polygon.test.ts +360 -0
  33. package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +85 -71
  34. package/src/dex/generic-rfq/validators.test.ts +6 -32
  35. package/src/dex/generic-rfq/validators.ts +57 -32
  36. package/tests/constants-e2e.ts +2 -0
  37. package/tests/utils-e2e.ts +59 -48
  38. package/build/abi/maverick/pool.json +0 -913
  39. package/build/abi/maverick/router.json +0 -703
  40. package/build/dex/maverick/config.d.ts +0 -4
  41. package/build/dex/maverick/config.js +0 -20
  42. package/build/dex/maverick/config.js.map +0 -1
  43. package/build/dex/maverick/maverick-math/maverick-pool-math.d.ts +0 -67
  44. package/build/dex/maverick/maverick-math/maverick-pool-math.js +0 -406
  45. package/build/dex/maverick/maverick-math/maverick-pool-math.js.map +0 -1
  46. package/build/dex/maverick/maverick-math/maverick-sol-math.d.ts +0 -17
  47. package/build/dex/maverick/maverick-math/maverick-sol-math.js +0 -139
  48. package/build/dex/maverick/maverick-math/maverick-sol-math.js.map +0 -1
  49. package/build/dex/maverick/maverick-pool.d.ts +0 -41
  50. package/build/dex/maverick/maverick-pool.js +0 -130
  51. package/build/dex/maverick/maverick-pool.js.map +0 -1
  52. package/build/dex/maverick/maverick.d.ts +0 -42
  53. package/build/dex/maverick/maverick.js +0 -174
  54. package/build/dex/maverick/maverick.js.map +0 -1
  55. package/build/dex/maverick/subgraph-queries.d.ts +0 -4
  56. package/build/dex/maverick/subgraph-queries.js +0 -114
  57. package/build/dex/maverick/subgraph-queries.js.map +0 -1
  58. package/build/dex/maverick/types.d.ts +0 -46
  59. /package/build/dex/{maverick → test-aave-v3}/types.js +0 -0
@@ -125,7 +125,7 @@ const buildConfigForGenericRFQ = (): RFQConfig => {
125
125
  const url = getEnv('GENERIC_RFQ_URL');
126
126
 
127
127
  const secret = {
128
- secretKey: atob(getEnv('GENERIC_RFQ_SECRET_KEY')),
128
+ secretKey: Buffer.from(getEnv('GENERIC_RFQ_SECRET_KEY'), 'base64').toString('binary'),
129
129
  accessKey: getEnv('GENERIC_RFQ_ACCESS_KEY'),
130
130
  domain: 'paraswap',
131
131
  };
@@ -179,6 +179,8 @@ const buildConfigForGenericRFQ = (): RFQConfig => {
179
179
  };
180
180
  };
181
181
 
182
+ const SKIP_TENDERLY = !!getEnv('GENERIC_RFQ_SKIP_TENDERLY', true);
183
+
182
184
  describe('GenericRFQ YOUR_NAME E2E Mainnet', () => {
183
185
  const dexKey = 'YOUR_NAME';
184
186
 
@@ -189,62 +191,67 @@ describe('GenericRFQ YOUR_NAME E2E Mainnet', () => {
189
191
  config.rfqConfigs[dexKey] = buildConfigForGenericRFQ();
190
192
 
191
193
  describe('GenericRFQ B/Q BUY', () => {
192
- const srcToken = smartTokens.USDC;
193
- const destToken = smartTokens.WBTC;
194
-
195
- srcToken.addBalance(testAccount.address, MAX_UINT);
196
- srcToken.addAllowance(
197
- testAccount.address,
198
- config.augustusRFQAddress,
199
- MAX_UINT,
200
- );
201
-
202
- destToken.addBalance(testAccount.address, MAX_UINT);
203
- destToken.addAllowance(
204
- testAccount.address,
205
- config.augustusRFQAddress,
206
- MAX_UINT,
207
- );
194
+ const srcToken = smartTokens.USDT;
195
+ const destToken = smartTokens.WETH;
196
+
197
+ if (!SKIP_TENDERLY) {
198
+ srcToken.addBalance(testAccount.address, MAX_UINT);
199
+ srcToken.addAllowance(
200
+ testAccount.address,
201
+ config.augustusRFQAddress,
202
+ MAX_UINT,
203
+ );
204
+
205
+ destToken.addBalance(testAccount.address, MAX_UINT);
206
+ destToken.addAllowance(
207
+ testAccount.address,
208
+ config.augustusRFQAddress,
209
+ MAX_UINT,
210
+ );
211
+ }
208
212
 
209
213
  describe('Simpleswap', () => {
210
- it('BUY USDC -> WBTC', async () => {
214
+ it('BUY USDT -> WETH', async () => {
211
215
  await newTestE2E({
212
216
  config,
213
217
  srcToken,
214
218
  destToken,
215
219
  senderAddress: GENERIC_ADDR1,
216
220
  thirdPartyAddress: testAccount.address,
217
- _amount: '1000000',
221
+ _amount: '10000000000000000',
218
222
  swapSide: SwapSide.BUY,
219
223
  dexKey: dexKey,
220
224
  contractMethod: ContractMethod.simpleBuy,
221
225
  network: network,
222
226
  sleepMs: 5000,
227
+ skipTenderly: SKIP_TENDERLY,
223
228
  });
224
229
  });
225
230
  });
226
231
  });
227
232
 
228
233
  describe('GenericRFQ Q/B BUY', () => {
229
- const srcToken = smartTokens.WBTC;
230
- const destToken = smartTokens.USDC;
231
-
232
- srcToken.addBalance(testAccount.address, MAX_UINT);
233
- srcToken.addAllowance(
234
- testAccount.address,
235
- config.augustusRFQAddress,
236
- MAX_UINT,
237
- );
238
-
239
- destToken.addBalance(testAccount.address, MAX_UINT);
240
- destToken.addAllowance(
241
- testAccount.address,
242
- config.augustusRFQAddress,
243
- MAX_UINT,
244
- );
234
+ const srcToken = smartTokens.WETH;
235
+ const destToken = smartTokens.USDT;
236
+
237
+ if (!SKIP_TENDERLY) {
238
+ srcToken.addBalance(testAccount.address, MAX_UINT);
239
+ srcToken.addAllowance(
240
+ testAccount.address,
241
+ config.augustusRFQAddress,
242
+ MAX_UINT,
243
+ );
244
+
245
+ destToken.addBalance(testAccount.address, MAX_UINT);
246
+ destToken.addAllowance(
247
+ testAccount.address,
248
+ config.augustusRFQAddress,
249
+ MAX_UINT,
250
+ );
251
+ }
245
252
 
246
253
  describe('Simpleswap', () => {
247
- it('BUY WBTC -> USDC', async () => {
254
+ it('BUY WETH -> USDT', async () => {
248
255
  await newTestE2E({
249
256
  config,
250
257
  srcToken,
@@ -257,31 +264,34 @@ describe('GenericRFQ YOUR_NAME E2E Mainnet', () => {
257
264
  contractMethod: ContractMethod.simpleBuy,
258
265
  network: network,
259
266
  sleepMs: 5000,
267
+ skipTenderly: SKIP_TENDERLY,
260
268
  });
261
269
  });
262
270
  });
263
271
  });
264
272
 
265
273
  describe('GenericRFQ B/Q SELL', () => {
266
- const srcToken = smartTokens.USDC;
267
- const destToken = smartTokens.WBTC;
268
-
269
- srcToken.addBalance(testAccount.address, MAX_UINT);
270
- srcToken.addAllowance(
271
- testAccount.address,
272
- config.augustusRFQAddress,
273
- MAX_UINT,
274
- );
275
-
276
- destToken.addBalance(testAccount.address, MAX_UINT);
277
- destToken.addAllowance(
278
- testAccount.address,
279
- config.augustusRFQAddress,
280
- MAX_UINT,
281
- );
274
+ const srcToken = smartTokens.USDT;
275
+ const destToken = smartTokens.WETH;
276
+
277
+ if (!SKIP_TENDERLY) {
278
+ srcToken.addBalance(testAccount.address, MAX_UINT);
279
+ srcToken.addAllowance(
280
+ testAccount.address,
281
+ config.augustusRFQAddress,
282
+ MAX_UINT,
283
+ );
284
+
285
+ destToken.addBalance(testAccount.address, MAX_UINT);
286
+ destToken.addAllowance(
287
+ testAccount.address,
288
+ config.augustusRFQAddress,
289
+ MAX_UINT,
290
+ );
291
+ }
282
292
 
283
293
  describe('Simpleswap', () => {
284
- it('SELL USDC -> WBTC', async () => {
294
+ it('SELL USDT -> WETH', async () => {
285
295
  await newTestE2E({
286
296
  config,
287
297
  srcToken,
@@ -294,43 +304,47 @@ describe('GenericRFQ YOUR_NAME E2E Mainnet', () => {
294
304
  contractMethod: ContractMethod.simpleSwap,
295
305
  network: network,
296
306
  sleepMs: 5000,
307
+ skipTenderly: SKIP_TENDERLY,
297
308
  });
298
309
  });
299
310
  });
300
311
  });
301
312
 
302
313
  describe('GenericRFQ Q/B SELL', () => {
303
- const srcToken = smartTokens.WBTC;
304
- const destToken = smartTokens.USDC;
305
-
306
- srcToken.addBalance(testAccount.address, MAX_UINT);
307
- srcToken.addAllowance(
308
- testAccount.address,
309
- config.augustusRFQAddress,
310
- MAX_UINT,
311
- );
312
-
313
- destToken.addBalance(testAccount.address, MAX_UINT);
314
- destToken.addAllowance(
315
- testAccount.address,
316
- config.augustusRFQAddress,
317
- MAX_UINT,
318
- );
314
+ const srcToken = smartTokens.WETH;
315
+ const destToken = smartTokens.USDT;
316
+
317
+ if (!SKIP_TENDERLY) {
318
+ srcToken.addBalance(testAccount.address, MAX_UINT);
319
+ srcToken.addAllowance(
320
+ testAccount.address,
321
+ config.augustusRFQAddress,
322
+ MAX_UINT,
323
+ );
324
+
325
+ destToken.addBalance(testAccount.address, MAX_UINT);
326
+ destToken.addAllowance(
327
+ testAccount.address,
328
+ config.augustusRFQAddress,
329
+ MAX_UINT,
330
+ );
331
+ }
319
332
 
320
333
  describe('Simpleswap', () => {
321
- it('SELL WBTC -> USDC', async () => {
334
+ it('SELL WETH -> USDT', async () => {
322
335
  await newTestE2E({
323
336
  config,
324
337
  srcToken,
325
338
  destToken,
326
339
  senderAddress: GENERIC_ADDR1,
327
340
  thirdPartyAddress: testAccount.address,
328
- _amount: '10000',
341
+ _amount: '10000000000000000',
329
342
  swapSide: SwapSide.SELL,
330
343
  dexKey: dexKey,
331
344
  contractMethod: ContractMethod.simpleSwap,
332
345
  network: network,
333
346
  sleepMs: 5000,
347
+ skipTenderly: SKIP_TENDERLY,
334
348
  });
335
349
  });
336
350
  });
@@ -112,10 +112,11 @@ describe('GenericRFQ Validator test', () => {
112
112
  },
113
113
  };
114
114
 
115
- const pricesInvalidBidsNotSortedDesc = {
115
+ const pricesNegativeSpread = {
116
116
  prices: {
117
117
  'WETH/DAI': {
118
118
  bids: [
119
+ ['1337.425240000000000000', '1.166200000000000000'],
119
120
  ['1333.024812000000000000', '1.166200000000000000'],
120
121
  ['1333.425240000000000000', '1.166200000000000000'],
121
122
  ['1332.624384000000000000', '1.166200000000000000'],
@@ -135,29 +136,6 @@ describe('GenericRFQ Validator test', () => {
135
136
  },
136
137
  };
137
138
 
138
- const pricesInvalidAskNotSortedAsc = {
139
- prices: {
140
- 'WETH/DAI': {
141
- bids: [
142
- ['1333.425240000000000000', '1.166200000000000000'],
143
- ['1333.024812000000000000', '1.166200000000000000'],
144
- ['1332.624384000000000000', '1.166200000000000000'],
145
- ['1332.223956000000000000', '1.166200000000000000'],
146
- ['1331.823528000000000000', '1.166200000000000000'],
147
- ['1331.423100000000000000', '1.169000000000000000'],
148
- ],
149
- asks: [
150
- ['1337.146033000000000000', '1.166200000000000000'],
151
- ['1336.745410000000000000', '1.166200000000000000'],
152
- ['1337.546656000000000000', '1.166200000000000000'],
153
- ['1337.947279000000000000', '1.166200000000000000'],
154
- ['1338.347902000000000000', '1.166200000000000000'],
155
- ['1338.748525000000000000', '1.169000000000000000'],
156
- ],
157
- },
158
- },
159
- };
160
-
161
139
  const noPrices = {
162
140
  prices: {
163
141
  'WETH/DAI': {},
@@ -200,12 +178,6 @@ describe('GenericRFQ Validator test', () => {
200
178
 
201
179
  it('Price test', () => {
202
180
  expect(() => validateAndCast(prices, pricesResponse)).not.toThrowError();
203
- expect(() =>
204
- validateAndCast(pricesInvalidBidsNotSortedDesc, pricesResponse),
205
- ).toThrowError();
206
- expect(() =>
207
- validateAndCast(pricesInvalidAskNotSortedAsc, pricesResponse),
208
- ).toThrowError();
209
181
  expect(() =>
210
182
  validateAndCast(noPrices, pricesResponse),
211
183
  ).not.toThrowError();
@@ -218,6 +190,9 @@ describe('GenericRFQ Validator test', () => {
218
190
  expect(() =>
219
191
  validateAndCast(onlyAsks, pricesResponse),
220
192
  ).not.toThrowError();
193
+ expect(() =>
194
+ validateAndCast(pricesNegativeSpread, pricesResponse),
195
+ ).toThrowError('the maximum bid is higher than minimum ask');
221
196
  });
222
197
  });
223
198
 
@@ -261,11 +236,10 @@ describe('GenericRFQ Validator test', () => {
261
236
  },
262
237
  };
263
238
 
264
- it('Blacklist test', () => {
239
+ it('Order test', () => {
265
240
  expect(() =>
266
241
  validateAndCast(order, firmRateResponseValidator),
267
242
  ).not.toThrowError();
268
- // expect(() => validateAndCast(invalidBlacklist, blacklistResponseValidator)).toThrowError();
269
243
  });
270
244
  });
271
245
  });
@@ -56,7 +56,7 @@ const stringNumberValidator = (
56
56
  return value;
57
57
  };
58
58
 
59
- const pricesValidatorWithoutSorting = joi
59
+ const pricesValidator = joi
60
60
  .array()
61
61
  .items(
62
62
  joi
@@ -66,47 +66,58 @@ const pricesValidatorWithoutSorting = joi
66
66
  );
67
67
 
68
68
  const ext: joi.Extension = {
69
- type: 'sortedArray',
70
- base: pricesValidatorWithoutSorting,
69
+ type: 'validatedPrices',
70
+ base: joi.object({
71
+ bids: pricesValidator,
72
+ asks: pricesValidator,
73
+ }),
71
74
  rules: {
72
- asc: {
73
- validate: (values: string[], helpers: CustomHelpers) => {
74
- const prices = values.map(numbers => new BigNumber(numbers[0]));
75
- const isAscOrder = prices.every(
76
- (x, i) => i === 0 || x.gte(prices[i - 1]),
77
- );
78
- return isAscOrder
75
+ bidsLowerThanAsks: {
76
+ validate: (
77
+ values: { bids: string[]; asks: string[] },
78
+ helpers: CustomHelpers,
79
+ ) => {
80
+ if (
81
+ !values.bids ||
82
+ !values.asks ||
83
+ values.bids.length === 0 ||
84
+ values.asks.length === 0
85
+ ) {
86
+ return values;
87
+ }
88
+ const maxBid = values.bids
89
+ .map(numbers => new BigNumber(numbers[0]))
90
+ .reduce(
91
+ (previousValue, currentValue) =>
92
+ currentValue.gte(previousValue) ? currentValue : previousValue,
93
+ new BigNumber(0),
94
+ );
95
+ const minAsk = values.asks
96
+ .map(numbers => new BigNumber(numbers[0]))
97
+ .reduce(
98
+ (previousValue, currentValue) =>
99
+ currentValue.lte(previousValue) ? currentValue : previousValue,
100
+ new BigNumber('123456789012345678901234567890'),
101
+ );
102
+ return maxBid < minAsk
79
103
  ? values
80
104
  : helpers.message({
81
- custom: `array is not asc sorted ${JSON.stringify(values)}`,
82
- });
83
- },
84
- },
85
- desc: {
86
- validate: (values: string[][], helpers: CustomHelpers) => {
87
- const prices = values.map(numbers => new BigNumber(numbers[0]));
88
- const isAscOrder = prices.every(
89
- (x, i) => i === 0 || x.lte(prices[i - 1]),
90
- );
91
- return isAscOrder
92
- ? values
93
- : helpers.message({
94
- custom: `array is not desc sorted ${JSON.stringify(values)}`,
105
+ custom: 'the maximum bid is higher than minimum ask',
95
106
  });
96
107
  },
97
108
  },
98
109
  },
99
110
  };
100
111
 
101
- const pricesArrayValidator = joi.extend(ext);
102
-
103
- export const priceValidator = joi.object({
104
- bids: pricesArrayValidator.sortedArray().desc(),
105
- asks: pricesArrayValidator.sortedArray().asc(),
106
- });
112
+ export const priceValidator = joi.extend(ext);
107
113
 
108
114
  export const pricesResponse = joi.object({
109
- prices: joi.object().pattern(joi.string().min(1), priceValidator),
115
+ prices: joi
116
+ .object()
117
+ .pattern(
118
+ joi.string().min(1),
119
+ priceValidator.validatedPrices().bidsLowerThanAsks(),
120
+ ),
110
121
  });
111
122
 
112
123
  export const validateAndCast = <T>(
@@ -171,12 +182,26 @@ const stringStartWithHex0x = (
171
182
  return value;
172
183
  };
173
184
 
185
+ const mustBeAugustusSwapper = (
186
+ value: string,
187
+ helpers: CustomHelpers,
188
+ ): string | ErrorReport => {
189
+ const allowedTakers = [
190
+ '0xDEF171Fe48CF0115B1d80b88dc8eAB59176FEe57'.toLowerCase(),
191
+ ];
192
+ return allowedTakers.includes(value.toLowerCase())
193
+ ? value
194
+ : helpers.message({
195
+ custom: `"order.taker" must be any of ${JSON.stringify(allowedTakers)}`,
196
+ });
197
+ };
198
+
174
199
  export const orderWithSignatureValidator = joi
175
200
  .object({
176
201
  nonceAndMeta: joi.string().custom(stringPositiveBigIntValidator),
177
202
  expiry: joi.number().min(0),
178
203
  maker: addressSchema.required(),
179
- taker: addressSchema.required(),
204
+ taker: addressSchema.required().custom(mustBeAugustusSwapper),
180
205
  makerAsset: addressSchema.required(),
181
206
  takerAsset: addressSchema.required(),
182
207
  makerAmount: joi
@@ -46,6 +46,8 @@ export const Tokens: {
46
46
  USDT: {
47
47
  address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
48
48
  decimals: 6,
49
+ addBalance: balancesFn,
50
+ addAllowance: allowedFn,
49
51
  },
50
52
  STETH: {
51
53
  address: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
@@ -297,6 +297,7 @@ export type TestParamE2E = {
297
297
  destTokenBalanceOverrides?: Record<Address, string>;
298
298
  destTokenAllowanceOverrides?: Record<Address, string>;
299
299
  sleepMs?: number;
300
+ skipTenderly?: boolean;
300
301
  };
301
302
 
302
303
  const makeFakeTransferToSenderAddress = (
@@ -330,14 +331,19 @@ export async function newTestE2E({
330
331
  limitOrderProvider,
331
332
  transferFees,
332
333
  sleepMs,
334
+ skipTenderly,
333
335
  }: TestParamE2E) {
336
+ const useTenderly = !skipTenderly;
334
337
  const amount = BigInt(_amount);
335
338
  const twiceAmount = BigInt(_amount) * 2n;
336
- const ts = new TenderlySimulation(network);
337
- await ts.setup();
339
+ let ts: TenderlySimulation | undefined = undefined;
340
+ if (useTenderly) {
341
+ ts = new TenderlySimulation(network);
342
+ await ts.setup();
343
+ }
338
344
 
339
- if (adapterBytecode) {
340
- const deployTx = await ts.simulate(
345
+ if (useTenderly && adapterBytecode) {
346
+ const deployTx = await (ts as TenderlySimulation).simulate(
341
347
  deployAdapterParams(adapterBytecode, network),
342
348
  );
343
349
 
@@ -352,13 +358,13 @@ export async function newTestE2E({
352
358
  'gas',
353
359
  );
354
360
 
355
- const whitelistTx = await ts.simulate(
361
+ const whitelistTx = await (ts as TenderlySimulation).simulate(
356
362
  whiteListAdapterParams(adapterAddress, network),
357
363
  );
358
364
  expect(whitelistTx.success).toEqual(true);
359
365
  }
360
366
 
361
- if (thirdPartyAddress) {
367
+ if (useTenderly && thirdPartyAddress) {
362
368
  const stateOverrides: StateOverrides = {
363
369
  networkID: `${network}`,
364
370
  stateOverrides: {},
@@ -375,43 +381,15 @@ export async function newTestE2E({
375
381
  : (BigInt(MAX_UINT) / 4n).toString(),
376
382
  );
377
383
 
378
- await ts.simulate(giftTx, stateOverrides);
384
+ await (ts as TenderlySimulation).simulate(giftTx, stateOverrides);
379
385
  }
380
386
 
381
- const stateOverrides: StateOverrides = {
382
- networkID: `${network}`,
383
- stateOverrides: {},
384
- };
385
- srcToken.applyOverrides(stateOverrides);
386
- destToken.applyOverrides(stateOverrides);
387
-
388
- if (swapSide === SwapSide.SELL) {
389
- srcToken
390
- .addBalance(senderAddress, twiceAmount.toString())
391
- .addAllowance(
392
- senderAddress,
393
- config.tokenTransferProxyAddress,
394
- amount.toString(),
395
- );
396
- } else {
397
- srcToken
398
- .addBalance(senderAddress, MAX_UINT)
399
- .addAllowance(
400
- senderAddress,
401
- config.tokenTransferProxyAddress,
402
- (BigInt(MAX_UINT) / 8n).toString(),
403
- );
404
- }
405
-
406
- srcToken.applyOverrides(stateOverrides);
407
- destToken.applyOverrides(stateOverrides);
408
-
409
387
  const useAPI = testingEndpoint && !poolIdentifiers;
410
388
  // The API currently doesn't allow for specifying poolIdentifiers
411
389
  const paraswap: IParaSwapSDK = new LocalParaswapSDK(
412
390
  network,
413
391
  dexKey,
414
- `https://rpc.tenderly.co/fork/${ts.forkId}`,
392
+ '',
415
393
  limitOrderProvider,
416
394
  );
417
395
 
@@ -447,19 +425,52 @@ export async function newTestE2E({
447
425
  senderAddress,
448
426
  );
449
427
 
450
- const swapTx = await ts.simulate(swapParams, stateOverrides);
451
- console.log(`${srcToken.address}_${destToken.address}_${dexKey!}`);
452
- // Only log gas estimate if testing against API
453
- if (useAPI)
454
- console.log(
455
- `Gas Estimate API: ${priceRoute.gasCost}, Simulated: ${
456
- swapTx!.gasUsed
457
- }, Difference: ${
458
- parseInt(priceRoute.gasCost) - parseInt(swapTx!.gasUsed)
459
- }`,
428
+ if (useTenderly) {
429
+ const stateOverrides: StateOverrides = {
430
+ networkID: `${network}`,
431
+ stateOverrides: {},
432
+ };
433
+ srcToken.applyOverrides(stateOverrides);
434
+ destToken.applyOverrides(stateOverrides);
435
+
436
+ if (swapSide === SwapSide.SELL) {
437
+ srcToken
438
+ .addBalance(senderAddress, twiceAmount.toString())
439
+ .addAllowance(
440
+ senderAddress,
441
+ config.tokenTransferProxyAddress,
442
+ amount.toString(),
443
+ );
444
+ } else {
445
+ srcToken
446
+ .addBalance(senderAddress, MAX_UINT)
447
+ .addAllowance(
448
+ senderAddress,
449
+ config.tokenTransferProxyAddress,
450
+ (BigInt(MAX_UINT) / 8n).toString(),
451
+ );
452
+ }
453
+
454
+ srcToken.applyOverrides(stateOverrides);
455
+ destToken.applyOverrides(stateOverrides);
456
+
457
+ const swapTx = await (ts as TenderlySimulation).simulate(
458
+ swapParams,
459
+ stateOverrides,
460
460
  );
461
- console.log(`Tenderly URL: ${swapTx!.tenderlyUrl}`);
462
- expect(swapTx!.success).toEqual(true);
461
+ console.log(`${srcToken.address}_${destToken.address}_${dexKey!}`);
462
+ // Only log gas estimate if testing against API
463
+ if (useAPI)
464
+ console.log(
465
+ `Gas Estimate API: ${priceRoute.gasCost}, Simulated: ${
466
+ swapTx!.gasUsed
467
+ }, Difference: ${
468
+ parseInt(priceRoute.gasCost) - parseInt(swapTx!.gasUsed)
469
+ }`,
470
+ );
471
+ console.log(`Tenderly URL: ${swapTx!.tenderlyUrl}`);
472
+ expect(swapTx!.success).toEqual(true);
473
+ }
463
474
  } finally {
464
475
  if (paraswap.releaseResources) {
465
476
  await paraswap.releaseResources();