-
Notifications
You must be signed in to change notification settings - Fork 1
/
PreLiquidationFactory.sol
56 lines (41 loc) · 2.01 KB
/
PreLiquidationFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity 0.8.27;
import {IPreLiquidation, PreLiquidationParams} from "./interfaces/IPreLiquidation.sol";
import {IPreLiquidationFactory} from "./interfaces/IPreLiquidationFactory.sol";
import {IMorpho, Id} from "../lib/morpho-blue/src/interfaces/IMorpho.sol";
import {ErrorsLib} from "./libraries/ErrorsLib.sol";
import {EventsLib} from "./libraries/EventsLib.sol";
import {PreLiquidation} from "./PreLiquidation.sol";
/// @title PreLiquidationFactory
/// @author Morpho Labs
/// @custom:contact [email protected]
/// @notice A linear LIF and linear LCF pre-liquidation factory contract for Morpho.
contract PreLiquidationFactory is IPreLiquidationFactory {
/* IMMUTABLE */
/// @notice The address of the Morpho contract.
IMorpho public immutable MORPHO;
/* STORAGE */
/// @notice Mapping which returns true if the address is a PreLiquidation contract created by this factory.
mapping(address => bool) public isPreLiquidation;
/* CONSTRUCTOR */
/// @param morpho The address of the Morpho contract.
constructor(address morpho) {
require(morpho != address(0), ErrorsLib.ZeroAddress());
MORPHO = IMorpho(morpho);
}
/* EXTERNAL */
/// @notice Creates a PreLiquidation contract.
/// @param id The Morpho market for PreLiquidations.
/// @param preLiquidationParams The PreLiquidation params for the PreLiquidation contract.
/// @dev Warning: This function will revert without data if the pre-liquidation already exists.
function createPreLiquidation(Id id, PreLiquidationParams calldata preLiquidationParams)
external
returns (IPreLiquidation)
{
IPreLiquidation preLiquidation =
IPreLiquidation(address(new PreLiquidation{salt: 0}(address(MORPHO), id, preLiquidationParams)));
emit EventsLib.CreatePreLiquidation(address(preLiquidation), id, preLiquidationParams);
isPreLiquidation[address(preLiquidation)] = true;
return preLiquidation;
}
}