@paraswap/dex-lib 2.42.3 → 2.42.4-baseswap

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 (99) hide show
  1. package/build/dex/balancer-v1/balancer-v1.js +21 -10
  2. package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
  3. package/build/dex/balancer-v1/config.d.ts +2 -1
  4. package/build/dex/balancer-v1/config.js +3 -2
  5. package/build/dex/balancer-v1/config.js.map +1 -1
  6. package/build/dex/baseswap-v3/baseswap-v3-factory.d.ts +26 -0
  7. package/build/dex/baseswap-v3/baseswap-v3-factory.js +44 -0
  8. package/build/dex/baseswap-v3/baseswap-v3-factory.js.map +1 -0
  9. package/build/dex/baseswap-v3/baseswap-v3-pool.d.ts +46 -0
  10. package/build/dex/baseswap-v3/baseswap-v3-pool.js +312 -0
  11. package/build/dex/baseswap-v3/baseswap-v3-pool.js.map +1 -0
  12. package/build/dex/baseswap-v3/baseswap-v3.d.ts +71 -0
  13. package/build/dex/baseswap-v3/baseswap-v3.js +752 -0
  14. package/build/dex/baseswap-v3/baseswap-v3.js.map +1 -0
  15. package/build/dex/baseswap-v3/config.d.ts +9 -0
  16. package/build/dex/baseswap-v3/config.js +48 -0
  17. package/build/dex/baseswap-v3/config.js.map +1 -0
  18. package/build/dex/baseswap-v3/constants.d.ts +28 -0
  19. package/build/dex/baseswap-v3/constants.js +35 -0
  20. package/build/dex/baseswap-v3/constants.js.map +1 -0
  21. package/build/dex/baseswap-v3/contract-math/BitMath.d.ts +4 -0
  22. package/build/dex/baseswap-v3/contract-math/BitMath.js +93 -0
  23. package/build/dex/baseswap-v3/contract-math/BitMath.js.map +1 -0
  24. package/build/dex/baseswap-v3/contract-math/FixedPoint128.d.ts +3 -0
  25. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js +8 -0
  26. package/build/dex/baseswap-v3/contract-math/FixedPoint128.js.map +1 -0
  27. package/build/dex/baseswap-v3/contract-math/FixedPoint96.d.ts +4 -0
  28. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js +9 -0
  29. package/build/dex/baseswap-v3/contract-math/FixedPoint96.js.map +1 -0
  30. package/build/dex/baseswap-v3/contract-math/FullMath.d.ts +4 -0
  31. package/build/dex/baseswap-v3/contract-math/FullMath.js +19 -0
  32. package/build/dex/baseswap-v3/contract-math/FullMath.js.map +1 -0
  33. package/build/dex/baseswap-v3/contract-math/LiquidityMath.d.ts +3 -0
  34. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js +22 -0
  35. package/build/dex/baseswap-v3/contract-math/LiquidityMath.js.map +1 -0
  36. package/build/dex/baseswap-v3/contract-math/Oracle.d.ts +10 -0
  37. package/build/dex/baseswap-v3/contract-math/Oracle.js +133 -0
  38. package/build/dex/baseswap-v3/contract-math/Oracle.js.map +1 -0
  39. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.d.ts +10 -0
  40. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js +91 -0
  41. package/build/dex/baseswap-v3/contract-math/SqrtPriceMath.js.map +1 -0
  42. package/build/dex/baseswap-v3/contract-math/SwapMath.d.ts +8 -0
  43. package/build/dex/baseswap-v3/contract-math/SwapMath.js +70 -0
  44. package/build/dex/baseswap-v3/contract-math/SwapMath.js.map +1 -0
  45. package/build/dex/baseswap-v3/contract-math/Tick.d.ts +7 -0
  46. package/build/dex/baseswap-v3/contract-math/Tick.js +45 -0
  47. package/build/dex/baseswap-v3/contract-math/Tick.js.map +1 -0
  48. package/build/dex/baseswap-v3/contract-math/TickBitMap.d.ts +7 -0
  49. package/build/dex/baseswap-v3/contract-math/TickBitMap.js +84 -0
  50. package/build/dex/baseswap-v3/contract-math/TickBitMap.js.map +1 -0
  51. package/build/dex/baseswap-v3/contract-math/TickMath.d.ts +8 -0
  52. package/build/dex/baseswap-v3/contract-math/TickMath.js +162 -0
  53. package/build/dex/baseswap-v3/contract-math/TickMath.js.map +1 -0
  54. package/build/dex/baseswap-v3/contract-math/UnsafeMath.d.ts +3 -0
  55. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js +10 -0
  56. package/build/dex/baseswap-v3/contract-math/UnsafeMath.js.map +1 -0
  57. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.d.ts +37 -0
  58. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js +393 -0
  59. package/build/dex/baseswap-v3/contract-math/uniswap-v3-math.js.map +1 -0
  60. package/build/dex/baseswap-v3/contract-math/utils.d.ts +7 -0
  61. package/build/dex/baseswap-v3/contract-math/utils.js +42 -0
  62. package/build/dex/baseswap-v3/contract-math/utils.js.map +1 -0
  63. package/build/dex/baseswap-v3/types.d.ts +164 -0
  64. package/build/dex/baseswap-v3/types.js +9 -0
  65. package/build/dex/baseswap-v3/types.js.map +1 -0
  66. package/build/dex/baseswap-v3/utils.d.ts +6 -0
  67. package/build/dex/baseswap-v3/utils.js +65 -0
  68. package/build/dex/baseswap-v3/utils.js.map +1 -0
  69. package/build/dex/index.js +2 -0
  70. package/build/dex/index.js.map +1 -1
  71. package/package.json +1 -1
  72. package/src/dex/balancer-v1/balancer-v1.ts +32 -13
  73. package/src/dex/balancer-v1/config.ts +2 -1
  74. package/src/dex/baseswap-v3/baseswap-v3-e2e.test.ts +129 -0
  75. package/src/dex/baseswap-v3/baseswap-v3-events.test.ts +141 -0
  76. package/src/dex/baseswap-v3/baseswap-v3-factory.ts +73 -0
  77. package/src/dex/baseswap-v3/baseswap-v3-integration.test.ts +472 -0
  78. package/src/dex/baseswap-v3/baseswap-v3-pool.ts +519 -0
  79. package/src/dex/baseswap-v3/baseswap-v3.ts +1243 -0
  80. package/src/dex/baseswap-v3/config.ts +53 -0
  81. package/src/dex/baseswap-v3/constants.ts +41 -0
  82. package/src/dex/baseswap-v3/contract-math/BitMath.ts +90 -0
  83. package/src/dex/baseswap-v3/contract-math/FixedPoint128.ts +3 -0
  84. package/src/dex/baseswap-v3/contract-math/FixedPoint96.ts +4 -0
  85. package/src/dex/baseswap-v3/contract-math/FullMath.ts +30 -0
  86. package/src/dex/baseswap-v3/contract-math/LiquidityMath.ts +17 -0
  87. package/src/dex/baseswap-v3/contract-math/Oracle.ts +226 -0
  88. package/src/dex/baseswap-v3/contract-math/SqrtPriceMath.ts +226 -0
  89. package/src/dex/baseswap-v3/contract-math/SwapMath.ts +139 -0
  90. package/src/dex/baseswap-v3/contract-math/Tick.ts +82 -0
  91. package/src/dex/baseswap-v3/contract-math/TickBitMap.ts +123 -0
  92. package/src/dex/baseswap-v3/contract-math/TickMath.ts +211 -0
  93. package/src/dex/baseswap-v3/contract-math/UnsafeMath.ts +5 -0
  94. package/src/dex/baseswap-v3/contract-math/uniswap-v3-math.ts +666 -0
  95. package/src/dex/baseswap-v3/contract-math/utils.ts +55 -0
  96. package/src/dex/baseswap-v3/types.ts +191 -0
  97. package/src/dex/baseswap-v3/utils.ts +83 -0
  98. package/src/dex/index.ts +2 -0
  99. package/tests/constants-e2e.ts +1 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeStateMultiCallResultWithRelativeBitmaps = exports.getUniswapV3DexKey = void 0;
4
+ const ethers_1 = require("ethers");
5
+ const ts_essentials_1 = require("ts-essentials");
6
+ const decoders_1 = require("../../lib/decoders");
7
+ function getUniswapV3DexKey(UniswapV3Config) {
8
+ const UniswapV3Keys = Object.keys(UniswapV3Config);
9
+ if (UniswapV3Keys.length !== 1) {
10
+ throw new Error(`UniswapV3 key in UniswapV3Config is not unique. Update relevant places (optimizer) or fix config issue. Received: ${JSON.stringify(UniswapV3Config, (_0, value) => (typeof value === 'bigint' ? value.toString() : value))}`);
11
+ }
12
+ return UniswapV3Keys[0].toLowerCase();
13
+ }
14
+ exports.getUniswapV3DexKey = getUniswapV3DexKey;
15
+ function decodeStateMultiCallResultWithRelativeBitmaps(result) {
16
+ const [isSuccess, toDecode] = (0, decoders_1.extractSuccessAndValue)(result);
17
+ (0, ts_essentials_1.assert)(isSuccess && toDecode !== '0x', `decodeStateMultiCallResultWithRelativeBitmaps failed to get decodable result: ${result}`);
18
+ const decoded = ethers_1.ethers.utils.defaultAbiCoder.decode([
19
+ // I don't want to pass here any interface, so I just use it in ethers format
20
+ `
21
+ tuple(
22
+ address pool,
23
+ uint256 blockTimestamp,
24
+ tuple(
25
+ uint160 sqrtPriceX96,
26
+ int24 tick,
27
+ uint16 observationIndex,
28
+ uint16 observationCardinality,
29
+ uint16 observationCardinalityNext,
30
+ uint8 feeProtocol,
31
+ bool unlocked,
32
+ ) slot0,
33
+ uint128 liquidity,
34
+ int24 tickSpacing,
35
+ uint128 maxLiquidityPerTick,
36
+ tuple(
37
+ uint32 blockTimestamp,
38
+ int56 tickCumulative,
39
+ uint160 secondsPerLiquidityCumulativeX128,
40
+ bool initialized,
41
+ ) observation,
42
+ tuple(
43
+ int16 index,
44
+ uint256 value,
45
+ )[] tickBitmap,
46
+ tuple(
47
+ int24 index,
48
+ tuple(
49
+ uint128 liquidityGross,
50
+ int128 liquidityNet,
51
+ int56 tickCumulativeOutside,
52
+ uint160 secondsPerLiquidityOutsideX128,
53
+ uint32 secondsOutside,
54
+ bool initialized,
55
+ ) value,
56
+ )[] ticks
57
+ )
58
+ `,
59
+ ], toDecode)[0];
60
+ // This conversion is not precise, because when we decode, we have more values
61
+ // But I typed only the ones that are used later
62
+ return decoded;
63
+ }
64
+ exports.decodeStateMultiCallResultWithRelativeBitmaps = decodeStateMultiCallResultWithRelativeBitmaps;
65
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/dex/baseswap-v3/utils.ts"],"names":[],"mappings":";;;AAAA,mCAA2C;AAC3C,iDAAuC;AACvC,iDAA4D;AAQ5D,SAAgB,kBAAkB,CAAC,eAAwC;IACzE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACb,qHAAqH,IAAI,CAAC,SAAS,CACjI,eAAe,EACf,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACtE,EAAE,CACJ,CAAC;KACH;IAED,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC;AAZD,gDAYC;AAED,SAAgB,6CAA6C,CAC3D,MAA0C;IAE1C,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAA,iCAAsB,EAAC,MAAM,CAAC,CAAC;IAE7D,IAAA,sBAAM,EACJ,SAAS,IAAI,QAAQ,KAAK,IAAI,EAC9B,iFAAiF,MAAM,EAAE,CAC1F,CAAC;IAEF,MAAM,OAAO,GAAG,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CACjD;QACE,6EAA6E;QAC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsCD;KACA,EACD,QAAQ,CACT,CAAC,CAAC,CAAC,CAAC;IACL,8EAA8E;IAC9E,gDAAgD;IAChD,OAAO,OAAyD,CAAC;AACnE,CAAC;AA1DD,sGA0DC"}
@@ -79,6 +79,7 @@ const algebra_1 = require("./algebra/algebra");
79
79
  const quick_perps_1 = require("./quick-perps/quick-perps");
80
80
  const nomiswap_v2_1 = require("./uniswap-v2/nomiswap-v2");
81
81
  const dexalot_1 = require("./dexalot/dexalot");
82
+ const baseswap_v3_1 = require("./baseswap-v3/baseswap-v3");
82
83
  const LegacyDexes = [
83
84
  curve_v2_1.CurveV2,
84
85
  stable_pool_1.StablePool,
@@ -154,6 +155,7 @@ const Dexes = [
154
155
  swaap_v2_1.SwaapV2,
155
156
  quick_perps_1.QuickPerps,
156
157
  nomiswap_v2_1.NomiswapV2,
158
+ baseswap_v3_1.BaseswapV3,
157
159
  ];
158
160
  class DexAdapterService {
159
161
  constructor(dexHelper, network, sellAdapters = {}, buyAdapters = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dex/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "2.42.3",
3
+ "version": "2.42.4-baseswap",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",
@@ -28,20 +28,35 @@ import {
28
28
  } from './types';
29
29
  import { SimpleExchange } from '../simple-exchange';
30
30
  import {
31
+ MIN_USD_LIQUIDITY_TO_FETCH,
31
32
  BalancerV1Config,
32
33
  Adapters,
33
- POOLS_FETCH_TIMEOUT,
34
34
  MAX_POOLS_FOR_PRICING,
35
35
  BALANCER_SWAP_GAS_COST,
36
+ MAX_POOL_CNT,
36
37
  } from './config';
37
38
  import { BalancerV1EventPool } from './balancer-v1-pool';
38
39
  import { generatePoolStates } from './utils';
39
40
  import BalancerV1ExchangeProxyABI from '../../abi/BalancerV1ExchangeProxy.json';
40
41
  import BalancerCustomMulticallABI from '../../abi/BalancerCustomMulticall.json';
41
42
 
42
- const BLACKLISTED_POOLS = new Set([
43
- '0x7860e28ebfb8ae052bfe279c07ac5d94c9cd2937',
44
- ]);
43
+ const fetchAllPoolsQuery = `query {
44
+ pools(first: ${MAX_POOL_CNT.toString()}
45
+ orderBy: liquidity
46
+ orderDirection: desc
47
+ where: {liquidity_gt: ${MIN_USD_LIQUIDITY_TO_FETCH.toString()}}) {
48
+ id
49
+ swapFee
50
+ totalWeight
51
+ tokensList
52
+ tokens {
53
+ address
54
+ balance
55
+ decimals
56
+ denormWeight
57
+ }
58
+ }
59
+ }`;
45
60
 
46
61
  export class BalancerV1
47
62
  extends SimpleExchange
@@ -86,18 +101,22 @@ export class BalancerV1
86
101
  // for pricing requests. It is optional for a DEX to
87
102
  // implement this function
88
103
  async initializePricing(_blockNumber: number) {
89
- const _poolsInfo = await this.dexHelper.httpRequest.get<PoolsInfo>(
90
- this.config.poolsURL,
91
- POOLS_FETCH_TIMEOUT,
104
+ const { data } = await this.dexHelper.httpRequest.post<{
105
+ data: { pools: PoolInfo[] };
106
+ }>(
107
+ this.config.subgraphURL,
108
+ { query: fetchAllPoolsQuery },
109
+ SUBGRAPH_TIMEOUT,
92
110
  );
93
111
 
94
- this.poolInfosByToken = {};
95
- if (!_poolsInfo) return;
96
- this.poolsInfo = {
97
- ..._poolsInfo,
98
- pools: _poolsInfo.pools.filter(p => !BLACKLISTED_POOLS.has(p.id)),
99
- };
112
+ if (!(data && data.pools))
113
+ throw new Error(
114
+ `Error ${this.dexKey} Subgraph: couldn't fetch the pools from the subgraph`,
115
+ );
116
+
117
+ this.poolsInfo = data;
100
118
 
119
+ this.poolInfosByToken = {};
101
120
  for (const poolInfo of this.poolsInfo.pools) {
102
121
  for (const tokenAddress of poolInfo.tokensList) {
103
122
  if (!this.poolInfosByToken[tokenAddress]) {
@@ -2,7 +2,8 @@ import { DexParams } from './types';
2
2
  import { DexConfigMap, AdapterMappings } from '../../types';
3
3
  import { Network, SwapSide } from '../../constants';
4
4
 
5
- export const POOLS_FETCH_TIMEOUT = 10000;
5
+ export const MAX_POOL_CNT = 1000;
6
+ export const MIN_USD_LIQUIDITY_TO_FETCH = 100;
6
7
  export const BALANCES_MULTICALL_POOLS_LIMIT = 200;
7
8
  export const MAX_POOLS_FOR_PRICING = 5;
8
9
  export const BALANCER_SWAP_GAS_COST = 120 * 1000;
@@ -0,0 +1,129 @@
1
+ import dotenv from 'dotenv';
2
+ dotenv.config();
3
+
4
+ import { testE2E } from '../../../tests/utils-e2e';
5
+ import {
6
+ Tokens,
7
+ Holders,
8
+ NativeTokenSymbols,
9
+ } from '../../../tests/constants-e2e';
10
+ import { Network, ContractMethod, SwapSide } from '../../constants';
11
+ import { StaticJsonRpcProvider } from '@ethersproject/providers';
12
+ import { generateConfig } from '../../config';
13
+
14
+ function testForNetwork(
15
+ network: Network,
16
+ dexKey: string,
17
+ tokenASymbol: string,
18
+ tokenBSymbol: string,
19
+ tokenAAmount: string,
20
+ tokenBAmount: string,
21
+ nativeTokenAmount: string,
22
+ slippage?: number | undefined,
23
+ ) {
24
+ const provider = new StaticJsonRpcProvider(
25
+ generateConfig(network).privateHttpProvider,
26
+ network,
27
+ );
28
+ const tokens = Tokens[network];
29
+ const holders = Holders[network];
30
+ const nativeTokenSymbol = NativeTokenSymbols[network];
31
+
32
+ const sideToContractMethods = new Map([
33
+ [
34
+ SwapSide.SELL,
35
+ [
36
+ ContractMethod.simpleSwap,
37
+ ContractMethod.multiSwap,
38
+ ContractMethod.megaSwap,
39
+ ],
40
+ ],
41
+ [SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
42
+ ]);
43
+
44
+ describe(`${network}`, () => {
45
+ sideToContractMethods.forEach((contractMethods, side) =>
46
+ describe(`${side}`, () => {
47
+ contractMethods.forEach((contractMethod: ContractMethod) => {
48
+ describe(`${contractMethod}`, () => {
49
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
50
+ await testE2E(
51
+ tokens[nativeTokenSymbol],
52
+ tokens[tokenASymbol],
53
+ holders[nativeTokenSymbol],
54
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
55
+ side,
56
+ dexKey,
57
+ contractMethod,
58
+ network,
59
+ provider,
60
+ undefined,
61
+ undefined,
62
+ undefined,
63
+ slippage,
64
+ );
65
+ });
66
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
67
+ await testE2E(
68
+ tokens[tokenASymbol],
69
+ tokens[nativeTokenSymbol],
70
+ holders[tokenASymbol],
71
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
72
+ side,
73
+ dexKey,
74
+ contractMethod,
75
+ network,
76
+ provider,
77
+ undefined,
78
+ undefined,
79
+ undefined,
80
+ slippage,
81
+ );
82
+ });
83
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
84
+ await testE2E(
85
+ tokens[tokenASymbol],
86
+ tokens[tokenBSymbol],
87
+ holders[tokenASymbol],
88
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
89
+ side,
90
+ dexKey,
91
+ contractMethod,
92
+ network,
93
+ provider,
94
+ undefined,
95
+ undefined,
96
+ undefined,
97
+ slippage,
98
+ );
99
+ });
100
+ });
101
+ });
102
+ }),
103
+ );
104
+ });
105
+ }
106
+
107
+ describe('BaseswapV3 E2E', () => {
108
+ const dexKey = 'BaseswapV3';
109
+ describe('Base', () => {
110
+ const network = Network.BASE;
111
+
112
+ const tokenASymbol: string = 'USDC';
113
+ const tokenBSymbol: string = 'USDbC';
114
+
115
+ const tokenAAmount: string = '1000000';
116
+ const tokenBAmount: string = '1000000';
117
+ const nativeTokenAmount = '1000000000000000000';
118
+
119
+ testForNetwork(
120
+ network,
121
+ dexKey,
122
+ tokenASymbol,
123
+ tokenBSymbol,
124
+ tokenAAmount,
125
+ tokenBAmount,
126
+ nativeTokenAmount,
127
+ );
128
+ });
129
+ });
@@ -0,0 +1,141 @@
1
+ /* eslint-disable no-console */
2
+ import dotenv from 'dotenv';
3
+ dotenv.config();
4
+
5
+ import _ from 'lodash';
6
+ import { BaseswapV3EventPool } from './baseswap-v3-pool';
7
+ import { BaseswapV3Config } from './config';
8
+ import { Network } from '../../constants';
9
+ import { DummyDexHelper } from '../../dex-helper/index';
10
+ import { testEventSubscriber } from '../../../tests/utils-events';
11
+ import { PoolState } from './types';
12
+ import { Interface } from '@ethersproject/abi';
13
+ import ERC20ABI from '../../abi/erc20.json';
14
+ import StateMulticallABI from '../../abi/uniswap-v3/UniswapV3StateMulticall.abi.json';
15
+ import { AbiItem } from 'web3-utils';
16
+
17
+ jest.setTimeout(300 * 1000);
18
+ const dexKey = 'BaseswapV3';
19
+ const network = Network.BASE;
20
+ const config = BaseswapV3Config[dexKey][network];
21
+
22
+ async function fetchPoolStateFromContract(
23
+ baseswapV3Pool: BaseswapV3EventPool,
24
+ blockNumber: number,
25
+ poolAddress: string,
26
+ ): Promise<PoolState> {
27
+ const message = `BaseswapV3: ${poolAddress} blockNumber ${blockNumber}`;
28
+ console.log(`Fetching state ${message}`);
29
+ // Be careful to not request state prior to contract deployment
30
+ // Otherwise need to use manual state sourcing from multicall
31
+ // We had that mechanism, but removed it with this commit
32
+ // You can restore it, but better just to find block after state multicall
33
+ // deployment
34
+ const state = baseswapV3Pool.generateState(blockNumber);
35
+ console.log(`Done ${message}`);
36
+ return state;
37
+ }
38
+
39
+ describe('BaseswapV3 Event', function () {
40
+ const poolAddress = '0xEf3C164b0feE8Eb073513E88EcEa280A58cC9945';
41
+ const poolFeeCode = 450n;
42
+ const token0 = '0x4200000000000000000000000000000000000006';
43
+ const token1 = '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA'; // USDbC
44
+
45
+ const blockNumbers: { [eventName: string]: number[] } = {
46
+ ['Swap']: [
47
+ 5574195, 5574217, 5574296, 5574296, 5574369, 5574404, 5574489, 5574522,
48
+ 5574566, 5574579, 5574587, 5574588, 5574611, 5574657, 5574712, 5574737,
49
+ 5574761, 5574806, 5574851, 5574896, 5574918, 5574982, 5575086, 5575110,
50
+ 5575308, 5575378, 5575490, 5575668,
51
+ ],
52
+ ['Burn']: [
53
+ 5575845, 5609704, 5609704, 5612315, 5612770, 5616727, 5617522, 5617821,
54
+ 5620232, 5622253,
55
+ ],
56
+ // topic0 - 0x7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde
57
+ ['Mint']: [
58
+ 5594704, 5595166, 5606630, 5609854, 5612343, 5612386, 5612959, 5613707,
59
+ 5619196, 5620167, 5622035, 5622391, 5644261, 5645562, 5647711, 5649108,
60
+ 5649161, 5649377, 5651799, 5652903,
61
+ ],
62
+ // topic0 - 0x973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b133
63
+ ['SetFeeProtocol']: [],
64
+ // topic0 - 0xac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a
65
+ // There are some events on blockNumbers: 13125816, 12733621, 12591465
66
+ // But stateMulticall is not deployed at that time. So I just remove that check
67
+ // I think it is not important actually
68
+ ['IncreaseObservationCardinalityNext']: [],
69
+ ['Collect']: [
70
+ 5575845, 5609704, 5612315, 5612770, 5616727, 5617522, 5617821, 5620232,
71
+ 5622253, 5642348, 5643915, 5645799, 5646074, 5647176, 5650388, 5650466,
72
+ 5653068, 5655334, 5655462, 5656401, 5657882, 5658500, 5659898, 5663603,
73
+ 5663999, 5664004, 5670005, 5671343, 5673141,
74
+ ],
75
+ ['Flash']: [],
76
+ };
77
+
78
+ describe('BaseswapV3EventPool', () => {
79
+ Object.keys(blockNumbers).forEach((event: string) => {
80
+ blockNumbers[event].forEach((blockNumber: number) => {
81
+ it(`${event}:${blockNumber} - should return correct state`, async function () {
82
+ const dexHelper = new DummyDexHelper(network);
83
+ // await dexHelper.init();
84
+
85
+ const logger = dexHelper.getLogger(dexKey);
86
+
87
+ // readonly dexHelper: IDexHelper,
88
+ // parentName: string,
89
+ // readonly stateMultiContract: Contract,
90
+ // readonly decodeStateMultiCallResultWithRelativeBitmaps:
91
+ // | DecodeStateMultiCallFunc
92
+ // | undefined,
93
+ // readonly erc20Interface: Interface,
94
+ // protected readonly factoryAddress: Address,
95
+ // public feeCode: bigint,
96
+ // token0: Address,
97
+ // token1: Address,
98
+ // logger: Logger,
99
+ // mapKey: string = '',
100
+ // readonly poolInitCodeHash: string,
101
+
102
+ const baseswapV3Pool = new BaseswapV3EventPool(
103
+ dexHelper,
104
+ dexKey,
105
+ new dexHelper.web3Provider.eth.Contract(
106
+ StateMulticallABI as AbiItem[],
107
+ config.stateMulticall,
108
+ ),
109
+ undefined,
110
+ new Interface(ERC20ABI),
111
+ config.factory,
112
+ poolFeeCode,
113
+ token0,
114
+ token1,
115
+ logger,
116
+ undefined,
117
+ config.initHash,
118
+ );
119
+
120
+ // It is done in generateState. But here have to make it manually
121
+ baseswapV3Pool.poolAddress = poolAddress.toLowerCase();
122
+ baseswapV3Pool.addressesSubscribed[0] = poolAddress;
123
+
124
+ await testEventSubscriber(
125
+ baseswapV3Pool,
126
+ baseswapV3Pool.addressesSubscribed,
127
+ (_blockNumber: number) =>
128
+ fetchPoolStateFromContract(
129
+ baseswapV3Pool,
130
+ _blockNumber,
131
+ poolAddress,
132
+ ),
133
+ blockNumber,
134
+ `${dexKey}_${poolAddress}`,
135
+ dexHelper.provider,
136
+ );
137
+ });
138
+ });
139
+ });
140
+ });
141
+ });
@@ -0,0 +1,73 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import FactoryABI from '../../abi/uniswap-v3/UniswapV3Factory.abi.json';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
6
+ import { Address, Log, Logger } from '../../types';
7
+ import { LogDescription } from 'ethers/lib/utils';
8
+ import { FactoryState } from './types';
9
+
10
+ export type OnPoolCreatedCallback = ({
11
+ token0,
12
+ token1,
13
+ fee,
14
+ }: {
15
+ token0: string;
16
+ token1: string;
17
+ fee: bigint;
18
+ }) => Promise<void>;
19
+
20
+ /*
21
+ * "Stateless" event subscriber in order to capture "PoolCreated" event on new pools created.
22
+ * State is present, but it's a placeholder to actually make the events reach handlers (if there's no previous state - `processBlockLogs` is not called)
23
+ */
24
+ export class BaseswapV3Factory extends StatefulEventSubscriber<FactoryState> {
25
+ handlers: {
26
+ [event: string]: (event: any) => Promise<void>;
27
+ } = {};
28
+
29
+ logDecoder: (log: Log) => any;
30
+
31
+ public readonly factoryIface = new Interface(FactoryABI);
32
+
33
+ constructor(
34
+ readonly dexHelper: IDexHelper,
35
+ parentName: string,
36
+ protected readonly factoryAddress: Address,
37
+ logger: Logger,
38
+ protected readonly onPoolCreated: OnPoolCreatedCallback,
39
+ mapKey: string = '',
40
+ ) {
41
+ super(parentName, `${parentName} Factory`, dexHelper, logger, true, mapKey);
42
+
43
+ this.addressesSubscribed = [factoryAddress];
44
+
45
+ this.logDecoder = (log: Log) => this.factoryIface.parseLog(log);
46
+
47
+ this.handlers['PoolCreated'] = this.handleNewPool.bind(this);
48
+ }
49
+
50
+ generateState(): FactoryState {
51
+ return {};
52
+ }
53
+
54
+ protected async processLog(
55
+ _: DeepReadonly<FactoryState>,
56
+ log: Readonly<Log>,
57
+ ): Promise<FactoryState> {
58
+ const event = this.logDecoder(log);
59
+ if (event.name in this.handlers) {
60
+ await this.handlers[event.name](event);
61
+ }
62
+
63
+ return {};
64
+ }
65
+
66
+ async handleNewPool(event: LogDescription) {
67
+ const token0 = event.args.token0.toLowerCase();
68
+ const token1 = event.args.token1.toLowerCase();
69
+ const fee = event.args.fee;
70
+
71
+ await this.onPoolCreated({ token0, token1, fee });
72
+ }
73
+ }