// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "./DeFiatUtils.sol"; import "../interfaces/IDeFiatGov.sol"; abstract contract DeFiatGovernedUtils is DeFiatUtils { event GovernanceUpdated(address indexed user, address governance); address public governance; modifier onlyMastermind { require( msg.sender == IDeFiatGov(governance).mastermind() || msg.sender == owner(), "Gov: Only Mastermind" ); _; } modifier onlyGovernor { require( IDeFiatGov(governance).viewActorLevelOf(msg.sender) >= 2 || msg.sender == owner(), "Gov: Only Governors" ); _; } modifier onlyPartner { require( IDeFiatGov(governance).viewActorLevelOf(msg.sender) >= 1 || msg.sender == owner(), "Gov: Only Partners" ); _; } function _setGovernance(address _governance) internal { require(_governance != governance, "SetGovernance: No governance change"); governance = _governance; emit GovernanceUpdated(msg.sender, governance); } function setGovernance(address _governance) external onlyGovernor { _setGovernance(_governance); } }