@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.
Files changed (44) hide show
  1. package/build/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  2. package/build/config.js +2 -2
  3. package/build/dex/balancer-v2/config.js +9 -1
  4. package/build/dex/balancer-v2/config.js.map +1 -1
  5. package/build/dex/index.js +2 -0
  6. package/build/dex/index.js.map +1 -1
  7. package/build/dex/maverick-v1/config.js +9 -0
  8. package/build/dex/maverick-v1/config.js.map +1 -1
  9. package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
  10. package/build/dex/pancakeswap-v3/config.js +17 -0
  11. package/build/dex/pancakeswap-v3/config.js.map +1 -1
  12. package/build/dex/solidly/config.js +13 -0
  13. package/build/dex/solidly/config.js.map +1 -1
  14. package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
  15. package/build/dex/solidly/forks-override/aerodrome.js +48 -0
  16. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
  17. package/build/dex/solidly/solidly.js +1 -0
  18. package/build/dex/solidly/solidly.js.map +1 -1
  19. package/build/dex/uniswap-v3/config.js +12 -0
  20. package/build/dex/uniswap-v3/config.js.map +1 -1
  21. package/build/dex/woo-fi-v2/config.js +13 -0
  22. package/build/dex/woo-fi-v2/config.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  25. package/src/config.ts +2 -2
  26. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +122 -1
  27. package/src/dex/balancer-v2/config.ts +10 -1
  28. package/src/dex/index.ts +2 -0
  29. package/src/dex/maverick-v1/config.ts +10 -0
  30. package/src/dex/maverick-v1/maverick-v1-e2e.test.ts +121 -1
  31. package/src/dex/maverick-v1/maverick-v1.ts +1 -0
  32. package/src/dex/pancakeswap-v3/config.ts +19 -0
  33. package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +120 -0
  34. package/src/dex/solidly/config.ts +14 -0
  35. package/src/dex/solidly/forks-override/aerodrome.ts +57 -0
  36. package/src/dex/solidly/solidly-e2e.test.ts +24 -0
  37. package/src/dex/solidly/solidly.ts +1 -0
  38. package/src/dex/uniswap-v3/config.ts +13 -0
  39. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +25 -4
  40. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +142 -0
  41. package/src/dex/woo-fi-v2/config.ts +13 -0
  42. package/src/dex/woo-fi-v2/woo-fi-v2-e2e.test.ts +64 -0
  43. package/tests/constants-e2e.ts +30 -0
  44. package/tests/utils-e2e.ts +1 -0
@@ -424,16 +424,16 @@ describe('UniswapV3 E2E', () => {
424
424
  [
425
425
  SwapSide.SELL,
426
426
  [
427
- // ContractMethod.simpleSwap,
427
+ ContractMethod.simpleSwap,
428
428
  ContractMethod.multiSwap,
429
- // ContractMethod.megaSwap,
429
+ ContractMethod.megaSwap,
430
430
  ],
431
431
  ],
432
432
  [
433
433
  SwapSide.BUY,
434
434
  [
435
- // ContractMethod.simpleBuy,
436
- // ContractMethod.buy
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
  });
@@ -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
 
@@ -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 {