1
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
2
pragma solidity ^ 0.8.24 ;
3
3
4
- import {EulerSwapTestBase, EulerSwap} from "./EulerSwapTestBase.t.sol " ;
4
+ import {EulerSwapTestBase, IEulerSwap, IEVC, EulerSwap} from "./EulerSwapTestBase.t.sol " ;
5
5
import {EulerSwapFactory, IEulerSwapFactory} from "../src/EulerSwapFactory.sol " ;
6
6
7
7
contract EulerSwapFactoryTest is EulerSwapTestBase {
@@ -13,53 +13,57 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
13
13
super .setUp ();
14
14
15
15
vm.prank (creator);
16
- eulerSwapFactory = new EulerSwapFactory ();
16
+ eulerSwapFactory = new EulerSwapFactory (address (evc) );
17
17
}
18
18
19
19
function testDeployPool () public {
20
20
uint256 allPoolsLengthBefore = eulerSwapFactory.allPoolsLength ();
21
21
22
- vm.prank (creator);
23
- EulerSwap eulerSwap = EulerSwap (
24
- eulerSwapFactory.deployPool (
25
- IEulerSwapFactory.DeployParams (
26
- address (eTST), address (eTST2), holder, 0 , 1e18 , 1e18 , 0.4e18 , 0.85e18 , 50e18 , 50e18
27
- )
28
- )
29
- );
22
+ bytes32 salt = bytes32 (uint256 (1234 ));
23
+ IEulerSwap.Params memory poolParams = IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 0 );
24
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
30
25
31
- uint256 allPoolsLengthAfter = eulerSwapFactory.allPoolsLength ();
32
- bytes32 poolKey = keccak256 (
33
- abi.encode (
34
- eulerSwap.asset0 (),
35
- eulerSwap.asset1 (),
36
- eulerSwap.vault0 (),
37
- eulerSwap.vault1 (),
38
- eulerSwap.myAccount (),
39
- eulerSwap.feeMultiplier (),
40
- eulerSwap.priceX (),
41
- eulerSwap.priceY (),
42
- eulerSwap.concentrationX (),
43
- eulerSwap.concentrationY ()
44
- )
45
- );
26
+ address predictedAddress = predictPoolAddress (address (eulerSwapFactory), poolParams, curveParams, salt);
46
27
28
+ IEVC.BatchItem[] memory items = new IEVC.BatchItem [](2 );
29
+
30
+ items[0 ] = IEVC.BatchItem ({
31
+ onBehalfOfAccount: address (0 ),
32
+ targetContract: address (evc),
33
+ value: 0 ,
34
+ data: abi.encodeCall (evc.setAccountOperator, (holder, predictedAddress, true ))
35
+ });
36
+ items[1 ] = IEVC.BatchItem ({
37
+ onBehalfOfAccount: holder,
38
+ targetContract: address (eulerSwapFactory),
39
+ value: 0 ,
40
+ data: abi.encodeCall (EulerSwapFactory.deployPool, (poolParams, curveParams, salt))
41
+ });
42
+
43
+ vm.prank (holder);
44
+ evc.batch (items);
45
+
46
+ EulerSwap eulerSwap = EulerSwap (eulerSwapFactory.swapAccountToPool (holder));
47
+
48
+ uint256 allPoolsLengthAfter = eulerSwapFactory.allPoolsLength ();
47
49
assertEq (allPoolsLengthAfter - allPoolsLengthBefore, 1 );
48
- assertEq (eulerSwapFactory.getPool (poolKey), address (eulerSwap));
49
- assertEq (eulerSwapFactory.getPool (poolKey), address (eulerSwap));
50
50
51
51
address [] memory poolsList = eulerSwapFactory.getAllPoolsListSlice (0 , type (uint256 ).max);
52
52
assertEq (poolsList.length , 1 );
53
53
assertEq (poolsList[0 ], address (eulerSwap));
54
54
assertEq (eulerSwapFactory.allPools (0 ), address (eulerSwap));
55
55
56
- vm.prank (creator);
57
- vm.expectRevert (EulerSwapFactory.AlreadyDeployed.selector );
58
- eulerSwapFactory.deployPool (
59
- IEulerSwapFactory.DeployParams (
60
- address (eTST), address (eTST2), holder, 0 , 1e18 , 1e18 , 0.4e18 , 0.85e18 , 50e18 , 50e18
61
- )
62
- );
56
+ items = new IEVC.BatchItem [](1 );
57
+ items[0 ] = IEVC.BatchItem ({
58
+ onBehalfOfAccount: holder,
59
+ targetContract: address (eulerSwapFactory),
60
+ value: 0 ,
61
+ data: abi.encodeCall (EulerSwapFactory.deployPool, (poolParams, curveParams, bytes32 (uint256 (12345 ))))
62
+ });
63
+
64
+ vm.prank (holder);
65
+ vm.expectRevert (EulerSwapFactory.OldOperatorStillInstalled.selector );
66
+ evc.batch (items);
63
67
}
64
68
65
69
function testInvalidGetAllPoolsListSliceQuery () public {
@@ -68,21 +72,45 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
68
72
}
69
73
70
74
function testDeployWithAssetsOutOfOrderOrEqual () public {
71
- vm.prank (creator);
75
+ bytes32 salt = bytes32 (uint256 (1234 ));
76
+ IEulerSwap.Params memory poolParams = IEulerSwap.Params (address (eTST), address (eTST), holder, 1e18 , 1e18 , 0 );
77
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
78
+
79
+ vm.prank (holder);
72
80
vm.expectRevert (EulerSwap.AssetsOutOfOrderOrEqual.selector );
73
- eulerSwapFactory.deployPool (
74
- IEulerSwapFactory.DeployParams (
75
- address (eTST), address (eTST), holder, 0 , 1e18 , 1e18 , 0.4e18 , 0.85e18 , 50e18 , 50e18
76
- )
77
- );
81
+ eulerSwapFactory.deployPool (poolParams, curveParams, salt);
78
82
}
79
83
80
84
function testDeployWithBadFee () public {
81
- vm.prank (creator);
85
+ bytes32 salt = bytes32 (uint256 (1234 ));
86
+ IEulerSwap.Params memory poolParams = IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 );
87
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
88
+
89
+ vm.prank (holder);
82
90
vm.expectRevert (EulerSwap.BadParam.selector );
83
- eulerSwapFactory.deployPool (
84
- IEulerSwapFactory.DeployParams (
85
- address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 , 0.4e18 , 0.85e18 , 50e18 , 50e18
91
+ eulerSwapFactory.deployPool (poolParams, curveParams, salt);
92
+ }
93
+
94
+ function predictPoolAddress (
95
+ address factoryAddress ,
96
+ IEulerSwap.Params memory poolParams ,
97
+ IEulerSwap.CurveParams memory curveParams ,
98
+ bytes32 salt
99
+ ) internal pure returns (address ) {
100
+ return address (
101
+ uint160 (
102
+ uint256 (
103
+ keccak256 (
104
+ abi.encodePacked (
105
+ bytes1 (0xff ),
106
+ factoryAddress,
107
+ keccak256 (abi.encode (address (poolParams.myAccount), salt)),
108
+ keccak256 (
109
+ abi.encodePacked (type (EulerSwap).creationCode, abi.encode (poolParams, curveParams))
110
+ )
111
+ )
112
+ )
113
+ )
86
114
)
87
115
);
88
116
}
0 commit comments