@paraswap/dex-lib 2.31.4 → 2.31.6-sushi-v3

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 (165) 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/curve-v1/StableSwapFRXETH.json +889 -0
  9. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  10. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  11. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  12. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
  13. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
  14. package/build/abi/wBETH.json +1527 -0
  15. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  16. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  17. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  18. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  19. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  20. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  21. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  22. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  23. package/build/dex/balancer-v2/LinearMath.d.ts +19 -0
  24. package/build/dex/balancer-v2/LinearMath.js +179 -0
  25. package/build/dex/balancer-v2/LinearMath.js.map +1 -0
  26. package/build/dex/balancer-v2/LinearPool.d.ts +47 -0
  27. package/build/dex/balancer-v2/LinearPool.js +324 -0
  28. package/build/dex/balancer-v2/LinearPool.js.map +1 -0
  29. package/build/dex/balancer-v2/PhantomStablePool.d.ts +47 -0
  30. package/build/dex/balancer-v2/PhantomStablePool.js +294 -0
  31. package/build/dex/balancer-v2/PhantomStablePool.js.map +1 -0
  32. package/build/dex/balancer-v2/StableMath.d.ts +9 -0
  33. package/build/dex/balancer-v2/StableMath.js +272 -0
  34. package/build/dex/balancer-v2/StableMath.js.map +1 -0
  35. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +75 -0
  36. package/build/dex/balancer-v2/balancer-v2-pool.js +417 -0
  37. package/build/dex/balancer-v2/balancer-v2-pool.js.map +1 -0
  38. package/build/dex/balancer-v2/balancer-v2.js +61 -15
  39. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  40. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  41. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  42. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  43. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  44. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  45. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  46. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  47. package/build/dex/pancakeswap-v3/types.js +3 -0
  48. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  49. package/build/dex/quickswap-v3.d.ts +21 -0
  50. package/build/dex/quickswap-v3.js +40 -0
  51. package/build/dex/quickswap-v3.js.map +1 -0
  52. package/build/dex/ramses-v2/config.d.ts +4 -0
  53. package/build/dex/ramses-v2/config.js +28 -0
  54. package/build/dex/ramses-v2/config.js.map +1 -0
  55. package/build/dex/ramses-v2/constants.d.ts +28 -0
  56. package/build/dex/ramses-v2/constants.js +35 -0
  57. package/build/dex/ramses-v2/constants.js.map +1 -0
  58. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  59. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  60. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  61. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  62. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  63. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  64. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  65. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  66. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  67. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  68. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  69. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  70. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  71. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  72. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  73. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  74. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  75. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  76. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  77. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  78. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  79. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  80. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  81. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  82. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  83. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  84. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  85. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  86. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  87. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  88. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  89. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  90. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  91. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  92. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  93. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  94. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  95. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  96. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  97. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  98. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  99. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  100. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  101. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  102. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  103. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  104. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  105. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  106. package/build/dex/ramses-v2/types.d.ts +154 -0
  107. package/build/dex/ramses-v2/types.js +9 -0
  108. package/build/dex/ramses-v2/types.js.map +1 -0
  109. package/build/dex/ramses-v2/utils.d.ts +6 -0
  110. package/build/dex/ramses-v2/utils.js +71 -0
  111. package/build/dex/ramses-v2/utils.js.map +1 -0
  112. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  113. package/build/dex/sushiswap-v3/config.js +132 -0
  114. package/build/dex/sushiswap-v3/config.js.map +1 -0
  115. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  116. package/build/dex/sushiswap-v3/constants.js +32 -0
  117. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  118. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  119. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  120. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  121. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  122. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  123. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  124. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  125. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  126. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  127. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  128. package/build/dex/sushiswap-v3/token.js +23 -0
  129. package/build/dex/sushiswap-v3/token.js.map +1 -0
  130. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  131. package/build/dex/sushiswap-v3/types.js +18 -0
  132. package/build/dex/sushiswap-v3/types.js.map +1 -0
  133. package/build/dex/uniswap-v3/config.js +86 -0
  134. package/build/dex/uniswap-v3/config.js.map +1 -1
  135. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  136. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  137. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  138. package/build/dex/uniswap-v3/uniswap-v3.js +1 -1
  139. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  140. package/build/dex/woo-fi/config.d.ts +4 -0
  141. package/build/dex/woo-fi/config.js +141 -0
  142. package/build/dex/woo-fi/config.js.map +1 -0
  143. package/build/dex/woo-fi/constants.d.ts +5 -0
  144. package/build/dex/woo-fi/constants.js +20 -0
  145. package/build/dex/woo-fi/constants.js.map +1 -0
  146. package/build/dex/woo-fi/types.d.ts +48 -0
  147. package/build/dex/woo-fi/types.js +3 -0
  148. package/build/dex/woo-fi/types.js.map +1 -0
  149. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  150. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  151. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  152. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  153. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  154. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  155. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  156. package/build/dex/woo-fi/woo-fi.js +480 -0
  157. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  158. package/package.json +1 -1
  159. package/src/dex/balancer-v2/balancer-v2.ts +68 -15
  160. package/src/dex/generic-rfq/example-api.test.ts +1 -1
  161. package/src/dex/uniswap-v3/config.ts +91 -0
  162. package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +404 -0
  163. package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +222 -0
  164. package/src/dex/uniswap-v3/uniswap-v3.ts +1 -1
  165. package/tests/constants-e2e.ts +1 -1
@@ -107,6 +107,97 @@ export const UniswapV3Config: DexConfigMap<DexParams> = {
107
107
  'https://api.thegraph.com/subgraphs/name/lynnshaoyu/uniswap-v3-avax',
108
108
  },
109
109
  },
110
+ SushiSwapV3: {
111
+ [Network.MAINNET]: {
112
+ factory: '0xbACEB8eC6b9355Dfc0269C18bac9d6E2Bdc29C4F',
113
+ quoter: '0x64e8802FE490fa7cc61d3463958199161Bb608A7',
114
+ router: '0x00F23572b16c5e9e58e7b965DEF51Ff8Ff546E34',
115
+ supportedFees: SUPPORTED_FEES,
116
+ stateMulticall: '0x9c764D2e92dA68E4CDfD784B902283A095ff8b63',
117
+ uniswapMulticall: '0x1F98415757620B543A52E61c46B32eB19261F984',
118
+ chunksCount: 10,
119
+ initRetryFrequency: 10,
120
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
121
+ subgraphURL:
122
+ 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-ethereum',
123
+ },
124
+ [Network.POLYGON]: {
125
+ factory: '0x917933899c6a5f8e37f31e19f92cdbff7e8ff0e2',
126
+ quoter: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
127
+ router: '0x34D41cE301257a4615D4F5AD260FA91D03925243',
128
+ supportedFees: SUPPORTED_FEES,
129
+ stateMulticall: '0x6Dc993Fe1e945A640576B4Dca81281d8e998DF71',
130
+ uniswapMulticall: '0x1F98415757620B543A52E61c46B32eB19261F984',
131
+ chunksCount: 10,
132
+ initRetryFrequency: 10,
133
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
134
+ subgraphURL:
135
+ 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-polygon',
136
+ },
137
+ [Network.BSC]: {
138
+ factory: '0x126555dd55a39328F69400d6aE4F782Bd4C34ABb',
139
+ quoter: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
140
+ router: '0xDCf4EE5B700e2a5Fec458e06B763A4a3E3004494',
141
+ supportedFees: SUPPORTED_FEES,
142
+ stateMulticall: '0x593F39A4Ba26A9c8ed2128ac95D109E8e403C485',
143
+ uniswapMulticall: '0x963Df249eD09c358A4819E39d9Cd5736c3087184',
144
+ chunksCount: 10,
145
+ initRetryFrequency: 10,
146
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
147
+ subgraphURL: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-bsc',
148
+ },
149
+ [Network.AVALANCHE]: {
150
+ factory: '0x3e603C14aF37EBdaD31709C4f848Fc6aD5BEc715',
151
+ quoter: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
152
+ router: '0x24c90C7d8fb463722e304A71255341610Fa7589b',
153
+ supportedFees: SUPPORTED_FEES,
154
+ stateMulticall: '',
155
+ uniswapMulticall: '0x8C0F842791F03C095b6c633759224FcC9ACe68ea',
156
+ chunksCount: 10,
157
+ initRetryFrequency: 10,
158
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
159
+ subgraphURL:
160
+ 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-avalanche',
161
+ },
162
+ [Network.FANTOM]: {
163
+ factory: '0x7770978eED668a3ba661d51a773d3a992Fc9DDCB',
164
+ quoter: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
165
+ router: '0xDCf4EE5B700e2a5Fec458e06B763A4a3E3004494',
166
+ supportedFees: SUPPORTED_FEES,
167
+ stateMulticall: '0x30F6B9b6485ff0B67E881f5ac80D3F1c70A4B23d',
168
+ uniswapMulticall: '0xB1395e098c0a847CC719Bcf1Fc8114421a9F8232',
169
+ chunksCount: 10,
170
+ initRetryFrequency: 10,
171
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
172
+ subgraphURL: 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-fantom',
173
+ },
174
+ [Network.ARBITRUM]: {
175
+ factory: '0x1af415a1eba07a4986a52b6f2e7de7003d82231e',
176
+ quoter: '0x0524E833cCD057e4d7A296e3aaAb9f7675964Ce1',
177
+ router: '0xbDa4176fD98b47018aF673805d069b9dbd49373D',
178
+ supportedFees: SUPPORTED_FEES,
179
+ stateMulticall: '0xaBB58098A7B5172A9b0B38a1925A522dbf0b4FC3',
180
+ uniswapMulticall: '0x1F98415757620B543A52E61c46B32eB19261F984',
181
+ chunksCount: 10,
182
+ initRetryFrequency: 10,
183
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
184
+ subgraphURL:
185
+ 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-arbitrum',
186
+ },
187
+ [Network.OPTIMISM]: {
188
+ factory: '0x9c6522117e2ed1fE5bdb72bb0eD5E3f2bdE7DBe0',
189
+ quoter: '0xb1E835Dc2785b52265711e17fCCb0fd018226a6e',
190
+ router: '0xa05d8C3F278fC7b20b39Ea7A3035E3aD8D808c78',
191
+ supportedFees: SUPPORTED_FEES,
192
+ stateMulticall: '0x4FF0dEC5f9a763Aa1E5C2a962aa6f4eDFeE4f9eA',
193
+ uniswapMulticall: '0x1F98415757620B543A52E61c46B32eB19261F984',
194
+ chunksCount: 10,
195
+ initRetryFrequency: 10,
196
+ initHash: `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`,
197
+ subgraphURL:
198
+ 'https://api.thegraph.com/subgraphs/name/sushi-v3/v3-optimism',
199
+ },
200
+ },
110
201
  ChronosV3: {
111
202
  [Network.ARBITRUM]: {
112
203
  factory: '0x4Db9D624F67E00dbF8ef7AE0e0e8eE54aF1dee49',
@@ -11,7 +11,110 @@ 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
+ ContractMethod.directUniV3Swap,
40
+ ],
41
+ ],
42
+ [
43
+ SwapSide.BUY,
44
+ [
45
+ ContractMethod.simpleBuy,
46
+ ContractMethod.buy,
47
+ ContractMethod.directUniV3Buy,
48
+ ],
49
+ ],
50
+ ]);
51
+
52
+ describe(`${network}`, () => {
53
+ sideToContractMethods.forEach((contractMethods, side) =>
54
+ describe(`${side}`, () => {
55
+ contractMethods.forEach((contractMethod: ContractMethod) => {
56
+ describe(`${contractMethod}`, () => {
57
+ it(`${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
58
+ await testE2E(
59
+ tokens[nativeTokenSymbol],
60
+ tokens[tokenASymbol],
61
+ holders[nativeTokenSymbol],
62
+ side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
63
+ side,
64
+ dexKey,
65
+ contractMethod,
66
+ network,
67
+ provider,
68
+ undefined,
69
+ undefined,
70
+ undefined,
71
+ slippage,
72
+ );
73
+ });
74
+ it(`${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
75
+ await testE2E(
76
+ tokens[tokenASymbol],
77
+ tokens[nativeTokenSymbol],
78
+ holders[tokenASymbol],
79
+ side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
80
+ side,
81
+ dexKey,
82
+ contractMethod,
83
+ network,
84
+ provider,
85
+ undefined,
86
+ undefined,
87
+ undefined,
88
+ slippage,
89
+ );
90
+ });
91
+ it(`${tokenASymbol} -> ${tokenBSymbol}`, async () => {
92
+ await testE2E(
93
+ tokens[tokenASymbol],
94
+ tokens[tokenBSymbol],
95
+ holders[tokenASymbol],
96
+ side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
97
+ side,
98
+ dexKey,
99
+ contractMethod,
100
+ network,
101
+ provider,
102
+ undefined,
103
+ undefined,
104
+ undefined,
105
+ slippage,
106
+ );
107
+ });
108
+ });
109
+ });
110
+ }),
111
+ );
112
+ });
113
+ }
114
+
115
+
14
116
  describe('UniswapV3 E2E', () => {
117
+
15
118
  describe('UniswapV3', () => {
16
119
  const dexKey = 'UniswapV3';
17
120
 
@@ -592,4 +695,305 @@ describe('UniswapV3 E2E', () => {
592
695
  );
593
696
  });
594
697
  });
698
+
699
+ describe('SushiSwapV3 E2E', () => {
700
+ const dexKey = 'SushiSwapV3';
701
+
702
+ describe('MAINNET', () => {
703
+ const network = Network.MAINNET;
704
+
705
+ const tokenASymbol: string = 'USDC';
706
+ const tokenBSymbol: string = 'USDT';
707
+
708
+ const tokenAAmount: string = '111110000';
709
+ const tokenBAmount: string = '1100000000';
710
+ const nativeTokenAmount = '11000000000000000';
711
+
712
+ testForNetwork(
713
+ network,
714
+ dexKey,
715
+ tokenASymbol,
716
+ tokenBSymbol,
717
+ tokenAAmount,
718
+ tokenBAmount,
719
+ nativeTokenAmount,
720
+ );
721
+ });
722
+
723
+ describe('ARBITRUM', () => {
724
+ const network = Network.ARBITRUM;
725
+
726
+ const tokenASymbol: string = 'USDC';
727
+ const tokenBSymbol: string = 'USDCe';
728
+
729
+ const tokenAAmount: string = '10000000';
730
+ const tokenBAmount: string = '10000000';
731
+ const nativeTokenAmount = '900000000000000';
732
+
733
+ testForNetwork(
734
+ network,
735
+ dexKey,
736
+ tokenASymbol,
737
+ tokenBSymbol,
738
+ tokenAAmount,
739
+ tokenBAmount,
740
+ nativeTokenAmount,
741
+ );
742
+ });
743
+
744
+ describe('POLYGON', () => {
745
+ const network = Network.POLYGON;
746
+
747
+ const tokenASymbol: string = 'USDC';
748
+ const tokenBSymbol: string = 'USDT';
749
+
750
+ const tokenAAmount: string = '21111000';
751
+ const tokenBAmount: string = '200000000';
752
+ const nativeTokenAmount = '110000000000000000';
753
+
754
+ testForNetwork(
755
+ network,
756
+ dexKey,
757
+ tokenASymbol,
758
+ tokenBSymbol,
759
+ tokenAAmount,
760
+ tokenBAmount,
761
+ nativeTokenAmount,
762
+ );
763
+ });
764
+
765
+ describe('BSC', () => {
766
+ const network = Network.BSC;
767
+ const tokens = Tokens[network];
768
+ const holders = Holders[network];
769
+ const provider = new StaticJsonRpcProvider(
770
+ generateConfig(network).privateHttpProvider,
771
+ network,
772
+ );
773
+
774
+ const sideToContractMethods = new Map([
775
+ [
776
+ SwapSide.SELL,
777
+ [
778
+ ContractMethod.simpleSwap,
779
+ ContractMethod.multiSwap,
780
+ ContractMethod.megaSwap,
781
+ ContractMethod.directUniV3Swap,
782
+ ],
783
+ ],
784
+ [
785
+ SwapSide.BUY,
786
+ [
787
+ ContractMethod.simpleBuy,
788
+ ContractMethod.buy,
789
+ ContractMethod.directUniV3Buy,
790
+ ],
791
+ ],
792
+ ]);
793
+
794
+ const pairs: { name: string; sellAmount: string; buyAmount: string }[][] = [
795
+ [
796
+ {
797
+ name: 'USDC',
798
+ sellAmount: '100000000000000000000',
799
+ buyAmount: '100000000000000000000',
800
+ },
801
+ {
802
+ name: 'USDT',
803
+ sellAmount: '100000000000000000000',
804
+ buyAmount: '100000000000000000000',
805
+ },
806
+ ],
807
+ [
808
+ {
809
+ name: 'BNB',
810
+ sellAmount: '1000000000000000000',
811
+ buyAmount: '10000000000000000000',
812
+ },
813
+ {
814
+ name: 'USDT',
815
+ sellAmount: '1000000000000000000000',
816
+ buyAmount: '20000000000000000',
817
+ },
818
+ ],
819
+ ];
820
+
821
+ sideToContractMethods.forEach((contractMethods, side) =>
822
+ describe(`${side}`, () => {
823
+ contractMethods.forEach((contractMethod: ContractMethod) => {
824
+ pairs.forEach(pair => {
825
+ describe(`${contractMethod}`, () => {
826
+ it(`${pair[0].name} -> ${pair[1].name}`, async () => {
827
+ await testE2E(
828
+ tokens[pair[0].name],
829
+ tokens[pair[1].name],
830
+ holders[pair[0].name],
831
+ side === SwapSide.SELL
832
+ ? pair[0].sellAmount
833
+ : pair[0].buyAmount,
834
+ side,
835
+ dexKey,
836
+ contractMethod,
837
+ network,
838
+ provider,
839
+ );
840
+ });
841
+ it(`${pair[1].name} -> ${pair[0].name}`, async () => {
842
+ await testE2E(
843
+ tokens[pair[1].name],
844
+ tokens[pair[0].name],
845
+ holders[pair[1].name],
846
+ side === SwapSide.SELL
847
+ ? pair[1].sellAmount
848
+ : pair[1].buyAmount,
849
+ side,
850
+ dexKey,
851
+ contractMethod,
852
+ network,
853
+ provider,
854
+ );
855
+ });
856
+ });
857
+ });
858
+ });
859
+ }),
860
+ );
861
+ });
862
+
863
+ describe('AVALANCHE', () => {
864
+ const network = Network.AVALANCHE;
865
+
866
+ const tokenASymbol: string = 'USDT';
867
+ const tokenBSymbol: string = 'USDC';
868
+
869
+ const tokenAAmount: string = '111110';
870
+ const tokenBAmount: string = '100000';
871
+ const nativeTokenAmount = '11000000000000000';
872
+
873
+ testForNetwork(
874
+ network,
875
+ dexKey,
876
+ tokenASymbol,
877
+ tokenBSymbol,
878
+ tokenAAmount,
879
+ tokenBAmount,
880
+ nativeTokenAmount,
881
+ );
882
+ });
883
+
884
+ describe('FANTOM', () => {
885
+ const network = Network.FANTOM;
886
+ const tokens = Tokens[network];
887
+ const holders = Holders[network];
888
+ const provider = new StaticJsonRpcProvider(
889
+ generateConfig(network).privateHttpProvider,
890
+ network,
891
+ );
892
+
893
+ const sideToContractMethods = new Map([
894
+ [
895
+ SwapSide.SELL,
896
+ [
897
+ ContractMethod.simpleSwap,
898
+ ContractMethod.multiSwap,
899
+ ContractMethod.megaSwap,
900
+ ContractMethod.directUniV3Swap,
901
+ ],
902
+ ],
903
+ [
904
+ SwapSide.BUY,
905
+ [
906
+ ContractMethod.simpleBuy,
907
+ ContractMethod.buy,
908
+ ContractMethod.directUniV3Buy,
909
+ ],
910
+ ],
911
+ ]);
912
+
913
+ const pairs: { name: string; sellAmount: string; buyAmount: string }[][] = [
914
+ [
915
+ {
916
+ name: 'FTM',
917
+ sellAmount: '100000000000000000',
918
+ buyAmount: '100000000',
919
+ },
920
+ {
921
+ name: 'USDC',
922
+ sellAmount: '100000000',
923
+ buyAmount: '100000000000000000',
924
+ },
925
+ ],
926
+ [
927
+ {
928
+ name: 'WFTM',
929
+ sellAmount: '100000000000000',
930
+ buyAmount: '1000000000000000',
931
+ },
932
+ { name: 'WETH', sellAmount: '1000000000000000', buyAmount: '100000000000000' },
933
+ ],
934
+ ];
935
+
936
+ sideToContractMethods.forEach((contractMethods, side) =>
937
+ describe(`${side}`, () => {
938
+ contractMethods.forEach((contractMethod: ContractMethod) => {
939
+ pairs.forEach(pair => {
940
+ describe(`${contractMethod}`, () => {
941
+ it(`${pair[0].name} -> ${pair[1].name}`, async () => {
942
+ await testE2E(
943
+ tokens[pair[0].name],
944
+ tokens[pair[1].name],
945
+ holders[pair[0].name],
946
+ side === SwapSide.SELL
947
+ ? pair[0].sellAmount
948
+ : pair[0].buyAmount,
949
+ side,
950
+ dexKey,
951
+ contractMethod,
952
+ network,
953
+ provider,
954
+ );
955
+ });
956
+ it(`${pair[1].name} -> ${pair[0].name}`, async () => {
957
+ await testE2E(
958
+ tokens[pair[1].name],
959
+ tokens[pair[0].name],
960
+ holders[pair[1].name],
961
+ side === SwapSide.SELL
962
+ ? pair[1].sellAmount
963
+ : pair[1].buyAmount,
964
+ side,
965
+ dexKey,
966
+ contractMethod,
967
+ network,
968
+ provider,
969
+ );
970
+ });
971
+ });
972
+ });
973
+ });
974
+ }),
975
+ );
976
+ });
977
+
978
+ describe('OPTIMISM', () => {
979
+ const network = Network.OPTIMISM;
980
+
981
+ const tokenASymbol: string = 'USDC';
982
+ const tokenBSymbol: string = 'USDT';
983
+
984
+ const tokenAAmount: string = '111110000';
985
+ const tokenBAmount: string = '10000000';
986
+ const nativeTokenAmount = '11000000000000000';
987
+
988
+ testForNetwork(
989
+ network,
990
+ dexKey,
991
+ tokenASymbol,
992
+ tokenBSymbol,
993
+ tokenAAmount,
994
+ tokenBAmount,
995
+ nativeTokenAmount,
996
+ );
997
+ });
998
+ });
595
999
  });