Governor_v1.sol
Inherits: ERC165Upgradeable, IGovernor_v1, AccessControlUpgradeable
Author: Inverter Network
This contract manages various administrative functions that can be executed only by specified multisig addresses. It supports upgrades to {IInverterBeacon_v1} contracts through role-based permissions, enabling a timelocked upgrade process and emergency procedures.
Inherits from {ERC165Upgradeable} for interface detection, {AccessControlUpgradeable} for role-based access control, and implements the {IGovernor_v1} interface for governance functionalities, i.e. setting the fee manager, setting the timelock, upgrading the beacons and exposing the emergency shutdown.
State Variables
COMMUNITY_MULTISIG_ROLE
Role of the community multisig.
bytes32 public constant COMMUNITY_MULTISIG_ROLE = "0x01";TEAM_MULTISIG_ROLE
Role of the team multisig.
bytes32 public constant TEAM_MULTISIG_ROLE = "0x02";feeManager
{FeeManager_v1} contract.
IFeeManager_v1 private feeManager;moduleFactory
{ModuleFactory_v1} contract.
linkedBeacons
Array of {IInverterBeacon_v1}s that are linked to this {Governor_v1}, populated via moduleFactoryInitCallback.
timelockPeriod
Length of each timelock.
beaconTimelock
Struct to store timelock information for each {IInverterBeacon_v1}.
__gap
Storage gap for future upgrades.
Functions
supportsInterface
See {IERC165-supportsInterface}.
onlyLinkedModuleFactory
Modifier to guarantee function is only callable by the linked {ModuleFactory_v1}.
linkedBeaconsEmpty
Modifier to guarantee linked {IInverterBeacon_v1}s are not empty.
validAddress
Modifier to guarantee the given address is valid.
validTimelockPeriod
Modifier to guarantee the given timelock period is valid.
accessibleBeacon
Modifier to guarantee the given {IInverterBeacon_v1} is accessible.
onlyCommunityOrTeamMultisig
Modifier to guarantee only the community or team multisig can call the function.
upgradeProcessAlreadyStarted
Modifier to check if the upgrade process for the given {IInverterBeacon_v1} is already started.
timelockPeriodExceeded
Modifier to check if the timelock period for the given {IInverterBeacon_v1} is exceeded.
constructor
init
The module's initializer function.
Parameters
_communityMultisig
address
The address of the community multisig.
_teamMultisig
address
The address of the team multisig.
moduleFactoryInitCallback
Callback function that is called by {ModuleFactory_v1} during initialization.
Parameters
getBeaconTimelock
Returns the current timelock of a {IInverterBeacon_v1} address.
Parameters
Returns
getLinkedBeacons
Returns the list of currently linked {IInverterBeacon_v1}s.
Returns
<none>
IInverterBeacon_v1[]
LinkedBeacons The array of {IInverterBeacon_v1}s that are currently linked to the {Governor_v1}.
getFeeManager
Returns the {FeeManager_v1} address.
Returns
setFeeManager
Sets the address of the {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
getModuleFactory
Returns the {ModuleFactory_v1} address.
Returns
setModuleFactory
Sets the address of the {ModuleFactory_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
setFeeManagerMaxFee
Sets the maximum fee percentage that can be assigned in the linked {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
maxFee
uint256
The max Fee in relation to the BPS.
setFeeManagerDefaultProtocolTreasury
Sets the default protocol treasury address in the linked {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
_defaultProtocolTreasury
address
The address of the default protocol treasury.
setFeeManagerWorkflowTreasuries
Sets the protocol treasury address for a specific workflow in the linked {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
workflow
address
The address of the workflow.
treasury
address
The address of the protocol treasury for that specific workflow.
setFeeManagerDefaultCollateralFee
Sets the default collateral fee of the protocol in the linked {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
_defaultCollateralFee
uint256
The default collateral fee of the protocol in relation to the BPS.
setFeeManagerDefaultIssuanceFee
Sets the default issuance fee of the protocol in the linked {FeeManager_v1}.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
_defaultIssuanceFee
uint256
The default issuance fee of the protocol in relation to the BPS.
setFeeManagerCollateralWorkflowFee
Sets the collateral fee for a specific workflow module function in the linked {FeeManager_v1}.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
workflow
address
The address of the workflow that contains the module function.
module
address
The address of the module that contains the function.
functionSelector
bytes4
The function selector of the target function.
set
bool
Boolean that determines if the fee is actually used or not.
fee
uint256
The collateral fee in relation to the BPS.
setFeeManagerIssuanceWorkflowFee
Sets the issuance fee for a specific workflow module function in the linked {FeeManager_v1}.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
workflow
address
The address of the workflow that contains the module function.
module
address
The address of the module that contains the function.
functionSelector
bytes4
The function selector of the target function.
set
bool
Boolean that determines if the fee is actually used or not.
fee
uint256
The issuance fee in relation to the BPS.
registerMetadataInModuleFactory
Registers a {IInverterBeacon_v1} with the provided metadata in the target {ModuleFactory_v1}.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
metadata
IModule_v1.Metadata
The metadata that will be registered.
upgradeBeaconWithTimelock
Starts the upgrade process of a {IInverterBeacon_v1} by creating a timelock period after which the {IInverterBeacon_v1} can be upgraded via triggerUpgradeBeaconWithTimelock().
This function will override previous timelocks even if they are active.
Parameters
triggerUpgradeBeaconWithTimelock
Upgrades a {IInverterBeacon_v1} with the data provided by the active timelock.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
cancelUpgrade
Cancels an upgrade of {IInverterBeacon_v1} by setting the active timelock to inactive.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
setTimelockPeriod
Sets the timelock period of a {IInverterBeacon_v1} upgrade process.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
newTimelockPeriod
uint256
initiateBeaconShutdown
Initiates the shutdown of a {IInverterBeacon_v1}.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
Parameters
initiateBeaconShutdownForAllLinkedBeacons
Initiates the shutdown of all linked {IInverterBeacon_v1}s.
Can only be accessed by either the COMMUNITY_MULTISIG_ROLE or the TEAM_MULTISIG_ROLE.
forceUpgradeBeaconAndRestartImplementation
This function forces the upgrade of a beacon and restarts the implementation afterwards.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
restartBeaconImplementation
Restarts the {IInverterBeacon_v1} implementation.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE.
Parameters
acceptOwnership
Accepts the ownership over the target address.
Can only be accessed by the COMMUNITY_MULTISIG_ROLE or TEAM_MULTISIG_ROLE.
Parameters
adr
address
The address of target that wants to hand over the ownership.
_setFeeManager
sets the internal {FeeManager_v1} address.
Parameters
_setTimelockPeriod
sets the internal timelock period.
Parameters
newTimelockPeriod
uint256
the new timelock period.
_setModuleFactory
sets the internal {ModuleFactory_v1} address.
Parameters
_isBeaconAccessible
Internal function that checks if target address is a {IInverterBeacon_v1} and this contract has the ownership of it.
Last updated