|
1 | 1 | // SPDX-License-Identifier: GPL-2.0-or-later
|
2 | 2 | pragma solidity ^0.8.24;
|
3 | 3 |
|
4 |
| -import {stdError} from "forge-std/Test.sol"; |
5 | 4 | import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
|
6 | 5 | import {PoolManagerDeployer} from "./utils/PoolManagerDeployer.sol";
|
7 | 6 | import {Hooks} from "@uniswap/v4-core/src/libraries/Hooks.sol";
|
@@ -249,56 +248,75 @@ contract FactoryTest is EulerSwapTestBase {
|
249 | 248 | EulerSwap(eulerSwapImpl).getReserves();
|
250 | 249 | }
|
251 | 250 |
|
252 |
| - |
253 |
| - |
254 | 251 | address alice = makeAddr("alice");
|
255 | 252 | address bob = makeAddr("bob");
|
256 | 253 |
|
257 | 254 | function test_multipleUninstalls() public {
|
258 |
| - // Parameters for deployPool() |
259 |
| - IEulerSwap.Params memory params = IEulerSwap.Params({ |
260 |
| - vault0: address(eTST), |
261 |
| - vault1: address(eTST2), |
262 |
| - eulerAccount: address(0), |
263 |
| - equilibriumReserve0: 1e18, |
264 |
| - equilibriumReserve1: 1e18, |
265 |
| - priceX: 1e18, |
266 |
| - priceY: 1e18, |
267 |
| - concentrationX: 0, |
268 |
| - concentrationY: 0, |
269 |
| - fee: 0, |
270 |
| - protocolFee: 0, |
271 |
| - protocolFeeRecipient: address(0) |
272 |
| - }); |
273 |
| - IEulerSwap.InitialState memory initialState = IEulerSwap.InitialState({ |
274 |
| - currReserve0: 1e18, |
275 |
| - currReserve1: 1e18 |
276 |
| - }); |
277 |
| - bytes32 salt = bytes32(0); |
| 255 | + (IEulerSwap.Params memory params, IEulerSwap.InitialState memory initialState) = getBasicParams(); |
278 | 256 |
|
279 | 257 | // Deploy pool for Alice
|
280 |
| - params.eulerAccount = alice; |
281 |
| - address alicePool = eulerSwapFactory.computePoolAddress(params, salt); |
| 258 | + params.eulerAccount = holder = alice; |
| 259 | + (address alicePool, bytes32 aliceSalt) = mineSalt(params); |
| 260 | + |
282 | 261 | vm.startPrank(alice);
|
283 | 262 | evc.setAccountOperator(alice, alicePool, true);
|
284 |
| - eulerSwapFactory.deployPool(params, initialState, salt); |
| 263 | + eulerSwapFactory.deployPool(params, initialState, aliceSalt); |
285 | 264 |
|
286 | 265 | // Deploy pool for Bob
|
287 |
| - params.eulerAccount = bob; |
288 |
| - address bobPool = eulerSwapFactory.computePoolAddress(params, salt); |
| 266 | + params.eulerAccount = holder = bob; |
| 267 | + (address bobPool, bytes32 bobSalt) = mineSalt(params); |
| 268 | + |
289 | 269 | vm.startPrank(bob);
|
290 | 270 | evc.setAccountOperator(bob, bobPool, true);
|
291 |
| - eulerSwapFactory.deployPool(params, initialState, salt); |
| 271 | + eulerSwapFactory.deployPool(params, initialState, bobSalt); |
| 272 | + |
| 273 | + { |
| 274 | + address[] memory ps = eulerSwapFactory.pools(); |
| 275 | + assertEq(ps.length, 2); |
| 276 | + assertEq(ps[0], alicePool); |
| 277 | + assertEq(ps[1], bobPool); |
| 278 | + } |
| 279 | + |
| 280 | + { |
| 281 | + (address asset0, address asset1) = EulerSwap(alicePool).getAssets(); |
| 282 | + address[] memory ps = eulerSwapFactory.poolsByPair(asset0, asset1); |
| 283 | + assertEq(ps.length, 2); |
| 284 | + assertEq(ps[0], alicePool); |
| 285 | + assertEq(ps[1], bobPool); |
| 286 | + } |
292 | 287 |
|
293 | 288 | // Uninstall pool for Alice
|
294 | 289 | vm.startPrank(alice);
|
295 | 290 | evc.setAccountOperator(alice, alicePool, false);
|
296 | 291 | eulerSwapFactory.uninstallPool();
|
297 | 292 |
|
| 293 | + { |
| 294 | + address[] memory ps = eulerSwapFactory.pools(); |
| 295 | + assertEq(ps.length, 1); |
| 296 | + assertEq(ps[0], bobPool); |
| 297 | + } |
| 298 | + |
| 299 | + { |
| 300 | + (address asset0, address asset1) = EulerSwap(alicePool).getAssets(); |
| 301 | + address[] memory ps = eulerSwapFactory.poolsByPair(asset0, asset1); |
| 302 | + assertEq(ps.length, 1); |
| 303 | + assertEq(ps[0], bobPool); |
| 304 | + } |
| 305 | + |
298 | 306 | // Uninstalling pool for Bob reverts due to an OOB access of the allPools array
|
299 | 307 | vm.startPrank(bob);
|
300 | 308 | evc.setAccountOperator(bob, bobPool, false);
|
301 |
| - vm.expectRevert(stdError.indexOOBError); |
302 | 309 | eulerSwapFactory.uninstallPool();
|
| 310 | + |
| 311 | + { |
| 312 | + address[] memory ps = eulerSwapFactory.pools(); |
| 313 | + assertEq(ps.length, 0); |
| 314 | + } |
| 315 | + |
| 316 | + { |
| 317 | + (address asset0, address asset1) = EulerSwap(alicePool).getAssets(); |
| 318 | + address[] memory ps = eulerSwapFactory.poolsByPair(asset0, asset1); |
| 319 | + assertEq(ps.length, 0); |
| 320 | + } |
303 | 321 | }
|
304 | 322 | }
|
0 commit comments