22pragma solidity 0.8.34 ;
33import { AccessControlEnumerableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol " ;
44import { UUPSUpgradeable } from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol " ;
5+ import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol " ;
56import { MarketParams, Id, IMoolah } from "moolah/interfaces/IMoolah.sol " ;
67import { MarketParamsLib } from "moolah/libraries/MarketParamsLib.sol " ;
78import { ILiquidator } from "liquidator/ILiquidator.sol " ;
@@ -14,7 +15,7 @@ import { IBroker } from "../broker/interfaces/IBroker.sol";
1415import { IBrokerLiquidator } from "../liquidator/IBrokerLiquidator.sol " ;
1516import { IRateCalculator } from "../broker/interfaces/IRateCalculator.sol " ;
1617
17- contract MarketFactory is UUPSUpgradeable , AccessControlEnumerableUpgradeable {
18+ contract MarketFactory is UUPSUpgradeable , AccessControlEnumerableUpgradeable , PausableUpgradeable {
1819 using MarketParamsLib for MarketParams;
1920
2021 struct FixedTermMarketParams {
@@ -42,7 +43,6 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
4243
4344 bytes32 public constant OPERATOR = keccak256 ("OPERATOR " );
4445 bytes32 public constant PAUSER = keccak256 ("PAUSER " );
45- bytes32 public constant BOT = keccak256 ("BOT " );
4646
4747 event BrokerMarketDeployed (FixedTermMarketParams fixedTermMarketParams , Id marketId , address broker );
4848 event CommonMarketDeployed (MarketParams marketParams , Id marketId );
@@ -110,13 +110,15 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
110110 * @param admin The address of the admin role
111111 * @param operator The address of the operator role
112112 */
113- function initialize (address admin , address operator ) public initializer {
113+ function initialize (address admin , address operator , address pauser ) public initializer {
114114 require (admin != address (0 ), "ZeroAddress " );
115115 require (operator != address (0 ), "ZeroAddress " );
116+ require (pauser != address (0 ), "ZeroAddress " );
116117 __AccessControl_init ();
117118
118119 _grantRole (DEFAULT_ADMIN_ROLE, admin);
119120 _grantRole (OPERATOR, operator);
121+ _grantRole (PAUSER, pauser);
120122 }
121123
122124 /**
@@ -134,6 +136,7 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
134136 bool [] calldata liquidatorMarketWhitelist ,
135137 bool [] calldata liquidatorSmartProviders
136138 ) external onlyRole (OPERATOR) {
139+ require (params.length > 0 , "empty market params " );
137140 require (
138141 params.length == liquidatorWhitelist.length &&
139142 params.length == supplyWhitelist.length &&
@@ -201,12 +204,8 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
201204 address [] memory supplyWhitelist ,
202205 bool liquidatorMarketWhitelist ,
203206 bool liquidatorSmartProvider
204- ) private {
207+ ) private whenNotPaused {
205208 Id id = param.id ();
206- MarketParams memory p = moolah.idToMarketParams (id);
207- if (p.loanToken != address (0 )) {
208- revert ("Market already exists " );
209- }
210209 // moolah create market
211210 moolah.createMarket (param);
212211 // moolah set liquidation whitelist
@@ -265,7 +264,7 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
265264 emit CommonMarketDeployed (param, id);
266265 }
267266
268- function _createFixedTermMarket (FixedTermMarketParams memory param ) private returns (Id id ) {
267+ function _createFixedTermMarket (FixedTermMarketParams memory param ) private whenNotPaused returns (Id) {
269268 IBroker broker = IBroker (param.broker);
270269 require (param.broker != address (0 ), "Zero broker address " );
271270
@@ -347,5 +346,19 @@ contract MarketFactory is UUPSUpgradeable, AccessControlEnumerableUpgradeable {
347346 }
348347 }
349348
349+ /**
350+ * @dev pause contract
351+ */
352+ function pause () external onlyRole (PAUSER) {
353+ _pause ();
354+ }
355+
356+ /**
357+ * @dev unpause contract
358+ */
359+ function unpause () external onlyRole (OPERATOR) {
360+ _unpause ();
361+ }
362+
350363 function _authorizeUpgrade (address newImplementation ) internal override onlyRole (DEFAULT_ADMIN_ROLE) {}
351364}
0 commit comments