@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.
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.vscode/launch.json +21 -0
- package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
- package/build/dex/aave-v3/tokens/avalanche.json +50 -0
- package/build/dex/aave-v3/tokens/fantom.json +62 -0
- package/build/dex/aave-v3/tokens/mainnet.json +44 -0
- package/build/dex/aave-v3/tokens/optimism.json +50 -0
- package/build/dex/aave-v3/tokens/polygon.json +98 -0
- package/build/dex/balancer-v2/VirtualBoostedPool.d.ts +79 -0
- package/build/dex/balancer-v2/VirtualBoostedPool.js +382 -0
- package/build/dex/balancer-v2/VirtualBoostedPool.js.map +1 -0
- package/build/dex/generic-rfq/validators.d.ts +1 -1
- package/build/dex/generic-rfq/validators.js +36 -26
- package/build/dex/generic-rfq/validators.js.map +1 -1
- package/build/dex/test-aave-v3/config.d.ts +4 -0
- package/build/dex/test-aave-v3/config.js +15 -0
- package/build/dex/test-aave-v3/config.js.map +1 -0
- package/build/dex/test-aave-v3/test-aave-v3-pool.d.ts +39 -0
- package/build/dex/test-aave-v3/test-aave-v3-pool.js +63 -0
- package/build/dex/test-aave-v3/test-aave-v3-pool.js.map +1 -0
- package/build/dex/test-aave-v3/test-aave-v3.d.ts +37 -0
- package/build/dex/test-aave-v3/test-aave-v3.js +126 -0
- package/build/dex/test-aave-v3/test-aave-v3.js.map +1 -0
- package/build/dex/test-aave-v3/types.d.ts +6 -0
- package/build/dex/{maverick → test-aave-v3}/types.js.map +1 -1
- package/package.json +1 -1
- package/src/dex/generic-rfq/generic-rfq-e2e-arbitrum.test.ts +360 -0
- package/src/dex/generic-rfq/generic-rfq-e2e-bsc.test.ts +346 -0
- package/src/dex/generic-rfq/generic-rfq-e2e-polygon.test.ts +360 -0
- package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +85 -71
- package/src/dex/generic-rfq/validators.test.ts +6 -32
- package/src/dex/generic-rfq/validators.ts +57 -32
- package/tests/constants-e2e.ts +2 -0
- package/tests/utils-e2e.ts +59 -48
- package/build/abi/maverick/pool.json +0 -913
- package/build/abi/maverick/router.json +0 -703
- package/build/dex/maverick/config.d.ts +0 -4
- package/build/dex/maverick/config.js +0 -20
- package/build/dex/maverick/config.js.map +0 -1
- package/build/dex/maverick/maverick-math/maverick-pool-math.d.ts +0 -67
- package/build/dex/maverick/maverick-math/maverick-pool-math.js +0 -406
- package/build/dex/maverick/maverick-math/maverick-pool-math.js.map +0 -1
- package/build/dex/maverick/maverick-math/maverick-sol-math.d.ts +0 -17
- package/build/dex/maverick/maverick-math/maverick-sol-math.js +0 -139
- package/build/dex/maverick/maverick-math/maverick-sol-math.js.map +0 -1
- package/build/dex/maverick/maverick-pool.d.ts +0 -41
- package/build/dex/maverick/maverick-pool.js +0 -130
- package/build/dex/maverick/maverick-pool.js.map +0 -1
- package/build/dex/maverick/maverick.d.ts +0 -42
- package/build/dex/maverick/maverick.js +0 -174
- package/build/dex/maverick/maverick.js.map +0 -1
- package/build/dex/maverick/subgraph-queries.d.ts +0 -4
- package/build/dex/maverick/subgraph-queries.js +0 -114
- package/build/dex/maverick/subgraph-queries.js.map +0 -1
- package/build/dex/maverick/types.d.ts +0 -46
- /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:
|
|
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.
|
|
193
|
-
const destToken = smartTokens.
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
|
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: '
|
|
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.
|
|
230
|
-
const destToken = smartTokens.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
|
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.
|
|
267
|
-
const destToken = smartTokens.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
|
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.
|
|
304
|
-
const destToken = smartTokens.
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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
|
|
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: '
|
|
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
|
|
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('
|
|
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
|
|
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: '
|
|
70
|
-
base:
|
|
69
|
+
type: 'validatedPrices',
|
|
70
|
+
base: joi.object({
|
|
71
|
+
bids: pricesValidator,
|
|
72
|
+
asks: pricesValidator,
|
|
73
|
+
}),
|
|
71
74
|
rules: {
|
|
72
|
-
|
|
73
|
-
validate: (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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:
|
|
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
|
|
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
|
|
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
|
package/tests/constants-e2e.ts
CHANGED
package/tests/utils-e2e.ts
CHANGED
|
@@ -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
|
-
|
|
337
|
-
|
|
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
|
-
|
|
392
|
+
'',
|
|
415
393
|
limitOrderProvider,
|
|
416
394
|
);
|
|
417
395
|
|
|
@@ -447,19 +425,52 @@ export async function newTestE2E({
|
|
|
447
425
|
senderAddress,
|
|
448
426
|
);
|
|
449
427
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
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
|
-
|
|
462
|
-
|
|
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();
|