Governor_v1.sol

Git Source

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

Name
Type
Description

_communityMultisig

address

The address of the community multisig.

_teamMultisig

address

The address of the team multisig.

_timelockPeriod

uint256

The timelock period needed to upgrade a {IInverterBeacon_v1}.

_feeManager

address

The address of the initial {FeeManager_v1}.

_moduleFactory

address

The address of the initial {ModuleFactory_v1}.

moduleFactoryInitCallback

Callback function that is called by {ModuleFactory_v1} during initialization.

Parameters

Name
Type
Description

registeredBeacons

IInverterBeacon_v1[]

The array of {IInverterBeacon_v1}s that will be registered.

getBeaconTimelock

Returns the current timelock of a {IInverterBeacon_v1} address.

Parameters

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1}.

Returns

Name
Type
Description

<none>

Timelock

The timelock of the {IInverterBeacon_v1} address.

getLinkedBeacons

Returns the list of currently linked {IInverterBeacon_v1}s.

Returns

Name
Type
Description

<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

Name
Type
Description

<none>

address

Address of the {FeeManager_v1}.

setFeeManager

Sets the address of the {FeeManager_v1}.

Can only be accessed by the COMMUNITY_MULTISIG_ROLE.

Parameters

Name
Type
Description

newFeeManager

address

The address of the new {FeeManager_v1}.

getModuleFactory

Returns the {ModuleFactory_v1} address.

Returns

Name
Type
Description

<none>

address

Address of the {ModuleFactory_v1}.

setModuleFactory

Sets the address of the {ModuleFactory_v1}.

Can only be accessed by the COMMUNITY_MULTISIG_ROLE.

Parameters

Name
Type
Description

newModuleFactory

address

The address of the new {ModuleFactory_v1}.

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

Name
Type
Description

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

Name
Type
Description

_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

Name
Type
Description

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

Name
Type
Description

_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

Name
Type
Description

_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

Name
Type
Description

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

Name
Type
Description

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

Name
Type
Description

metadata

IModule_v1.Metadata

The metadata that will be registered.

beacon

IInverterBeacon_v1

The {IInverterBeacon_v1} 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

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} that is intended to be upgraded.

newImplementation

address

The address of the intended new Implementation of the {IInverterBeacon_v1}.

newMinorVersion

uint256

The intended new minor version of the {IInverterBeacon_v1}.

newPatchVersion

uint256

The intended new patch version of the {IInverterBeacon_v1}.

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

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} that is intended to be upgraded.

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

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} for which the timelock should be canceled.

setTimelockPeriod

Sets the timelock period of a {IInverterBeacon_v1} upgrade process.

Can only be accessed by the COMMUNITY_MULTISIG_ROLE.

Parameters

Name
Type
Description

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

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} that should be shut down.

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

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} that is intended to be upgraded and restarted.

newImplementation

address

The address of the intended new Implementation of the {IInverterBeacon_v1}.

newMinorVersion

uint256

The intended new minor version of the {IInverterBeacon_v1}.

newPatchVersion

uint256

The intended new patch version of the {IInverterBeacon_v1}.

restartBeaconImplementation

Restarts the {IInverterBeacon_v1} implementation.

Can only be accessed by the COMMUNITY_MULTISIG_ROLE.

Parameters

Name
Type
Description

beacon

address

The address of the {IInverterBeacon_v1} that should restarted.

acceptOwnership

Accepts the ownership over the target address.

Can only be accessed by the COMMUNITY_MULTISIG_ROLE or TEAM_MULTISIG_ROLE.

Parameters

Name
Type
Description

adr

address

The address of target that wants to hand over the ownership.

_setFeeManager

sets the internal {FeeManager_v1} address.

Parameters

Name
Type
Description

newFeeManager

address

the address of the new {FeeManager_v1}.

_setTimelockPeriod

sets the internal timelock period.

Parameters

Name
Type
Description

newTimelockPeriod

uint256

the new timelock period.

_setModuleFactory

sets the internal {ModuleFactory_v1} address.

Parameters

Name
Type
Description

newModuleFactory

address

the address of the new {ModuleFactory_v1}.

_isBeaconAccessible

Internal function that checks if target address is a {IInverterBeacon_v1} and this contract has the ownership of it.

Last updated