@@ -14,6 +14,8 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
14
14
15
15
vm.prank (creator);
16
16
eulerSwapFactory = new EulerSwapFactory (address (evc), address (factory));
17
+
18
+ assertEq (eulerSwapFactory.EVC (), address (evc));
17
19
}
18
20
19
21
function testDeployPool () public {
@@ -157,11 +159,39 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
157
159
assertEq (pool, predictedAddress);
158
160
}
159
161
160
- function testInvalidPoolsSliceQuery () public {
162
+ function testInvalidPoolsSliceOutOfBounds () public {
161
163
vm.expectRevert (EulerSwapFactory.SliceOutOfBounds.selector );
162
164
eulerSwapFactory.poolsSlice (1 , 0 );
163
165
}
164
166
167
+ function testDeployWithInvalidVaultImplementation () public {
168
+ bytes32 salt = bytes32 (uint256 (1234 ));
169
+ IEulerSwap.Params memory poolParams =
170
+ IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 , 1e18 , 0 );
171
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
172
+
173
+ // Create a fake vault that's not deployed by the factory
174
+ address fakeVault = address (0x1234 );
175
+ poolParams.vault0 = fakeVault;
176
+ poolParams.vault1 = address (eTST2);
177
+
178
+ vm.prank (holder);
179
+ vm.expectRevert (EulerSwapFactory.InvalidVaultImplementation.selector );
180
+ eulerSwapFactory.deployPool (poolParams, curveParams, salt);
181
+ }
182
+
183
+ function testDeployWithUnauthorizedCaller () public {
184
+ bytes32 salt = bytes32 (uint256 (1234 ));
185
+ IEulerSwap.Params memory poolParams =
186
+ IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 , 1e18 , 0 );
187
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
188
+
189
+ // Call from a different address than the euler account
190
+ vm.prank (address (0x1234 ));
191
+ vm.expectRevert (EulerSwapFactory.Unauthorized.selector );
192
+ eulerSwapFactory.deployPool (poolParams, curveParams, salt);
193
+ }
194
+
165
195
function testDeployWithAssetsOutOfOrderOrEqual () public {
166
196
bytes32 salt = bytes32 (uint256 (1234 ));
167
197
IEulerSwap.Params memory poolParams =
@@ -184,6 +214,61 @@ contract EulerSwapFactoryTest is EulerSwapTestBase {
184
214
eulerSwapFactory.deployPool (poolParams, curveParams, salt);
185
215
}
186
216
217
+ function testPoolsByPair () public {
218
+ // First deploy a pool
219
+ bytes32 salt = bytes32 (uint256 (1234 ));
220
+ IEulerSwap.Params memory poolParams =
221
+ IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 , 1e18 , 0 );
222
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
223
+
224
+ address predictedAddress = predictPoolAddress (address (eulerSwapFactory), poolParams, curveParams, salt);
225
+
226
+ IEVC.BatchItem[] memory items = new IEVC.BatchItem [](2 );
227
+ items[0 ] = IEVC.BatchItem ({
228
+ onBehalfOfAccount: address (0 ),
229
+ targetContract: address (evc),
230
+ value: 0 ,
231
+ data: abi.encodeCall (evc.setAccountOperator, (holder, predictedAddress, true ))
232
+ });
233
+ items[1 ] = IEVC.BatchItem ({
234
+ onBehalfOfAccount: holder,
235
+ targetContract: address (eulerSwapFactory),
236
+ value: 0 ,
237
+ data: abi.encodeCall (EulerSwapFactory.deployPool, (poolParams, curveParams, salt))
238
+ });
239
+
240
+ vm.prank (holder);
241
+ evc.batch (items);
242
+
243
+ // Get the deployed pool and its assets
244
+ address pool = eulerSwapFactory.poolByHolder (holder);
245
+ address asset0 = EulerSwap (pool).asset0 ();
246
+ address asset1 = EulerSwap (pool).asset1 ();
247
+
248
+ // Test poolsByPairLength
249
+ assertEq (eulerSwapFactory.poolsByPairLength (asset0, asset1), 1 );
250
+
251
+ // Test poolsByPairSlice
252
+ address [] memory slice = eulerSwapFactory.poolsByPairSlice (asset0, asset1, 0 , 1 );
253
+ assertEq (slice.length , 1 );
254
+ assertEq (slice[0 ], predictedAddress);
255
+
256
+ // Test poolsByPair
257
+ address [] memory pools = eulerSwapFactory.poolsByPair (asset0, asset1);
258
+ assertEq (pools.length , 1 );
259
+ assertEq (pools[0 ], predictedAddress);
260
+ }
261
+
262
+ function testComputePoolAddress () public view {
263
+ bytes32 salt = bytes32 (uint256 (1234 ));
264
+ IEulerSwap.Params memory poolParams =
265
+ IEulerSwap.Params (address (eTST), address (eTST2), holder, 1e18 , 1e18 , 1e18 , 1e18 , 0 );
266
+ IEulerSwap.CurveParams memory curveParams = IEulerSwap.CurveParams (0.4e18 , 0.85e18 , 1e18 , 1e18 );
267
+
268
+ address predictedAddress = eulerSwapFactory.computePoolAddress (poolParams, curveParams, salt);
269
+ assertEq (predictedAddress, predictPoolAddress (address (eulerSwapFactory), poolParams, curveParams, salt));
270
+ }
271
+
187
272
function predictPoolAddress (
188
273
address factoryAddress ,
189
274
IEulerSwap.Params memory poolParams ,
0 commit comments