@paraswap/dex-lib 2.35.6 → 2.35.7-multiple-dex-base-chain.1
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/build/abi/aerodrome/aerodrome-pool-factory.json +586 -0
- package/build/config.js +2 -2
- package/build/dex/balancer-v2/config.js +9 -1
- package/build/dex/balancer-v2/config.js.map +1 -1
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/maverick-v1/config.js +9 -0
- package/build/dex/maverick-v1/config.js.map +1 -1
- package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
- package/build/dex/pancakeswap-v3/config.js +17 -0
- package/build/dex/pancakeswap-v3/config.js.map +1 -1
- package/build/dex/solidly/config.js +13 -0
- package/build/dex/solidly/config.js.map +1 -1
- package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
- package/build/dex/solidly/forks-override/aerodrome.js +48 -0
- package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
- package/build/dex/solidly/solidly.js +1 -0
- package/build/dex/solidly/solidly.js.map +1 -1
- package/build/dex/uniswap-v3/config.js +12 -0
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/woo-fi-v2/config.js +13 -0
- package/build/dex/woo-fi-v2/config.js.map +1 -1
- package/package.json +1 -1
- package/src/abi/aerodrome/aerodrome-pool-factory.json +586 -0
- package/src/config.ts +2 -2
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +122 -1
- package/src/dex/balancer-v2/config.ts +10 -1
- package/src/dex/index.ts +2 -0
- package/src/dex/maverick-v1/config.ts +10 -0
- package/src/dex/maverick-v1/maverick-v1-e2e.test.ts +121 -1
- package/src/dex/maverick-v1/maverick-v1.ts +1 -0
- package/src/dex/pancakeswap-v3/config.ts +19 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +120 -0
- package/src/dex/solidly/config.ts +14 -0
- package/src/dex/solidly/forks-override/aerodrome.ts +57 -0
- package/src/dex/solidly/solidly-e2e.test.ts +24 -0
- package/src/dex/solidly/solidly.ts +1 -0
- package/src/dex/uniswap-v3/config.ts +13 -0
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +25 -4
- package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +142 -0
- package/src/dex/woo-fi-v2/config.ts +13 -0
- package/src/dex/woo-fi-v2/woo-fi-v2-e2e.test.ts +64 -0
- package/tests/constants-e2e.ts +30 -0
- package/tests/utils-e2e.ts +1 -0
|
@@ -424,16 +424,16 @@ describe('UniswapV3 E2E', () => {
|
|
|
424
424
|
[
|
|
425
425
|
SwapSide.SELL,
|
|
426
426
|
[
|
|
427
|
-
|
|
427
|
+
ContractMethod.simpleSwap,
|
|
428
428
|
ContractMethod.multiSwap,
|
|
429
|
-
|
|
429
|
+
ContractMethod.megaSwap,
|
|
430
430
|
],
|
|
431
431
|
],
|
|
432
432
|
[
|
|
433
433
|
SwapSide.BUY,
|
|
434
434
|
[
|
|
435
|
-
|
|
436
|
-
|
|
435
|
+
ContractMethod.simpleBuy,
|
|
436
|
+
ContractMethod.buy
|
|
437
437
|
],
|
|
438
438
|
],
|
|
439
439
|
]);
|
|
@@ -1094,5 +1094,26 @@ describe('UniswapV3 E2E', () => {
|
|
|
1094
1094
|
nativeTokenAmount,
|
|
1095
1095
|
);
|
|
1096
1096
|
});
|
|
1097
|
+
|
|
1098
|
+
describe('BASE', () => {
|
|
1099
|
+
const network = Network.BASE;
|
|
1100
|
+
|
|
1101
|
+
const tokenASymbol: string = 'USDbC';
|
|
1102
|
+
const tokenBSymbol: string = 'DAI';
|
|
1103
|
+
|
|
1104
|
+
const tokenAAmount: string = '111110000';
|
|
1105
|
+
const tokenBAmount: string = '110000000000000000';
|
|
1106
|
+
const nativeTokenAmount = '1100000000000000000';
|
|
1107
|
+
|
|
1108
|
+
testForNetwork(
|
|
1109
|
+
network,
|
|
1110
|
+
dexKey,
|
|
1111
|
+
tokenASymbol,
|
|
1112
|
+
tokenBSymbol,
|
|
1113
|
+
tokenAAmount,
|
|
1114
|
+
tokenBAmount,
|
|
1115
|
+
nativeTokenAmount,
|
|
1116
|
+
);
|
|
1117
|
+
});
|
|
1097
1118
|
});
|
|
1098
1119
|
});
|
|
@@ -959,4 +959,146 @@ describe('SushiSwapV3', () => {
|
|
|
959
959
|
expect(falseChecksCounter).toBeLessThan(poolPrices!.length);
|
|
960
960
|
});
|
|
961
961
|
});
|
|
962
|
+
|
|
963
|
+
describe('Base', () => {
|
|
964
|
+
let blockNumber: number;
|
|
965
|
+
let sushiSwapV3: UniswapV3;
|
|
966
|
+
let sushiSwapV3Mainnet: UniswapV3;
|
|
967
|
+
|
|
968
|
+
const network = Network.BASE;
|
|
969
|
+
const dexHelper = new DummyDexHelper(network);
|
|
970
|
+
const TokenASymbol = 'USDbC';
|
|
971
|
+
const TokenA = Tokens[network][TokenASymbol];
|
|
972
|
+
|
|
973
|
+
const TokenBSymbol = 'DAI';
|
|
974
|
+
const TokenB = Tokens[network][TokenBSymbol];
|
|
975
|
+
|
|
976
|
+
beforeEach(async () => {
|
|
977
|
+
blockNumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
978
|
+
sushiSwapV3 = new UniswapV3(network, dexKey, dexHelper);
|
|
979
|
+
sushiSwapV3Mainnet = new UniswapV3(Network.MAINNET, dexKey, dexHelper);
|
|
980
|
+
});
|
|
981
|
+
|
|
982
|
+
it('getPoolIdentifiers and getPricesVolume SELL', async function () {
|
|
983
|
+
const amounts = [0n, BI_POWS[6], 2000000n];
|
|
984
|
+
|
|
985
|
+
const pools = await sushiSwapV3.getPoolIdentifiers(
|
|
986
|
+
TokenA,
|
|
987
|
+
TokenB,
|
|
988
|
+
SwapSide.SELL,
|
|
989
|
+
blockNumber,
|
|
990
|
+
);
|
|
991
|
+
console.log(
|
|
992
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
993
|
+
pools,
|
|
994
|
+
);
|
|
995
|
+
|
|
996
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
997
|
+
|
|
998
|
+
const poolPrices = await sushiSwapV3.getPricesVolume(
|
|
999
|
+
TokenA,
|
|
1000
|
+
TokenB,
|
|
1001
|
+
amounts,
|
|
1002
|
+
SwapSide.SELL,
|
|
1003
|
+
blockNumber,
|
|
1004
|
+
pools,
|
|
1005
|
+
);
|
|
1006
|
+
console.log(
|
|
1007
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
1008
|
+
poolPrices,
|
|
1009
|
+
);
|
|
1010
|
+
|
|
1011
|
+
expect(poolPrices).not.toBeNull();
|
|
1012
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
1013
|
+
|
|
1014
|
+
let falseChecksCounter = 0;
|
|
1015
|
+
await Promise.all(
|
|
1016
|
+
poolPrices!.map(async price => {
|
|
1017
|
+
const fee = sushiSwapV3.eventPools[price.poolIdentifier!]!.feeCode;
|
|
1018
|
+
const res = await checkOnChainPricing(
|
|
1019
|
+
dexHelper,
|
|
1020
|
+
sushiSwapV3,
|
|
1021
|
+
'quoteExactInputSingle',
|
|
1022
|
+
blockNumber,
|
|
1023
|
+
'0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
|
|
1024
|
+
price.prices,
|
|
1025
|
+
TokenA.address,
|
|
1026
|
+
TokenB.address,
|
|
1027
|
+
fee,
|
|
1028
|
+
amounts,
|
|
1029
|
+
);
|
|
1030
|
+
if (res === false) falseChecksCounter++;
|
|
1031
|
+
}),
|
|
1032
|
+
);
|
|
1033
|
+
|
|
1034
|
+
expect(falseChecksCounter).toBeLessThan(poolPrices!.length);
|
|
1035
|
+
});
|
|
1036
|
+
|
|
1037
|
+
it('getPoolIdentifiers and getPricesVolume BUY', async function () {
|
|
1038
|
+
const amounts = [0n, BI_POWS[6], 2000000n];
|
|
1039
|
+
|
|
1040
|
+
const pools = await sushiSwapV3.getPoolIdentifiers(
|
|
1041
|
+
TokenA,
|
|
1042
|
+
TokenB,
|
|
1043
|
+
SwapSide.BUY,
|
|
1044
|
+
blockNumber,
|
|
1045
|
+
);
|
|
1046
|
+
console.log(
|
|
1047
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
1048
|
+
pools,
|
|
1049
|
+
);
|
|
1050
|
+
|
|
1051
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
1052
|
+
|
|
1053
|
+
const poolPrices = await sushiSwapV3.getPricesVolume(
|
|
1054
|
+
TokenA,
|
|
1055
|
+
TokenB,
|
|
1056
|
+
amounts,
|
|
1057
|
+
SwapSide.BUY,
|
|
1058
|
+
blockNumber,
|
|
1059
|
+
pools,
|
|
1060
|
+
);
|
|
1061
|
+
console.log(
|
|
1062
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
1063
|
+
poolPrices,
|
|
1064
|
+
);
|
|
1065
|
+
|
|
1066
|
+
expect(poolPrices).not.toBeNull();
|
|
1067
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
1068
|
+
|
|
1069
|
+
let falseChecksCounter = 0;
|
|
1070
|
+
await Promise.all(
|
|
1071
|
+
poolPrices!.map(async price => {
|
|
1072
|
+
const fee = sushiSwapV3.eventPools[price.poolIdentifier!]!.feeCode;
|
|
1073
|
+
const res = await checkOnChainPricing(
|
|
1074
|
+
dexHelper,
|
|
1075
|
+
sushiSwapV3,
|
|
1076
|
+
'quoteExactOutputSingle',
|
|
1077
|
+
blockNumber,
|
|
1078
|
+
'0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
|
|
1079
|
+
price.prices,
|
|
1080
|
+
TokenA.address,
|
|
1081
|
+
TokenB.address,
|
|
1082
|
+
fee,
|
|
1083
|
+
amounts,
|
|
1084
|
+
);
|
|
1085
|
+
if (res === false) falseChecksCounter++;
|
|
1086
|
+
}),
|
|
1087
|
+
);
|
|
1088
|
+
|
|
1089
|
+
expect(falseChecksCounter).toBeLessThan(poolPrices!.length);
|
|
1090
|
+
});
|
|
1091
|
+
|
|
1092
|
+
it('getTopPoolsForToken', async function () {
|
|
1093
|
+
const poolLiquidity = await sushiSwapV3.getTopPoolsForToken(
|
|
1094
|
+
TokenB.address,
|
|
1095
|
+
10,
|
|
1096
|
+
);
|
|
1097
|
+
console.log(`${TokenASymbol} Top Pools:`, poolLiquidity);
|
|
1098
|
+
|
|
1099
|
+
checkPoolsLiquidity(poolLiquidity, TokenB.address, dexKey);
|
|
1100
|
+
});
|
|
1101
|
+
});
|
|
1102
|
+
|
|
962
1103
|
});
|
|
1104
|
+
|
|
@@ -64,6 +64,16 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
64
64
|
decimals: 6,
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
|
+
[Network.BASE]: {
|
|
68
|
+
wooPPV2Address: '0xb130a49065178465931d4f887056328CeA5D723f',
|
|
69
|
+
wooOracleV2Address: '0x2Fe5E5D341cFFa606a5d9DA1B6B646a381B0f7ec',
|
|
70
|
+
integrationHelperAddress: '0xC4E9B633685461E7B7A807D12a246C81f96F31B8',
|
|
71
|
+
// USDbC
|
|
72
|
+
quoteToken: {
|
|
73
|
+
address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA',
|
|
74
|
+
decimals: 6,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
67
77
|
},
|
|
68
78
|
};
|
|
69
79
|
|
|
@@ -84,4 +94,7 @@ export const Adapters: Record<number, AdapterMappings> = {
|
|
|
84
94
|
[Network.AVALANCHE]: {
|
|
85
95
|
[SwapSide.SELL]: [{ name: 'AvalancheAdapter01', index: 12 }],
|
|
86
96
|
},
|
|
97
|
+
[Network.BASE]: {
|
|
98
|
+
[SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 5 }],
|
|
99
|
+
},
|
|
87
100
|
};
|
|
@@ -213,4 +213,68 @@ describe('WooFiV2 E2E', () => {
|
|
|
213
213
|
tokenQuoteAmount,
|
|
214
214
|
);
|
|
215
215
|
});
|
|
216
|
+
|
|
217
|
+
describe('Base', () => {
|
|
218
|
+
const network = Network.BASE;
|
|
219
|
+
|
|
220
|
+
const baseATokenSymbol = 'USDbC';
|
|
221
|
+
const baseBTokenSymbol = 'ETH';
|
|
222
|
+
|
|
223
|
+
const tokenBaseAAmount = '100000000';
|
|
224
|
+
const tokenBaseBAmount = '1000000000000000000';
|
|
225
|
+
|
|
226
|
+
const tokens = Tokens[network];
|
|
227
|
+
const holders = Holders[network];
|
|
228
|
+
|
|
229
|
+
const provider = new StaticJsonRpcProvider(
|
|
230
|
+
generateConfig(network).privateHttpProvider,
|
|
231
|
+
network,
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
const sideToContractMethods = new Map([
|
|
235
|
+
[
|
|
236
|
+
SwapSide.SELL,
|
|
237
|
+
[
|
|
238
|
+
ContractMethod.simpleSwap,
|
|
239
|
+
ContractMethod.multiSwap,
|
|
240
|
+
ContractMethod.megaSwap,
|
|
241
|
+
],
|
|
242
|
+
],
|
|
243
|
+
]);
|
|
244
|
+
|
|
245
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
246
|
+
describe(`${side}`, () => {
|
|
247
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
248
|
+
describe(`${contractMethod}`, () => {
|
|
249
|
+
it(`${baseATokenSymbol} -> ${baseBTokenSymbol}`, async () => {
|
|
250
|
+
await testE2E(
|
|
251
|
+
tokens[baseATokenSymbol],
|
|
252
|
+
tokens[baseBTokenSymbol],
|
|
253
|
+
holders[baseATokenSymbol],
|
|
254
|
+
tokenBaseAAmount,
|
|
255
|
+
side,
|
|
256
|
+
dexKey,
|
|
257
|
+
contractMethod,
|
|
258
|
+
network,
|
|
259
|
+
provider,
|
|
260
|
+
);
|
|
261
|
+
});
|
|
262
|
+
it(`${baseBTokenSymbol} -> ${baseATokenSymbol}`, async () => {
|
|
263
|
+
await testE2E(
|
|
264
|
+
tokens[baseBTokenSymbol],
|
|
265
|
+
tokens[baseATokenSymbol],
|
|
266
|
+
holders[baseBTokenSymbol],
|
|
267
|
+
tokenBaseBAmount,
|
|
268
|
+
side,
|
|
269
|
+
dexKey,
|
|
270
|
+
contractMethod,
|
|
271
|
+
network,
|
|
272
|
+
provider,
|
|
273
|
+
);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
}),
|
|
278
|
+
);
|
|
279
|
+
});
|
|
216
280
|
});
|
package/tests/constants-e2e.ts
CHANGED
|
@@ -892,6 +892,30 @@ export const Tokens: {
|
|
|
892
892
|
address: '0x4200000000000000000000000000000000000006',
|
|
893
893
|
decimals: 18,
|
|
894
894
|
},
|
|
895
|
+
MAV: {
|
|
896
|
+
address: '0x64b88c73A5DfA78D1713fE1b4c69a22d7E0faAa7',
|
|
897
|
+
decimals: 18,
|
|
898
|
+
},
|
|
899
|
+
USDC: {
|
|
900
|
+
address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
|
|
901
|
+
decimals: 6,
|
|
902
|
+
},
|
|
903
|
+
USDbC: {
|
|
904
|
+
address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA',
|
|
905
|
+
decimals: 6,
|
|
906
|
+
},
|
|
907
|
+
DAI: {
|
|
908
|
+
address: '0x50c5725949a6f0c72e6c4a641f24049a917db0cb',
|
|
909
|
+
decimals: 18,
|
|
910
|
+
},
|
|
911
|
+
BAL: {
|
|
912
|
+
address: '0x4158734d47fc9692176b5085e0f52ee0da5d47f1',
|
|
913
|
+
decimals: 18,
|
|
914
|
+
},
|
|
915
|
+
GOLD: {
|
|
916
|
+
address: '0xbeFD5C25A59ef2C1316c5A4944931171F30Cd3E4',
|
|
917
|
+
decimals: 18,
|
|
918
|
+
},
|
|
895
919
|
ETH: { address: ETHER_ADDRESS, decimals: 18 },
|
|
896
920
|
},
|
|
897
921
|
};
|
|
@@ -1117,6 +1141,12 @@ export const Holders: {
|
|
|
1117
1141
|
WETH: '0x4bb6b2efe7036020ba6f02a05602546c9f25bf28',
|
|
1118
1142
|
PRIME: '0x956bcc6b56c99db382d9d97a30ba5f1402144b3e',
|
|
1119
1143
|
ETH: '0xdd9176ea3e7559d6b68b537ef555d3e89403f742',
|
|
1144
|
+
MAV: '0x7499785aa5d1bdf0a0ac862c1ef3698d3cba6568',
|
|
1145
|
+
USDC: '0xaac391f166f33cdaefaa4afa6616a3bea66b694d',
|
|
1146
|
+
USDbC: '0xc9d05a1c3c8e01dcb701d6185cdc21a5bb94becb',
|
|
1147
|
+
DAI: '0x20f03e26968b179025f65c1f4afadfd3959c8d03',
|
|
1148
|
+
BAL: '0x854b004700885a61107b458f11ecc169a019b764',
|
|
1149
|
+
GOLD: '0x1374c25b3710758c326ee0c70ec48b595d5ccf8c',
|
|
1120
1150
|
},
|
|
1121
1151
|
};
|
|
1122
1152
|
|
package/tests/utils-e2e.ts
CHANGED
|
@@ -86,6 +86,7 @@ const MULTISIG: { [nid: number]: string } = {
|
|
|
86
86
|
[Network.AVALANCHE]: '0x1e2ECA5e812D08D2A7F8664D69035163ff5BfEC2',
|
|
87
87
|
[Network.OPTIMISM]: '0xf01121e808F782d7F34E857c27dA31AD1f151b39',
|
|
88
88
|
[Network.ARBITRUM]: '0x90DfD8a6454CFE19be39EaB42ac93CD850c7f339',
|
|
89
|
+
[Network.BASE]: '0x6C674c8Df1aC663b822c4B6A56B4E5e889379AE0',
|
|
89
90
|
};
|
|
90
91
|
|
|
91
92
|
class APIParaswapSDK implements IParaSwapSDK {
|