// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4 <0.9.0;
import '../../interfaces/peripherals/IKeep3rRoles.sol';
import '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';
import './Governable.sol';
contract Keep3rRoles is IKeep3rRoles, Governable {
/// @inheritdoc IKeep3rRoles
mapping(address => bool) public override slashers;
/// @inheritdoc IKeep3rRoles
mapping(address => bool) public override disputers;
constructor(address _governance) Governable(_governance) {}
/// @inheritdoc IKeep3rRoles
function addSlasher(address _slasher) external override onlyGovernance {
if (slashers[_slasher]) revert SlasherExistent();
slashers[_slasher] = true;
emit SlasherAdded(_slasher);
}
/// @inheritdoc IKeep3rRoles
function removeSlasher(address _slasher) external override onlyGovernance {
if (!slashers[_slasher]) revert SlasherUnexistent();
delete slashers[_slasher];
emit SlasherRemoved(_slasher);
}
/// @inheritdoc IKeep3rRoles
function addDisputer(address _disputer) external override onlyGovernance {
if (disputers[_disputer]) revert DisputerExistent();
disputers[_disputer] = true;
emit DisputerAdded(_disputer);
}
/// @inheritdoc IKeep3rRoles
function removeDisputer(address _disputer) external override onlyGovernance {
if (!disputers[_disputer]) revert DisputerUnexistent();
delete disputers[_disputer];
emit DisputerRemoved(_disputer);
}
/// @notice Functions with this modifier can only be called by either a slasher or governance
modifier onlySlasher {
if (!slashers[msg.sender]) revert OnlySlasher();
_;
}
/// @notice Functions with this modifier can only be called by either a disputer or governance
modifier onlyDisputer {
if (!disputers[msg.sender]) revert OnlyDisputer();
_;
}
}
|