@paraswap/dex-lib 2.35.7-worker-pool.3 → 2.36.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 (74) hide show
  1. package/build/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  2. package/build/abi/api3-proxy.json +7 -0
  3. package/build/config.js +2 -2
  4. package/build/dex/algebra/algebra.js +5 -4
  5. package/build/dex/algebra/algebra.js.map +1 -1
  6. package/build/dex/balancer-v2/config.js +10 -2
  7. package/build/dex/balancer-v2/config.js.map +1 -1
  8. package/build/dex/index.js +2 -0
  9. package/build/dex/index.js.map +1 -1
  10. package/build/dex/maverick-v1/config.js +9 -0
  11. package/build/dex/maverick-v1/config.js.map +1 -1
  12. package/build/dex/maverick-v1/maverick-v1.js +11 -2
  13. package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
  14. package/build/dex/pancakeswap-v3/config.js +17 -0
  15. package/build/dex/pancakeswap-v3/config.js.map +1 -1
  16. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +7 -6
  17. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  18. package/build/dex/quick-perps/pool.js +21 -6
  19. package/build/dex/quick-perps/pool.js.map +1 -1
  20. package/build/dex/quick-perps/quick-perps.js +34 -28
  21. package/build/dex/quick-perps/quick-perps.js.map +1 -1
  22. package/build/dex/solidly/config.js +22 -1
  23. package/build/dex/solidly/config.js.map +1 -1
  24. package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
  25. package/build/dex/solidly/forks-override/aerodrome.js +48 -0
  26. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
  27. package/build/dex/solidly/solidly.js +1 -0
  28. package/build/dex/solidly/solidly.js.map +1 -1
  29. package/build/dex/uniswap-v3/config.js +12 -0
  30. package/build/dex/uniswap-v3/config.js.map +1 -1
  31. package/build/dex/uniswap-v3/uniswap-v3.js +5 -4
  32. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  33. package/build/dex/woo-fi-v2/config.js +13 -0
  34. package/build/dex/woo-fi-v2/config.js.map +1 -1
  35. package/build/dex-helper/dummy-dex-helper.d.ts +0 -1
  36. package/build/dex-helper/dummy-dex-helper.js +0 -3
  37. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  38. package/build/dex-helper/idex-helper.d.ts +0 -1
  39. package/build/lib/api3-feed.d.ts +4 -0
  40. package/build/lib/api3-feed.js +18 -0
  41. package/build/lib/api3-feed.js.map +1 -1
  42. package/package.json +1 -1
  43. package/src/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  44. package/src/abi/api3-proxy.json +7 -0
  45. package/src/config.ts +2 -2
  46. package/src/dex/algebra/algebra.ts +10 -10
  47. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +120 -1
  48. package/src/dex/balancer-v2/config.ts +11 -2
  49. package/src/dex/index.ts +2 -0
  50. package/src/dex/maverick-v1/config.ts +10 -0
  51. package/src/dex/maverick-v1/maverick-v1-e2e.test.ts +115 -1
  52. package/src/dex/maverick-v1/maverick-v1.ts +12 -2
  53. package/src/dex/pancakeswap-v3/config.ts +19 -0
  54. package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +114 -0
  55. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +12 -12
  56. package/src/dex/quick-perps/pool.ts +42 -7
  57. package/src/dex/quick-perps/quick-perps-events.test.ts +0 -1
  58. package/src/dex/quick-perps/quick-perps.ts +45 -35
  59. package/src/dex/solidly/config.ts +24 -1
  60. package/src/dex/solidly/forks-override/aerodrome.ts +53 -0
  61. package/src/dex/solidly/solidly-e2e.test.ts +88 -0
  62. package/src/dex/solidly/solidly-integration.test.ts +66 -0
  63. package/src/dex/solidly/solidly.ts +1 -0
  64. package/src/dex/uniswap-v3/config.ts +12 -0
  65. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +24 -9
  66. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +140 -0
  67. package/src/dex/uniswap-v3/uniswap-v3.ts +10 -10
  68. package/src/dex/woo-fi-v2/config.ts +13 -0
  69. package/src/dex/woo-fi-v2/woo-fi-v2-e2e.test.ts +64 -0
  70. package/src/dex-helper/dummy-dex-helper.ts +0 -15
  71. package/src/dex-helper/idex-helper.ts +0 -7
  72. package/src/lib/api3-feed.ts +35 -0
  73. package/tests/constants-e2e.ts +30 -0
  74. package/tests/utils-e2e.ts +1 -0
@@ -641,14 +641,14 @@ export class UniswapV3
641
641
  const balanceDestToken =
642
642
  _destAddress === pool.token0 ? state.balance0 : state.balance1;
643
643
 
644
- const unitResult = await this._getOutputs(
644
+ const unitResult = this._getOutputs(
645
645
  state,
646
646
  [unitAmount],
647
647
  zeroForOne,
648
648
  side,
649
649
  balanceDestToken,
650
650
  );
651
- const pricesResult = await this._getOutputs(
651
+ const pricesResult = this._getOutputs(
652
652
  state,
653
653
  _amounts,
654
654
  zeroForOne,
@@ -1071,20 +1071,20 @@ export class UniswapV3
1071
1071
  return newConfig;
1072
1072
  }
1073
1073
 
1074
- private async _getOutputs(
1074
+ private _getOutputs(
1075
1075
  state: DeepReadonly<PoolState>,
1076
1076
  amounts: bigint[],
1077
1077
  zeroForOne: boolean,
1078
1078
  side: SwapSide,
1079
1079
  destTokenBalance: bigint,
1080
- ): Promise<OutputResult | null> {
1080
+ ): OutputResult | null {
1081
1081
  try {
1082
- const outputsResult = (await this.dexHelper.executeOnWorkerPool(
1083
- this.network,
1084
- this.dexKey,
1085
- 'queryOutputs',
1086
- [state, amounts, zeroForOne, side],
1087
- )) as ReturnType<typeof uniswapV3Math.queryOutputs>;
1082
+ const outputsResult = uniswapV3Math.queryOutputs(
1083
+ state,
1084
+ amounts,
1085
+ zeroForOne,
1086
+ side,
1087
+ );
1088
1088
 
1089
1089
  if (side === SwapSide.SELL) {
1090
1090
  if (outputsResult.outputs[0] > destTokenBalance) {
@@ -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
  });
@@ -246,12 +246,6 @@ export class DummyDexHelper implements IDexHelper {
246
246
  getLogger: LoggerConstructor;
247
247
  web3Provider: Web3;
248
248
  getTokenUSDPrice: (token: Token, amount: bigint) => Promise<number>;
249
- executeOnWorkerPool: (
250
- network: number,
251
- dexKeys: string,
252
- methodSelector: string,
253
- payload: unknown[],
254
- ) => Promise<unknown>;
255
249
 
256
250
  constructor(network: number, rpcUrl?: string) {
257
251
  this.config = new ConfigHelper(false, generateConfig(network), 'is');
@@ -287,15 +281,6 @@ export class DummyDexHelper implements IDexHelper {
287
281
  5,
288
282
  this.getLogger(`PromiseScheduler-${network}`),
289
283
  );
290
-
291
- this.executeOnWorkerPool = async (
292
- network: number,
293
- dexKey: string,
294
- methodSelector: string,
295
- payload: unknown[],
296
- ) => {
297
- return null;
298
- };
299
284
  }
300
285
 
301
286
  replaceProviderWithRPC(rpcUrl: string) {
@@ -21,12 +21,5 @@ export interface IDexHelper {
21
21
  web3Provider: Web3;
22
22
  blockManager: IBlockManager;
23
23
  getLogger: LoggerConstructor;
24
- executeOnWorkerPool: (
25
- network: number,
26
- dexKey: string,
27
- methodSelector: string,
28
- payload: unknown[],
29
- // For POC it is ok to have this unknown
30
- ) => Promise<unknown>;
31
24
  getTokenUSDPrice: (token: Token, amount: bigint) => Promise<number>;
32
25
  }
@@ -51,6 +51,14 @@ export class Api3FeedSubscriber<State> extends PartialEventSubscriber<
51
51
  };
52
52
  }
53
53
 
54
+ static getDapiNameHashMultiCallInput(proxy: Address): MultiCallInput {
55
+ return {
56
+ target: proxy,
57
+ callData:
58
+ Api3FeedSubscriber.proxyInterface.encodeFunctionData('dapiNameHash'),
59
+ };
60
+ }
61
+
54
62
  static getDataFeedId(proxy: Address): MultiCallInput {
55
63
  return {
56
64
  target: proxy,
@@ -59,6 +67,33 @@ export class Api3FeedSubscriber<State> extends PartialEventSubscriber<
59
67
  };
60
68
  }
61
69
 
70
+ static getFeedIdFromDapiNameHash(
71
+ api3Server: Address,
72
+ dapiNameHash: string,
73
+ ): MultiCallInput {
74
+ return {
75
+ target: api3Server,
76
+ callData: Api3FeedSubscriber.api3ServerV1Iface.encodeFunctionData(
77
+ 'dapiNameHashToDataFeedId',
78
+ [dapiNameHash],
79
+ ),
80
+ };
81
+ }
82
+
83
+ static decodeFeedIdFromDapiNameHash(multicallOutput: MultiCallOutput) {
84
+ return Api3FeedSubscriber.api3ServerV1Iface.decodeFunctionResult(
85
+ 'dapiNameHashToDataFeedId',
86
+ multicallOutput,
87
+ )[0];
88
+ }
89
+
90
+ static decodeDapiNameHash(multicallOutput: MultiCallOutput) {
91
+ return Api3FeedSubscriber.proxyInterface.decodeFunctionResult(
92
+ 'dapiNameHash',
93
+ multicallOutput,
94
+ )[0];
95
+ }
96
+
62
97
  static decodeDataFeedId(multicallOutput: MultiCallOutput) {
63
98
  return Api3FeedSubscriber.proxyInterface.decodeFunctionResult(
64
99
  'dataFeedId',
@@ -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 {