Skip to content

Commit 26eca2a

Browse files
committed
fix: audit issues
1 parent 2351642 commit 26eca2a

2 files changed

Lines changed: 23 additions & 10 deletions

File tree

src/moolah/MarketFactory.sol

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
pragma solidity 0.8.34;
33
import { AccessControlEnumerableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/extensions/AccessControlEnumerableUpgradeable.sol";
44
import { UUPSUpgradeable } from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
5+
import { PausableUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
56
import { MarketParams, Id, IMoolah } from "moolah/interfaces/IMoolah.sol";
67
import { MarketParamsLib } from "moolah/libraries/MarketParamsLib.sol";
78
import { ILiquidator } from "liquidator/ILiquidator.sol";
@@ -14,7 +15,7 @@ import { IBroker } from "../broker/interfaces/IBroker.sol";
1415
import { IBrokerLiquidator } from "../liquidator/IBrokerLiquidator.sol";
1516
import { 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
}

test/moolah/MarketFactoryTest.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ contract MarketFactoryTest is Test {
115115
);
116116
ERC1967Proxy marketFactoryProxy = new ERC1967Proxy(
117117
address(marketFactoryImpl),
118-
abi.encodeWithSelector(marketFactoryImpl.initialize.selector, admin, operator)
118+
abi.encodeWithSelector(marketFactoryImpl.initialize.selector, admin, operator, pauser)
119119
);
120120
marketFactory = MarketFactory(address(marketFactoryProxy));
121121

0 commit comments

Comments
 (0)