@paraswap/dex-lib 2.35.7-worker-pool.3 → 2.36.0

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 (187) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/vcs.xml +6 -0
  8. package/build/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  9. package/build/abi/algebra/AlgebraPool.abi.json +727 -0
  10. package/build/abi/curve-v1/StableSwapFRXETH.json +889 -0
  11. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  12. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  13. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  14. package/build/abi/wBETH.json +1527 -0
  15. package/build/config.js +2 -2
  16. package/build/dex/algebra/algebra-pool.d.ts +46 -0
  17. package/build/dex/algebra/algebra-pool.js +336 -0
  18. package/build/dex/algebra/algebra-pool.js.map +1 -0
  19. package/build/dex/algebra/algebra.js +5 -4
  20. package/build/dex/algebra/algebra.js.map +1 -1
  21. package/build/dex/balancer-v2/config.js +9 -1
  22. package/build/dex/balancer-v2/config.js.map +1 -1
  23. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  24. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  25. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  26. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  27. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  28. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  29. package/build/dex/index.js +2 -0
  30. package/build/dex/index.js.map +1 -1
  31. package/build/dex/maverick-v1/config.js +9 -0
  32. package/build/dex/maverick-v1/config.js.map +1 -1
  33. package/build/dex/maverick-v1/maverick-v1.js +11 -2
  34. package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
  35. package/build/dex/pancakeswap-v3/config.js +17 -0
  36. package/build/dex/pancakeswap-v3/config.js.map +1 -1
  37. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +7 -6
  38. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  39. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  40. package/build/dex/{test-dex → pancakeswap-v3}/types.js.map +1 -1
  41. package/build/dex/{test-dex → ramses-v2}/config.d.ts +1 -1
  42. package/build/dex/ramses-v2/config.js +28 -0
  43. package/build/dex/ramses-v2/config.js.map +1 -0
  44. package/build/dex/ramses-v2/constants.d.ts +28 -0
  45. package/build/dex/ramses-v2/constants.js +35 -0
  46. package/build/dex/ramses-v2/constants.js.map +1 -0
  47. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  48. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  49. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  50. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  51. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  52. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  53. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  54. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  55. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  56. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  57. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  58. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  59. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  60. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  61. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  62. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  63. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  64. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  65. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  66. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  67. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  68. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  69. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  70. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  71. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  72. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  73. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  74. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  75. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  76. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  77. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  78. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  79. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  80. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  81. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  82. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  83. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  84. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  85. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  86. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  87. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  88. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  89. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  90. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  91. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  92. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  93. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  94. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  95. package/build/dex/ramses-v2/types.d.ts +154 -0
  96. package/build/dex/ramses-v2/types.js +9 -0
  97. package/build/dex/ramses-v2/types.js.map +1 -0
  98. package/build/dex/ramses-v2/utils.d.ts +6 -0
  99. package/build/dex/ramses-v2/utils.js +71 -0
  100. package/build/dex/ramses-v2/utils.js.map +1 -0
  101. package/build/dex/solidly/config.js +22 -1
  102. package/build/dex/solidly/config.js.map +1 -1
  103. package/build/dex/solidly/forks-override/aerodrome.d.ts +14 -0
  104. package/build/dex/solidly/forks-override/aerodrome.js +48 -0
  105. package/build/dex/solidly/forks-override/aerodrome.js.map +1 -0
  106. package/build/dex/solidly/solidly.js +1 -0
  107. package/build/dex/solidly/solidly.js.map +1 -1
  108. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  109. package/build/dex/sushiswap-v3/config.js +132 -0
  110. package/build/dex/sushiswap-v3/config.js.map +1 -0
  111. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  112. package/build/dex/sushiswap-v3/constants.js +32 -0
  113. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  114. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  115. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  116. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  117. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  118. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  119. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  120. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  121. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  122. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  123. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  124. package/build/dex/sushiswap-v3/token.js +23 -0
  125. package/build/dex/sushiswap-v3/token.js.map +1 -0
  126. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  127. package/build/dex/sushiswap-v3/types.js +18 -0
  128. package/build/dex/sushiswap-v3/types.js.map +1 -0
  129. package/build/dex/uniswap-v3/config.js +12 -0
  130. package/build/dex/uniswap-v3/config.js.map +1 -1
  131. package/build/dex/uniswap-v3/uniswap-v3.js +5 -4
  132. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  133. package/build/dex/woo-fi-v2/config.js +13 -0
  134. package/build/dex/woo-fi-v2/config.js.map +1 -1
  135. package/build/dex-helper/dummy-dex-helper.d.ts +0 -1
  136. package/build/dex-helper/dummy-dex-helper.js +0 -3
  137. package/build/dex-helper/dummy-dex-helper.js.map +1 -1
  138. package/build/dex-helper/idex-helper.d.ts +0 -1
  139. package/package.json +1 -1
  140. package/src/abi/aerodrome/aerodrome-pool-factory.json +586 -0
  141. package/src/config.ts +2 -2
  142. package/src/dex/algebra/algebra.ts +10 -10
  143. package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +122 -1
  144. package/src/dex/balancer-v2/config.ts +10 -1
  145. package/src/dex/index.ts +2 -0
  146. package/src/dex/maverick-v1/config.ts +10 -0
  147. package/src/dex/maverick-v1/maverick-v1-e2e.test.ts +121 -1
  148. package/src/dex/maverick-v1/maverick-v1.ts +12 -2
  149. package/src/dex/pancakeswap-v3/config.ts +19 -0
  150. package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +120 -0
  151. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +12 -12
  152. package/src/dex/solidly/config.ts +24 -1
  153. package/src/dex/solidly/forks-override/aerodrome.ts +57 -0
  154. package/src/dex/solidly/solidly-e2e.test.ts +88 -0
  155. package/src/dex/solidly/solidly-integration.test.ts +66 -0
  156. package/src/dex/solidly/solidly.ts +1 -0
  157. package/src/dex/uniswap-v3/config.ts +13 -0
  158. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +25 -4
  159. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +142 -0
  160. package/src/dex/uniswap-v3/uniswap-v3.ts +10 -10
  161. package/src/dex/woo-fi-v2/config.ts +13 -0
  162. package/src/dex/woo-fi-v2/woo-fi-v2-e2e.test.ts +64 -0
  163. package/src/dex-helper/dummy-dex-helper.ts +0 -15
  164. package/src/dex-helper/idex-helper.ts +0 -7
  165. package/tests/constants-e2e.ts +30 -0
  166. package/tests/utils-e2e.ts +1 -0
  167. package/build/abi/quickPerps/fast-price-events.json +0 -70
  168. package/build/abi/quickPerps/fast-price-feed.json +0 -748
  169. package/build/abi/quickPerps/reader.json +0 -313
  170. package/build/abi/quickPerps/vault-price-feed.json +0 -477
  171. package/build/abi/quickPerps/vault.json +0 -1953
  172. package/build/dex/test-dex/config.js +0 -15
  173. package/build/dex/test-dex/config.js.map +0 -1
  174. package/build/dex/test-dex/test-dex-pool.d.ts +0 -39
  175. package/build/dex/test-dex/test-dex-pool.js +0 -63
  176. package/build/dex/test-dex/test-dex-pool.js.map +0 -1
  177. package/build/dex/test-dex/test-dex.d.ts +0 -37
  178. package/build/dex/test-dex/test-dex.js +0 -126
  179. package/build/dex/test-dex/test-dex.js.map +0 -1
  180. package/build/dex/test-dex/types.d.ts +0 -6
  181. package/build/dex/woo-fi-v2/woo-fi-math.d.ts +0 -16
  182. package/build/dex/woo-fi-v2/woo-fi-math.js +0 -137
  183. package/build/dex/woo-fi-v2/woo-fi-math.js.map +0 -1
  184. package/build/workers.d.ts +0 -0
  185. package/build/workers.js +0 -2
  186. package/build/workers.js.map +0 -1
  187. /package/build/dex/{test-dex → pancakeswap-v3}/types.js +0 -0
@@ -2,7 +2,7 @@ import dotenv from 'dotenv';
2
2
  dotenv.config();
3
3
 
4
4
  import { testE2E } from '../../../tests/utils-e2e';
5
- import { Holders, Tokens } from '../../../tests/constants-e2e';
5
+ import { Holders, NativeTokenSymbols, Tokens } from '../../../tests/constants-e2e';
6
6
  import { ContractMethod, Network, SwapSide } from '../../constants';
7
7
  import { StaticJsonRpcProvider } from '@ethersproject/providers';
8
8
 
@@ -10,6 +10,105 @@ import { generateConfig } from '../../config';
10
10
 
11
11
  jest.setTimeout(50 * 1000);
12
12
 
13
+ function testForNetwork(
14
+ network: Network,
15
+ dexKey: string,
16
+ tokenASymbol: string,
17
+ tokenBSymbol: string,
18
+ tokenAAmount: string,
19
+ tokenBAmount: string,
20
+ nativeTokenAmount: string,
21
+ slippage?: number | undefined,
22
+ ) {
23
+ const provider = new StaticJsonRpcProvider(
24
+ generateConfig(network).privateHttpProvider,
25
+ network,
26
+ );
27
+ const tokens = Tokens[network];
28
+ const holders = Holders[network];
29
+ const nativeTokenSymbol = NativeTokenSymbols[network];
30
+
31
+ const sideToContractMethods = new Map([
32
+ [
33
+ SwapSide.SELL,
34
+ [
35
+ ContractMethod.simpleSwap,
36
+ ContractMethod.multiSwap,
37
+ ContractMethod.megaSwap,
38
+ ],
39
+ ],
40
+ [
41
+ SwapSide.BUY,
42
+ [
43
+ ContractMethod.simpleBuy,
44
+ ContractMethod.buy,
45
+ ],
46
+ ],
47
+ ]);
48
+
49
+ describe(`${network}`, () => {
50
+ sideToContractMethods.forEach((contractMethods, side) =>
51
+ describe(`${side}`, () => {
52
+ contractMethods.forEach((contractMethod: ContractMethod) => {
53
+ describe(`${contractMethod}`, () => {
54
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
55
+ await testE2E(
56
+ tokens[nativeTokenSymbol],
57
+ tokens[tokenASymbol],
58
+ holders[nativeTokenSymbol],
59
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
60
+ side,
61
+ dexKey,
62
+ contractMethod,
63
+ network,
64
+ provider,
65
+ undefined,
66
+ undefined,
67
+ undefined,
68
+ slippage,
69
+ );
70
+ });
71
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
72
+ await testE2E(
73
+ tokens[tokenASymbol],
74
+ tokens[nativeTokenSymbol],
75
+ holders[tokenASymbol],
76
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
77
+ side,
78
+ dexKey,
79
+ contractMethod,
80
+ network,
81
+ provider,
82
+ undefined,
83
+ undefined,
84
+ undefined,
85
+ slippage,
86
+ );
87
+ });
88
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
89
+ await testE2E(
90
+ tokens[tokenASymbol],
91
+ tokens[tokenBSymbol],
92
+ holders[tokenASymbol],
93
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
94
+ side,
95
+ dexKey,
96
+ contractMethod,
97
+ network,
98
+ provider,
99
+ undefined,
100
+ undefined,
101
+ undefined,
102
+ slippage,
103
+ );
104
+ });
105
+ });
106
+ });
107
+ }),
108
+ );
109
+ });
110
+ }
111
+
13
112
  describe('BalancerV2 E2E', () => {
14
113
  describe('BalancerV2 MAINNET', () => {
15
114
  const dexKey = 'BalancerV2';
@@ -1195,6 +1294,28 @@ describe('BalancerV2 E2E', () => {
1195
1294
  });
1196
1295
  });
1197
1296
 
1297
+ describe('BalancerV2 Base', () => {
1298
+ const dexKey = 'BalancerV2';
1299
+ const network = Network.BASE;
1300
+
1301
+ const tokenASymbol: string = 'USDC';
1302
+ const tokenBSymbol: string = 'GOLD';
1303
+
1304
+ const tokenAAmount: string = '11110010';
1305
+ const tokenBAmount: string = '210000000000000000000';
1306
+ const nativeTokenAmount = '1000000000000000000';
1307
+
1308
+ testForNetwork(
1309
+ network,
1310
+ dexKey,
1311
+ tokenASymbol,
1312
+ tokenBSymbol,
1313
+ tokenAAmount,
1314
+ tokenBAmount,
1315
+ nativeTokenAmount,
1316
+ );
1317
+ });
1318
+
1198
1319
  describe('BeetsFi OPTIMISM', () => {
1199
1320
  const dexKey = 'BeetsFi';
1200
1321
  const network = Network.OPTIMISM;
@@ -23,7 +23,12 @@ export const BalancerConfig: DexConfigMap<DexParams> = {
23
23
  subgraphURL:
24
24
  'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer-avalanche-v2',
25
25
  vaultAddress: '0xBA12222222228d8Ba445958a75a0704d566BF2C8',
26
- }
26
+ },
27
+ [Network.BASE]: {
28
+ subgraphURL:
29
+ 'https://api.studio.thegraph.com/query/24660/balancer-base-v2/version/latest',
30
+ vaultAddress: '0xBA12222222228d8Ba445958a75a0704d566BF2C8',
31
+ },
27
32
  },
28
33
  BeetsFi: {
29
34
  [Network.FANTOM]: {
@@ -71,5 +76,9 @@ export const Adapters: Record<number, AdapterMappings> = {
71
76
  [Network.AVALANCHE]: {
72
77
  [SwapSide.SELL]: [{ name: 'AvalancheAdapter01', index: 8 }],
73
78
  [SwapSide.BUY]: [{ name: 'AvalancheBuyAdapter', index: 7 }],
79
+ },
80
+ [Network.BASE]: {
81
+ [SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 4 }],
82
+ [SwapSide.BUY]: [{ name: 'BaseBuyAdapter', index: 3 }],
74
83
  }
75
84
  };
package/src/dex/index.ts CHANGED
@@ -47,6 +47,7 @@ import { Thena } from './solidly/forks-override/thena';
47
47
  import { Chronos } from './solidly/forks-override/chronos';
48
48
  import { Velodrome } from './solidly/forks-override/velodrome';
49
49
  import { VelodromeV2 } from './solidly/forks-override/velodromeV2';
50
+ import { Aerodrome } from './solidly/forks-override/aerodrome';
50
51
  import { SpiritSwapV2 } from './solidly/forks-override/spiritSwapV2';
51
52
  import { Synthetix } from './synthetix/synthetix';
52
53
  import { Cone } from './solidly/forks-override/cone';
@@ -134,6 +135,7 @@ const Dexes = [
134
135
  Chronos,
135
136
  Velodrome,
136
137
  VelodromeV2,
138
+ Aerodrome,
137
139
  Cone,
138
140
  SoliSnek,
139
141
  Equalizer,
@@ -14,6 +14,12 @@ export const MaverickV1Config: DexConfigMap<DexParams> = {
14
14
  routerAddress: '0x4a585e0f7c18e2c414221d6402652d5e0990e5f8',
15
15
  poolInspectorAddress: '0xaA5BF61a664109e959D69C38734d4EA7dF74e456',
16
16
  },
17
+ [Network.BASE]: {
18
+ subgraphURL:
19
+ 'https://api.studio.thegraph.com/query/42519/maverick-base/version/latest',
20
+ routerAddress: '0x32AED3Bce901DA12ca8489788F3A99fCe1056e14',
21
+ poolInspectorAddress: '0x65A3AD03Be97619284bA7AA1E3Ca05638B9d6364',
22
+ },
17
23
  },
18
24
  };
19
25
 
@@ -22,4 +28,8 @@ export const Adapters: Record<number, AdapterMappings> = {
22
28
  [SwapSide.SELL]: [{ name: 'Adapter04', index: 2 }],
23
29
  [SwapSide.BUY]: [{ name: 'BuyAdapter', index: 8 }],
24
30
  },
31
+ [Network.BASE]: {
32
+ [SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 2 }],
33
+ [SwapSide.BUY]: [{ name: 'BaseBuyAdapter', index: 2 }],
34
+ },
25
35
  };
@@ -11,10 +11,109 @@ import { Network, ContractMethod, SwapSide } from '../../constants';
11
11
  import { StaticJsonRpcProvider } from '@ethersproject/providers';
12
12
  import { generateConfig } from '../../config';
13
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
+ [
42
+ SwapSide.BUY,
43
+ [
44
+ ContractMethod.simpleBuy,
45
+ ContractMethod.buy,
46
+ ],
47
+ ],
48
+ ]);
49
+
50
+ describe(`${network}`, () => {
51
+ sideToContractMethods.forEach((contractMethods, side) =>
52
+ describe(`${side}`, () => {
53
+ contractMethods.forEach((contractMethod: ContractMethod) => {
54
+ describe(`${contractMethod}`, () => {
55
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
56
+ await testE2E(
57
+ tokens[nativeTokenSymbol],
58
+ tokens[tokenASymbol],
59
+ holders[nativeTokenSymbol],
60
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
61
+ side,
62
+ dexKey,
63
+ contractMethod,
64
+ network,
65
+ provider,
66
+ undefined,
67
+ undefined,
68
+ undefined,
69
+ slippage,
70
+ );
71
+ });
72
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
73
+ await testE2E(
74
+ tokens[tokenASymbol],
75
+ tokens[nativeTokenSymbol],
76
+ holders[tokenASymbol],
77
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
78
+ side,
79
+ dexKey,
80
+ contractMethod,
81
+ network,
82
+ provider,
83
+ undefined,
84
+ undefined,
85
+ undefined,
86
+ slippage,
87
+ );
88
+ });
89
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
90
+ await testE2E(
91
+ tokens[tokenASymbol],
92
+ tokens[tokenBSymbol],
93
+ holders[tokenASymbol],
94
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
95
+ side,
96
+ dexKey,
97
+ contractMethod,
98
+ network,
99
+ provider,
100
+ undefined,
101
+ undefined,
102
+ undefined,
103
+ slippage,
104
+ );
105
+ });
106
+ });
107
+ });
108
+ }),
109
+ );
110
+ });
111
+ }
112
+
14
113
  describe('MaverickV1 E2E', () => {
15
114
  const dexKey = 'MaverickV1';
16
115
 
17
- describe('MaverickV1 MAINNET', () => {
116
+ describe('MAINNET', () => {
18
117
  const network = Network.MAINNET;
19
118
  const tokens = Tokens[network];
20
119
  const holders = Holders[network];
@@ -121,4 +220,25 @@ describe('MaverickV1 E2E', () => {
121
220
  );
122
221
  });
123
222
  });
223
+
224
+ describe('BASE', () => {
225
+ const network = Network.BASE;
226
+
227
+ const tokenASymbol: string = 'USDbC';
228
+ const tokenBSymbol: string = 'MAV';
229
+
230
+ const tokenAAmount: string = '1111100000';
231
+ const tokenBAmount: string = '1100000000000000000';
232
+ const nativeTokenAmount = '100000000000000000';
233
+
234
+ testForNetwork(
235
+ network,
236
+ dexKey,
237
+ tokenASymbol,
238
+ tokenBSymbol,
239
+ tokenAAmount,
240
+ tokenBAmount,
241
+ nativeTokenAmount,
242
+ );
243
+ });
124
244
  });
@@ -78,6 +78,7 @@ export class MaverickV1
78
78
 
79
79
  async setupEventPools(blockNumber: number) {
80
80
  const pools = await this.fetchAllSubgraphPools();
81
+
81
82
  await Promise.all(
82
83
  pools.map(async (pool: any) => {
83
84
  const eventPool = new MaverickV1EventPool(
@@ -181,8 +182,17 @@ export class MaverickV1
181
182
  getCalldataGasCost(
182
183
  poolPrices: PoolPrices<MaverickV1Data>,
183
184
  ): number | number[] {
184
- // TODO: update if there is any payload in getAdapterParam
185
- return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
185
+ const gasCost = CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
186
+
187
+ const arr = new Array(poolPrices.prices.length);
188
+ poolPrices.prices.forEach((p, index) => {
189
+ if (p == 0n) {
190
+ arr[index] = 0;
191
+ } else {
192
+ arr[index] = gasCost;
193
+ }
194
+ });
195
+ return arr;
186
196
  }
187
197
 
188
198
  // Returns pool prices for amounts.
@@ -53,6 +53,21 @@ export const PancakeswapV3Config: DexConfigMap<DexParams> = {
53
53
  subgraphURL:
54
54
  'https://api.studio.thegraph.com/query/45376/exchange-v3-arbitrum/version/latest',
55
55
  },
56
+ [Network.BASE]: {
57
+ factory: '0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865',
58
+ deployer: '0x41ff9AA7e16B8B1a8a8dc4f0eFacd93D02d071c9',
59
+ quoter: '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997',
60
+ router: '0x1b81D678ffb9C0263b24A97847620C99d213eB14',
61
+ supportedFees: PANCAKE_SUPPORTED_FEES,
62
+ stateMulticall: '0xeBF40A40CA3D4310Bf53048F48e860656e1D7C81',
63
+ uniswapMulticall: '0x091e99cb1C49331a94dD62755D168E941AbD0693',
64
+ chunksCount: 10,
65
+ initRetryFrequency: 30,
66
+ initHash:
67
+ '0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2',
68
+ subgraphURL:
69
+ 'https://api.studio.thegraph.com/query/45376/exchange-v3-base/version/latest',
70
+ },
56
71
  },
57
72
  };
58
73
 
@@ -69,4 +84,8 @@ export const Adapters: Record<number, AdapterMappings> = {
69
84
  [SwapSide.SELL]: [{ name: 'ArbitrumAdapter01', index: 3 }],
70
85
  [SwapSide.BUY]: [{ name: 'ArbitrumBuyAdapter', index: 2 }],
71
86
  },
87
+ [Network.BASE]: {
88
+ [SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 1 }],
89
+ [SwapSide.BUY]: [{ name: 'BaseBuyAdapter', index: 1 }],
90
+ },
72
91
  };
@@ -11,6 +11,105 @@ import { Network, ContractMethod, SwapSide } from '../../constants';
11
11
  import { StaticJsonRpcProvider } from '@ethersproject/providers';
12
12
  import { generateConfig } from '../../config';
13
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
+ [
42
+ SwapSide.BUY,
43
+ [
44
+ ContractMethod.simpleBuy,
45
+ ContractMethod.buy,
46
+ ],
47
+ ],
48
+ ]);
49
+
50
+ describe(`${network}`, () => {
51
+ sideToContractMethods.forEach((contractMethods, side) =>
52
+ describe(`${side}`, () => {
53
+ contractMethods.forEach((contractMethod: ContractMethod) => {
54
+ describe(`${contractMethod}`, () => {
55
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
56
+ await testE2E(
57
+ tokens[nativeTokenSymbol],
58
+ tokens[tokenASymbol],
59
+ holders[nativeTokenSymbol],
60
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
61
+ side,
62
+ dexKey,
63
+ contractMethod,
64
+ network,
65
+ provider,
66
+ undefined,
67
+ undefined,
68
+ undefined,
69
+ slippage,
70
+ );
71
+ });
72
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
73
+ await testE2E(
74
+ tokens[tokenASymbol],
75
+ tokens[nativeTokenSymbol],
76
+ holders[tokenASymbol],
77
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
78
+ side,
79
+ dexKey,
80
+ contractMethod,
81
+ network,
82
+ provider,
83
+ undefined,
84
+ undefined,
85
+ undefined,
86
+ slippage,
87
+ );
88
+ });
89
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
90
+ await testE2E(
91
+ tokens[tokenASymbol],
92
+ tokens[tokenBSymbol],
93
+ holders[tokenASymbol],
94
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
95
+ side,
96
+ dexKey,
97
+ contractMethod,
98
+ network,
99
+ provider,
100
+ undefined,
101
+ undefined,
102
+ undefined,
103
+ slippage,
104
+ );
105
+ });
106
+ });
107
+ });
108
+ }),
109
+ );
110
+ });
111
+ }
112
+
14
113
  describe('PancakeswapV3 E2E', () => {
15
114
  const dexKey = 'PancakeswapV3';
16
115
 
@@ -307,4 +406,25 @@ describe('PancakeswapV3 E2E', () => {
307
406
  }),
308
407
  );
309
408
  });
409
+
410
+ describe('PancakeswapV3 Base', () => {
411
+ const network = Network.BASE;
412
+
413
+ const tokenASymbol: string = 'USDbC';
414
+ const tokenBSymbol: string = 'DAI';
415
+
416
+ const tokenAAmount: string = '11111000000';
417
+ const tokenBAmount: string = '210000000000000000';
418
+ const nativeTokenAmount = '110000000000000000000';
419
+
420
+ testForNetwork(
421
+ network,
422
+ dexKey,
423
+ tokenASymbol,
424
+ tokenBSymbol,
425
+ tokenAAmount,
426
+ tokenBAmount,
427
+ nativeTokenAmount,
428
+ );
429
+ });
310
430
  });
@@ -112,7 +112,7 @@ export class PancakeswapV3
112
112
  // To receive revert reasons
113
113
  this.dexHelper.web3Provider.eth.handleRevert = false;
114
114
 
115
- // Normalize once all config addresses and use across all scenarios
115
+ // Normalise once all config addresses and use across all scenarios
116
116
  this.config = this._toLowerForAllConfigAddresses();
117
117
 
118
118
  this.notExistingPoolSetKey =
@@ -253,7 +253,7 @@ export class PancakeswapV3
253
253
  e,
254
254
  );
255
255
  } else {
256
- // on unknown error mark as failed and increase retryCount for retry init strategy
256
+ // on unkown error mark as failed and increase retryCount for retry init strategy
257
257
  // note: state would be null by default which allows to fallback
258
258
  this.logger.warn(
259
259
  `${this.dexKey}: Can not generate pool state for srcAddress=${srcAddress}, destAddress=${destAddress}, fee=${fee} pool fallback to rpc and retry every ${this.config.initRetryFrequency} times, initRetryAttemptCount=${pool.initRetryAttemptCount}`,
@@ -608,14 +608,14 @@ export class PancakeswapV3
608
608
  const balanceDestToken =
609
609
  _destAddress === pool.token0 ? state.balance0 : state.balance1;
610
610
 
611
- const unitResult = await this._getOutputs(
611
+ const unitResult = this._getOutputs(
612
612
  state,
613
613
  [unitAmount],
614
614
  zeroForOne,
615
615
  side,
616
616
  balanceDestToken,
617
617
  );
618
- const pricesResult = await this._getOutputs(
618
+ const pricesResult = this._getOutputs(
619
619
  state,
620
620
  _amounts,
621
621
  zeroForOne,
@@ -911,20 +911,20 @@ export class PancakeswapV3
911
911
  return newConfig;
912
912
  }
913
913
 
914
- private async _getOutputs(
914
+ private _getOutputs(
915
915
  state: DeepReadonly<PoolState>,
916
916
  amounts: bigint[],
917
917
  zeroForOne: boolean,
918
918
  side: SwapSide,
919
919
  destTokenBalance: bigint,
920
- ): Promise<OutputResult | null> {
920
+ ): OutputResult | null {
921
921
  try {
922
- const outputsResult = (await this.dexHelper.executeOnWorkerPool(
923
- this.network,
924
- this.dexKey,
925
- 'queryOutputs',
926
- [state, amounts, zeroForOne, side],
927
- )) as ReturnType<typeof pancakeswapV3Math.queryOutputs>;
922
+ const outputsResult = pancakeswapV3Math.queryOutputs(
923
+ state,
924
+ amounts,
925
+ zeroForOne,
926
+ side,
927
+ );
928
928
 
929
929
  if (side === SwapSide.SELL) {
930
930
  if (outputsResult.outputs[0] > destTokenBalance) {
@@ -83,6 +83,17 @@ export const SolidlyConfig: DexConfigMap<DexParams> = {
83
83
  feeCode: 0,
84
84
  },
85
85
  },
86
+ Aerodrome: {
87
+ [Network.BASE]: {
88
+ // There is no subgraph for Aerodrome
89
+ factoryAddress: '0x420DD381b31aEf6683db6B902084cB0FFECe40Da',
90
+ router: '0xDCf4EE5B700e2a5Fec458e06B763A4a3E3004494',
91
+ initCode:
92
+ '0x1a8f01f7eab324003d9388f229ea17991eee9c9d14586f429799f3656790eba0',
93
+ poolGasCost: 180 * 1000,
94
+ feeCode: 0,
95
+ },
96
+ },
86
97
  Cone: {
87
98
  [Network.BSC]: {
88
99
  subgraphURL: 'https://api.thegraph.com/subgraphs/name/cone-exchange/cone',
@@ -157,6 +168,15 @@ export const SolidlyConfig: DexConfigMap<DexParams> = {
157
168
  feeCode: 0,
158
169
  poolGasCost: 180 * 1000,
159
170
  },
171
+ [Network.BASE]: {
172
+ factoryAddress: '0xed8db60acc29e14bc867a497d94ca6e3ceb5ec04',
173
+ router: '0xDCf4EE5B700e2a5Fec458e06B763A4a3E3004494',
174
+ initCode:
175
+ '0x7ba31a081e879b8e7f06d4e8bf5ee26b5c2680669c5701f4cdbdcde51727b275',
176
+ feeCode: 0,
177
+ feeFactor: 1e18,
178
+ poolGasCost: 180 * 1000,
179
+ },
160
180
  },
161
181
  };
162
182
 
@@ -165,7 +185,7 @@ export const Adapters: Record<number, AdapterMappings> = {
165
185
  [SwapSide.SELL]: [{ name: 'PolygonAdapter02', index: 3 }], // dystopia
166
186
  },
167
187
  [Network.FANTOM]: {
168
- [SwapSide.SELL]: [{ name: 'FantomAdapter01', index: 10 }], // solidly + spiritSwapV2 + Equalizer
188
+ [SwapSide.SELL]: [{ name: 'FantomAdapter01', index: 10 }], // solidly, spiritSwapV2, equalizer
169
189
  },
170
190
  [Network.OPTIMISM]: {
171
191
  [SwapSide.SELL]: [{ name: 'OptimismAdapter01', index: 8 }], // velodrome
@@ -182,4 +202,7 @@ export const Adapters: Record<number, AdapterMappings> = {
182
202
  [Network.ARBITRUM]: {
183
203
  [SwapSide.SELL]: [{ name: 'ArbitrumAdapter02', index: 1 }], // chronos, ramses
184
204
  },
205
+ [Network.BASE]: {
206
+ [SwapSide.SELL]: [{ name: 'BaseAdapter01', index: 3 }], // aerodrome, equalizer
207
+ }
185
208
  };