@paraswap/dex-lib 2.15.2-curve-v1-issue → 2.15.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/.idea/modules.xml +1 -1
- package/.vscode/launch.json +21 -0
- package/build/dex/aave-v3/tokens/arbitrum.json +20 -20
- package/build/dex/aave-v3/tokens/avalanche.json +20 -44
- package/build/dex/aave-v3/tokens/fantom.json +30 -30
- package/build/dex/aave-v3/tokens/mainnet.json +44 -0
- package/build/dex/aave-v3/tokens/optimism.json +18 -18
- package/build/dex/aave-v3/tokens/polygon.json +42 -60
- 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/curve-v1/curve-v1.js +1 -1
- package/build/dex/curve-v1/curve-v1.js.map +1 -1
- package/build/dex/curve-v1/pools/curve-pool.js +2 -3
- package/build/dex/curve-v1/pools/curve-pool.js.map +1 -1
- package/build/dex/generic-rfq/rate-fetcher.js +2 -2
- package/build/dex/generic-rfq/rate-fetcher.js.map +1 -1
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/hashflow/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/test-aave-v3/types.js +3 -0
- package/build/dex/test-aave-v3/types.js.map +1 -0
- package/build/lib/fetcher/fetcher.js +1 -2
- package/build/lib/fetcher/fetcher.js.map +1 -1
- package/package.json +1 -1
- package/src/dex/curve-v1/curve-v1.ts +1 -1
- package/src/dex/curve-v1/pools/curve-pool.ts +2 -2
- package/src/dex/generic-rfq/generic-rfq-e2e.test.ts +26 -10
- package/src/dex/generic-rfq/rate-fetcher.ts +8 -4
- package/src/dex/hashflow/hashflow.ts +1 -1
- package/src/dex/hashflow/validators.ts +18 -14
- package/src/lib/fetcher/fetcher.ts +40 -35
- package/tests/constants-e2e.ts +4 -0
- package/tests/utils-e2e.ts +35 -11
- package/.idea/aws.xml +0 -17
- package/.idea/codeStyles/Project.xml +0 -19
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/paraswap-dex-lib.iml +0 -9
- package/.idea/runConfigurations.xml +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/lib/fetcher/fetcher.ts"],"names":[],"mappings":";;;AAGA,mCAAoC;AAEpC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,MAAa,eAAe;IAC1B,
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/lib/fetcher/fetcher.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -503,7 +503,7 @@ export class CurveV1 extends SimpleExchange implements IDex<CurveV1Data> {
|
|
|
503
503
|
|
|
504
504
|
let fromIndex = curveIndexes[0];
|
|
505
505
|
let toIndex = curveIndexes[1];
|
|
506
|
-
let isTokenSwap = curveIndexes[2]
|
|
506
|
+
let isTokenSwap = curveIndexes[2] == 1;
|
|
507
507
|
|
|
508
508
|
let pool = this.getPoolByAddress(exchange);
|
|
509
509
|
if (!pool) {
|
|
@@ -323,7 +323,7 @@ export abstract class CurvePool extends StatefulEventSubscriber<PoolState> {
|
|
|
323
323
|
const xp = this._xp(rates, balances);
|
|
324
324
|
const x = xp[i].plus(dx.times(this.PRECISION_MUL[i]));
|
|
325
325
|
const y = this.get_y(i, j, x, xp, A);
|
|
326
|
-
const dy = xp[j].minus(y).
|
|
326
|
+
const dy = xp[j].minus(y).idiv(this.PRECISION_MUL[j]);
|
|
327
327
|
let _fee = fee.times(dy).idiv(this.FEE_DENOMINATOR);
|
|
328
328
|
if (!usefee) _fee = BN_0;
|
|
329
329
|
return dy.minus(_fee);
|
|
@@ -360,7 +360,7 @@ export abstract class CurvePool extends StatefulEventSubscriber<PoolState> {
|
|
|
360
360
|
const xp = this._xp(rates, balances);
|
|
361
361
|
const x = xp[i].plus(dx.times(rates[i]).idiv(this.PRECISION));
|
|
362
362
|
const y = this.get_y(i, j, x, xp, A);
|
|
363
|
-
const dy = xp[j].minus(y).
|
|
363
|
+
const dy = xp[j].minus(y).times(this.PRECISION).idiv(rates[j]);
|
|
364
364
|
let _fee = fee.times(dy).idiv(this.FEE_DENOMINATOR);
|
|
365
365
|
if (!usefee) _fee = BN_0;
|
|
366
366
|
return dy.minus(_fee);
|
|
@@ -5,9 +5,15 @@ import { ethers } from 'ethers';
|
|
|
5
5
|
import { Network, ContractMethod, SwapSide, MAX_UINT } from '../../constants';
|
|
6
6
|
import { generateConfig } from '../../config';
|
|
7
7
|
import { newTestE2E, getEnv } from '../../../tests/utils-e2e';
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
SmartTokens,
|
|
10
|
+
GENERIC_ADDR1,
|
|
11
|
+
Tokens,
|
|
12
|
+
} from '../../../tests/constants-e2e';
|
|
9
13
|
import { RFQConfig } from './types';
|
|
10
14
|
import { testConfig } from './e2e-test-config';
|
|
15
|
+
import { SmartToken } from '../../../tests/smart-tokens';
|
|
16
|
+
import { Token } from '../../types';
|
|
11
17
|
|
|
12
18
|
const PK_KEY = process.env.TEST_PK_KEY;
|
|
13
19
|
|
|
@@ -85,22 +91,32 @@ const dexKey = 'YOUR_NAME';
|
|
|
85
91
|
describe(`GenericRFQ ${dexKey} E2E`, () => {
|
|
86
92
|
for (const [_network, testCases] of Object.entries(testConfig)) {
|
|
87
93
|
const network = parseInt(_network, 10);
|
|
94
|
+
const tokens = Tokens[network];
|
|
88
95
|
const smartTokens = SmartTokens[network];
|
|
89
96
|
const config = generateConfig(network);
|
|
90
97
|
|
|
91
98
|
config.rfqConfigs[dexKey] = buildConfigForGenericRFQ();
|
|
92
99
|
describe(`${Network[network]}`, () => {
|
|
93
100
|
for (const testCase of testCases) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
let srcToken: Token | SmartToken, destToken: Token | SmartToken;
|
|
102
|
+
|
|
103
|
+
if (SKIP_TENDERLY) {
|
|
104
|
+
srcToken = tokens[testCase.srcToken];
|
|
105
|
+
destToken = tokens[testCase.destToken];
|
|
106
|
+
} else {
|
|
107
|
+
if (!smartTokens.hasOwnProperty(testCase.srcToken)) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`Please add "addBalance" and "addAllowance" functions for ${testCase.srcToken} on ${Network[network]} (in constants-e2e.ts).`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
if (!smartTokens.hasOwnProperty(testCase.destToken)) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
`Please add "addBalance" and "addAllowance" functions for ${testCase.destToken} on ${Network[network]} (in constants-e2e.ts).`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
srcToken = smartTokens[testCase.srcToken];
|
|
118
|
+
destToken = smartTokens[testCase.destToken];
|
|
102
119
|
|
|
103
|
-
if (!SKIP_TENDERLY) {
|
|
104
120
|
srcToken.addBalance(testAccount.address, MAX_UINT);
|
|
105
121
|
srcToken.addAllowance(
|
|
106
122
|
testAccount.address,
|
|
@@ -401,13 +401,17 @@ export class RateFetcher {
|
|
|
401
401
|
this.firmRateAuth(payload);
|
|
402
402
|
delete payload.secret;
|
|
403
403
|
}
|
|
404
|
-
|
|
405
|
-
|
|
404
|
+
this.logger.info(
|
|
405
|
+
'FirmRate Request:',
|
|
406
|
+
JSON.stringify(payload).replace(/(?:\r\n|\r|\n)/g, ' '),
|
|
407
|
+
);
|
|
406
408
|
const { data } = await this.dexHelper.httpRequest.request<unknown>(
|
|
407
409
|
payload,
|
|
408
410
|
);
|
|
409
|
-
this.logger.info(
|
|
410
|
-
|
|
411
|
+
this.logger.info(
|
|
412
|
+
'FirmRate Response: ',
|
|
413
|
+
JSON.stringify(data).replace(/(?:\r\n|\r|\n)/g, ' '),
|
|
414
|
+
);
|
|
411
415
|
const firmRateResp = validateAndCast<RFQFirmRateResponse>(
|
|
412
416
|
data,
|
|
413
417
|
firmRateResponseValidator,
|
|
@@ -115,7 +115,7 @@ export class Hashflow extends SimpleExchange implements IDex<HashflowData> {
|
|
|
115
115
|
rateConfig: {
|
|
116
116
|
pricesIntervalMs: HASHFLOW_API_PRICES_POLLING_INTERVAL_MS,
|
|
117
117
|
markerMakersIntervalMs:
|
|
118
|
-
|
|
118
|
+
HASHFLOW_API_MARKET_MAKERS_POLLING_INTERVAL_MS,
|
|
119
119
|
marketMakersReqParams: {
|
|
120
120
|
url: `${HASHFLOW_API_URL}/taker/v1/marketMakers`,
|
|
121
121
|
params: {
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import joi from 'joi';
|
|
2
2
|
|
|
3
|
-
export const levelValidator = joi.array().items(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
export const levelValidator = joi.array().items(
|
|
4
|
+
joi.object({
|
|
5
|
+
pair: joi.object({
|
|
6
|
+
baseTokenName: joi.string().min(1).required(),
|
|
7
|
+
quoteTokenName: joi.string().min(1).required(),
|
|
8
|
+
baseToken: joi.string().min(1).required(),
|
|
9
|
+
quoteToken: joi.string().min(1).required(),
|
|
10
|
+
baseTokenDecimals: joi.number().min(1).required(),
|
|
11
|
+
quoteTokenDecimals: joi.number().min(1).required(),
|
|
12
|
+
}),
|
|
13
|
+
levels: joi.array().items(
|
|
14
|
+
joi.object({
|
|
15
|
+
level: joi.string().min(1).required(),
|
|
16
|
+
price: joi.string().min(1).required(),
|
|
17
|
+
}),
|
|
18
|
+
),
|
|
19
|
+
includesFees: joi.boolean().required(),
|
|
11
20
|
}),
|
|
12
|
-
|
|
13
|
-
level: joi.string().min(1).required(),
|
|
14
|
-
price: joi.string().min(1).required(),
|
|
15
|
-
})),
|
|
16
|
-
includesFees: joi.boolean().required(),
|
|
17
|
-
}));
|
|
21
|
+
);
|
|
18
22
|
|
|
19
23
|
export const pricesResponseValidator = joi.object({
|
|
20
24
|
status: joi.string().required(),
|
|
@@ -8,13 +8,13 @@ const FETCH_FAIL_MAX_ATTEMPT = 5;
|
|
|
8
8
|
const FETCH_FAIL_RETRY_TIMEOUT_MS = 60 * 1000;
|
|
9
9
|
|
|
10
10
|
export class SkippingRequest {
|
|
11
|
-
constructor(
|
|
12
|
-
|
|
13
|
-
) {}
|
|
14
|
-
};
|
|
11
|
+
constructor(public message = '') {}
|
|
12
|
+
}
|
|
15
13
|
|
|
16
14
|
export type RequestInfo<T> = {
|
|
17
|
-
requestFunc?: (
|
|
15
|
+
requestFunc?: (
|
|
16
|
+
options: RequestConfig,
|
|
17
|
+
) => Promise<Response<T> | SkippingRequest>;
|
|
18
18
|
requestOptions: RequestConfig;
|
|
19
19
|
caster: (data: unknown) => T;
|
|
20
20
|
authenticate?: (options: RequestConfig) => RequestConfig;
|
|
@@ -60,35 +60,35 @@ export class Fetcher<T> {
|
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
const promises = this.requests.map<
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
const promises = this.requests.map<
|
|
64
|
+
Promise<Error | Response<T> | SkippingRequest>
|
|
65
|
+
>(async (reqInfo: RequestInfoWithHandler<T>) => {
|
|
66
|
+
const info = reqInfo.info;
|
|
67
|
+
let options = info.requestOptions;
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
if (info.authenticate) {
|
|
70
|
+
info.authenticate(options);
|
|
71
|
+
}
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return result;
|
|
87
|
-
} catch (e) {
|
|
88
|
-
return e as Error;
|
|
73
|
+
try {
|
|
74
|
+
let result;
|
|
75
|
+
if (isFunction(info.requestFunc)) {
|
|
76
|
+
result = await info.requestFunc({
|
|
77
|
+
timeout: FETCH_TIMEOUT_MS,
|
|
78
|
+
...options,
|
|
79
|
+
});
|
|
80
|
+
} else {
|
|
81
|
+
result = await this.requestWrapper.request({
|
|
82
|
+
timeout: FETCH_TIMEOUT_MS,
|
|
83
|
+
...options,
|
|
84
|
+
});
|
|
89
85
|
}
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
|
|
87
|
+
return result;
|
|
88
|
+
} catch (e) {
|
|
89
|
+
return e as Error;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
92
|
const results = await Promise.all(promises);
|
|
93
93
|
const failures = results
|
|
94
94
|
.map((_, i) => i)
|
|
@@ -99,7 +99,7 @@ export class Fetcher<T> {
|
|
|
99
99
|
.filter(i => results[i] instanceof SkippingRequest);
|
|
100
100
|
|
|
101
101
|
results.map(result => {
|
|
102
|
-
if(!(result instanceof Error || result instanceof SkippingRequest)) {
|
|
102
|
+
if (!(result instanceof Error || result instanceof SkippingRequest)) {
|
|
103
103
|
this.logger.info(
|
|
104
104
|
'Results Data:',
|
|
105
105
|
JSON.stringify((result as any).data)
|
|
@@ -131,7 +131,12 @@ export class Fetcher<T> {
|
|
|
131
131
|
|
|
132
132
|
results
|
|
133
133
|
.map((_, i) => i)
|
|
134
|
-
.filter(
|
|
134
|
+
.filter(
|
|
135
|
+
i =>
|
|
136
|
+
!(
|
|
137
|
+
results[i] instanceof Error || results[i] instanceof SkippingRequest
|
|
138
|
+
),
|
|
139
|
+
)
|
|
135
140
|
.forEach(i => {
|
|
136
141
|
const response = results[i] as Response<T>;
|
|
137
142
|
const reqInfo = this.requests[i];
|
|
@@ -143,10 +148,10 @@ export class Fetcher<T> {
|
|
|
143
148
|
const parsedData = info.caster(response.data);
|
|
144
149
|
reqInfo.handler(parsedData);
|
|
145
150
|
} catch (e) {
|
|
146
|
-
this.logger.
|
|
151
|
+
this.logger.info(
|
|
147
152
|
`(${options.url}) received incorrect data ${JSON.stringify(
|
|
148
153
|
response.data,
|
|
149
|
-
)}`,
|
|
154
|
+
).replace(/(?:\r\n|\r|\n)/g, ' ')}`,
|
|
150
155
|
e,
|
|
151
156
|
);
|
|
152
157
|
return;
|
package/tests/constants-e2e.ts
CHANGED
|
@@ -695,6 +695,8 @@ export const Tokens: {
|
|
|
695
695
|
WETH: {
|
|
696
696
|
address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
697
697
|
decimals: 18,
|
|
698
|
+
addBalance: _balancesFn,
|
|
699
|
+
addAllowance: _allowancesFn,
|
|
698
700
|
},
|
|
699
701
|
ETH: { address: ETHER_ADDRESS, decimals: 18 },
|
|
700
702
|
USDC: {
|
|
@@ -704,6 +706,8 @@ export const Tokens: {
|
|
|
704
706
|
USDT: {
|
|
705
707
|
address: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9',
|
|
706
708
|
decimals: 6,
|
|
709
|
+
addBalance: _balancesFn,
|
|
710
|
+
addAllowance: _allowancesFn,
|
|
707
711
|
},
|
|
708
712
|
FRAX: {
|
|
709
713
|
address: '0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F',
|
package/tests/utils-e2e.ts
CHANGED
|
@@ -30,6 +30,7 @@ import axios from 'axios';
|
|
|
30
30
|
import { SmartToken, StateOverrides } from './smart-tokens';
|
|
31
31
|
import { GIFTER_ADDRESS } from './constants-e2e';
|
|
32
32
|
import { sleep } from './utils';
|
|
33
|
+
import { assert } from 'ts-essentials';
|
|
33
34
|
|
|
34
35
|
export const testingEndpoint = process.env.E2E_TEST_ENDPOINT;
|
|
35
36
|
|
|
@@ -282,8 +283,8 @@ export async function testE2E(
|
|
|
282
283
|
|
|
283
284
|
export type TestParamE2E = {
|
|
284
285
|
config: Config;
|
|
285
|
-
srcToken: SmartToken;
|
|
286
|
-
destToken: SmartToken;
|
|
286
|
+
srcToken: Token | SmartToken;
|
|
287
|
+
destToken: Token | SmartToken;
|
|
287
288
|
senderAddress: Address;
|
|
288
289
|
thirdPartyAddress?: Address;
|
|
289
290
|
_amount: string;
|
|
@@ -345,7 +346,11 @@ export async function newTestE2E({
|
|
|
345
346
|
}
|
|
346
347
|
|
|
347
348
|
if (useTenderly && adapterBytecode) {
|
|
348
|
-
|
|
349
|
+
assert(
|
|
350
|
+
ts instanceof TenderlySimulation,
|
|
351
|
+
'`ts` is not an instance of TenderlySimulation',
|
|
352
|
+
);
|
|
353
|
+
const deployTx = await ts.simulate(
|
|
349
354
|
deployAdapterParams(adapterBytecode, network),
|
|
350
355
|
);
|
|
351
356
|
|
|
@@ -360,13 +365,22 @@ export async function newTestE2E({
|
|
|
360
365
|
'gas',
|
|
361
366
|
);
|
|
362
367
|
|
|
363
|
-
const whitelistTx = await
|
|
368
|
+
const whitelistTx = await ts.simulate(
|
|
364
369
|
whiteListAdapterParams(adapterAddress, network),
|
|
365
370
|
);
|
|
366
371
|
expect(whitelistTx.success).toEqual(true);
|
|
367
372
|
}
|
|
368
373
|
|
|
369
374
|
if (useTenderly && thirdPartyAddress) {
|
|
375
|
+
assert(
|
|
376
|
+
destToken instanceof SmartToken,
|
|
377
|
+
'`destToken` is not an instance of SmartToken',
|
|
378
|
+
);
|
|
379
|
+
assert(
|
|
380
|
+
ts instanceof TenderlySimulation,
|
|
381
|
+
'`ts` is not an instance of TenderlySimulation',
|
|
382
|
+
);
|
|
383
|
+
|
|
370
384
|
const stateOverrides: StateOverrides = {
|
|
371
385
|
networkID: `${network}`,
|
|
372
386
|
stateOverrides: {},
|
|
@@ -383,7 +397,7 @@ export async function newTestE2E({
|
|
|
383
397
|
: (BigInt(MAX_UINT) / 4n).toString(),
|
|
384
398
|
);
|
|
385
399
|
|
|
386
|
-
await
|
|
400
|
+
await ts.simulate(giftTx, stateOverrides);
|
|
387
401
|
}
|
|
388
402
|
|
|
389
403
|
const useAPI = testingEndpoint && !poolIdentifiers;
|
|
@@ -402,8 +416,8 @@ export async function newTestE2E({
|
|
|
402
416
|
}
|
|
403
417
|
try {
|
|
404
418
|
const priceRoute = await paraswap.getPrices(
|
|
405
|
-
srcToken.token,
|
|
406
|
-
destToken.token,
|
|
419
|
+
skipTenderly ? (srcToken as Token) : (srcToken as SmartToken).token,
|
|
420
|
+
skipTenderly ? (destToken as Token) : (destToken as SmartToken).token,
|
|
407
421
|
amount,
|
|
408
422
|
swapSide,
|
|
409
423
|
contractMethod,
|
|
@@ -428,6 +442,19 @@ export async function newTestE2E({
|
|
|
428
442
|
);
|
|
429
443
|
|
|
430
444
|
if (useTenderly) {
|
|
445
|
+
assert(
|
|
446
|
+
srcToken instanceof SmartToken,
|
|
447
|
+
'`srcToken` is not an instance of SmartToken',
|
|
448
|
+
);
|
|
449
|
+
assert(
|
|
450
|
+
destToken instanceof SmartToken,
|
|
451
|
+
'`destToken` is not an instance of SmartToken',
|
|
452
|
+
);
|
|
453
|
+
assert(
|
|
454
|
+
ts instanceof TenderlySimulation,
|
|
455
|
+
'`ts` is not an instance of TenderlySimulation',
|
|
456
|
+
);
|
|
457
|
+
|
|
431
458
|
const stateOverrides: StateOverrides = {
|
|
432
459
|
networkID: `${network}`,
|
|
433
460
|
stateOverrides: {},
|
|
@@ -456,10 +483,7 @@ export async function newTestE2E({
|
|
|
456
483
|
srcToken.applyOverrides(stateOverrides);
|
|
457
484
|
destToken.applyOverrides(stateOverrides);
|
|
458
485
|
|
|
459
|
-
const swapTx = await
|
|
460
|
-
swapParams,
|
|
461
|
-
stateOverrides,
|
|
462
|
-
);
|
|
486
|
+
const swapTx = await ts.simulate(swapParams, stateOverrides);
|
|
463
487
|
console.log(`${srcToken.address}_${destToken.address}_${dexKey!}`);
|
|
464
488
|
// Only log gas estimate if testing against API
|
|
465
489
|
if (useAPI)
|
package/.idea/aws.xml
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="accountSettings">
|
|
4
|
-
<option name="activeProfile" value="profile:default" />
|
|
5
|
-
<option name="activeRegion" value="us-east-1" />
|
|
6
|
-
<option name="recentlyUsedProfiles">
|
|
7
|
-
<list>
|
|
8
|
-
<option value="profile:default" />
|
|
9
|
-
</list>
|
|
10
|
-
</option>
|
|
11
|
-
<option name="recentlyUsedRegions">
|
|
12
|
-
<list>
|
|
13
|
-
<option value="us-east-1" />
|
|
14
|
-
</list>
|
|
15
|
-
</option>
|
|
16
|
-
</component>
|
|
17
|
-
</project>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<component name="ProjectCodeStyleConfiguration">
|
|
2
|
-
<code_scheme name="Project" version="173">
|
|
3
|
-
<ScalaCodeStyleSettings>
|
|
4
|
-
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
|
5
|
-
</ScalaCodeStyleSettings>
|
|
6
|
-
<TypeScriptCodeStyleSettings version="0">
|
|
7
|
-
<option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACKETS" value="true" />
|
|
8
|
-
<option name="USE_DOUBLE_QUOTES" value="false" />
|
|
9
|
-
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
|
10
|
-
</TypeScriptCodeStyleSettings>
|
|
11
|
-
<codeStyleSettings language="TypeScript">
|
|
12
|
-
<indentOptions>
|
|
13
|
-
<option name="INDENT_SIZE" value="2" />
|
|
14
|
-
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
|
15
|
-
<option name="TAB_SIZE" value="2" />
|
|
16
|
-
</indentOptions>
|
|
17
|
-
</codeStyleSettings>
|
|
18
|
-
</code_scheme>
|
|
19
|
-
</component>
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="JAVA_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
4
|
-
<exclude-output />
|
|
5
|
-
<content url="file://$MODULE_DIR$" />
|
|
6
|
-
<orderEntry type="inheritedJdk" />
|
|
7
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
8
|
-
</component>
|
|
9
|
-
</module>
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="RunConfigurationProducerService">
|
|
4
|
-
<option name="ignoredProducers">
|
|
5
|
-
<set>
|
|
6
|
-
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
|
7
|
-
</set>
|
|
8
|
-
</option>
|
|
9
|
-
</component>
|
|
10
|
-
</project>
|