> For the complete documentation index, see [llms.txt](https://docs.inverter.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.inverter.network/contracts/technical-reference/external/governance/governor_v1.sol.md).

# Governor\_v1.sol

[Git Source](https://github.com/InverterNetwork/inverter-contracts/blob/2a8a4c80ff4f24a59546d4e6126b81bc51228c94/src/external/governance/Governor_v1.sol)

**Inherits:** [ERC165Upgradeable](<https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/52f6007348edc34304e9de9dc39cfbeb9ef314b9/contracts/utils/introspection/ERC165Upgradeable.sol&#xA;>), [IGovernor\_v1](/contracts/technical-reference/external/governance/interfaces/igovernor_v1.sol.md), [AccessControlUpgradeable](<https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/access/AccessControlUpgradeable.sol&#xA;>)

**Author:** Inverter Network

This contract manages various administrative functions that can be executed only by specified multisig addresses. It supports upgrades to [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) contracts through role-based permissions, enabling a timelocked upgrade process and emergency procedures.

*Inherits from* [*{ERC165Upgradeable}* ](<https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/52f6007348edc34304e9de9dc39cfbeb9ef314b9/contracts/utils/introspection/ERC165Upgradeable.sol&#xA;>)*for interface detection,*[ *{AccessControlUpgradeable}*](<https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/access/AccessControlUpgradeable.sol&#xA;>) *for role-based access control, and implements the* [*{IGovernor\_v1}*](https://docs.inverter.network/contracts/technical-reference/external/governance/interfaces/igovernor_v1.sol) *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.*

```solidity
bytes32 public constant COMMUNITY_MULTISIG_ROLE = "0x01";
```

#### TEAM\_MULTISIG\_ROLE

*Role of the team multisig.*

```solidity
bytes32 public constant TEAM_MULTISIG_ROLE = "0x02";
```

#### feeManager

[*{FeeManager\_v1}*](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol) *contract.*

```solidity
IFeeManager_v1 private feeManager;
```

#### moduleFactory

[*{ModuleFactory\_v1}* ](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol)*contract.*

```solidity
IModuleFactory_v1 private moduleFactory;
```

#### linkedBeacons

*Array of* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)*s that are linked to this* [*{Governor\_v1}*](/contracts/technical-reference/external/governance/governor_v1.sol.md)*, populated via `moduleFactoryInitCallback`.*

```solidity
IInverterBeacon_v1[] private linkedBeacons;
```

#### timelockPeriod

*Length of each timelock.*

```solidity
uint public timelockPeriod;
```

#### beaconTimelock

*Struct to store timelock information for each* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)*.*

```solidity
mapping(address beacon => IGovernor_v1.Timelock timelock) private beaconTimelock;
```

#### \_\_gap

*Storage gap for future upgrades.*

```solidity
uint[50] private __gap;
```

### Functions

#### supportsInterface

*See* [*{IERC165-supportsInterface}*](<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/19a657bef8354f2a655900654955739b70dfbde9/contracts/utils/introspection/IERC165.sol#L24&#xA;>)*.*

```solidity
function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(AccessControlUpgradeable, ERC165Upgradeable)
    returns (bool);
```

#### onlyLinkedModuleFactory

*Modifier to guarantee function is only callable by the linked* [*{ModuleFactory\_v1}.*](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol)

```solidity
modifier onlyLinkedModuleFactory();
```

#### linkedBeaconsEmpty

*Modifier to guarantee linked* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)*s are not empty.*

```solidity
modifier linkedBeaconsEmpty();
```

#### validAddress

*Modifier to guarantee the given address is valid.*

```solidity
modifier validAddress(address adr);
```

#### validTimelockPeriod

*Modifier to guarantee the given timelock period is valid.*

```solidity
modifier validTimelockPeriod(uint amt);
```

#### accessibleBeacon

*Modifier to guarantee the given* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) *is accessible.*

```solidity
modifier accessibleBeacon(address target);
```

#### onlyCommunityOrTeamMultisig

*Modifier to guarantee only the community or team multisig can call the function.*

```solidity
modifier onlyCommunityOrTeamMultisig();
```

#### upgradeProcessAlreadyStarted

*Modifier to check if the upgrade process for the given* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) *is already started.*

```solidity
modifier upgradeProcessAlreadyStarted(address beacon);
```

#### timelockPeriodExceeded

*Modifier to check if the timelock period for the given* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) *is exceeded.*

```solidity
modifier timelockPeriodExceeded(address beacon);
```

#### constructor

```solidity
constructor();
```

#### init

The module's initializer function.

```solidity
function init(
    address _communityMultisig,
    address _teamMultisig,
    uint _timelockPeriod,
    address _feeManager,
    address _moduleFactory
)
    external
    initializer
    validAddress(_communityMultisig)
    validAddress(_teamMultisig)
    validTimelockPeriod(_timelockPeriod);
```

**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}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol). |
| `_feeManager`        | `address` | The address of the initial [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).                             |
| `_moduleFactory`     | `address` | The address of the initial [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol).                           |

#### moduleFactoryInitCallback

Callback function that is called by [{ModuleFactory\_v1} ](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol)during initialization.

```solidity
function moduleFactoryInitCallback(
    IInverterBeacon_v1[] calldata registeredBeacons
) external onlyLinkedModuleFactory linkedBeaconsEmpty;
```

**Parameters**

| Name                | Type                   | Description                                                                                                                                                           |
| ------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `registeredBeacons` | `IInverterBeacon_v1[]` | The array of [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)s that will be registered. |

#### getBeaconTimelock

Returns the current timelock of a [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) address.

```solidity
function getBeaconTimelock(address beacon)
    external
    view
    returns (Timelock memory);
```

**Parameters**

| Name     | Type      | Description                                                                                                                                        |
| -------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `beacon` | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol). |

**Returns**

| Name     | Type       | Description                                                                                                                                                 |
| -------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `<none>` | `Timelock` | The timelock of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) address. |

#### getLinkedBeacons

Returns the list of currently linked [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)s.

```solidity
function getLinkedBeacons()
    external
    view
    returns (IInverterBeacon_v1[] memory);
```

**Returns**

| Name     | Type                   | Description                                                                                                                                                                                                 |
| -------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `<none>` | `IInverterBeacon_v1[]` | LinkedBeacons The array of [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)s that are currently linked to the {Governor\_v1}. |

#### getFeeManager

Returns the [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol) address.

```solidity
function getFeeManager() external view returns (address);
```

**Returns**

| Name     | Type      | Description                                                                                                                     |
| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `<none>` | `address` | Address of the [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol). |

#### setFeeManager

Sets the address of the [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManager(address newFeeManager)
    external
    onlyRole(COMMUNITY_MULTISIG_ROLE);
```

**Parameters**

| Name            | Type      | Description                                                                                                                             |
| --------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `newFeeManager` | `address` | The address of the new [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol). |

#### getModuleFactory

Returns the [{ModuleFactory\_v1} ](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol)address.

```solidity
function getModuleFactory() external view returns (address);
```

**Returns**

| Name     | Type      | Description                                                                                                                       |
| -------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `<none>` | `address` | Address of the [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol). |

#### setModuleFactory

Sets the address of the [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setModuleFactory(address newModuleFactory)
    external
    onlyRole(COMMUNITY_MULTISIG_ROLE);
```

**Parameters**

| Name               | Type      | Description                                                                                                                               |
| ------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `newModuleFactory` | `address` | The address of the new [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol). |

#### setFeeManagerMaxFee

Sets the maximum fee percentage that can be assigned in the linked [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManagerMaxFee(uint maxFee)
    external
    onlyRole(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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManagerDefaultProtocolTreasury(address _defaultProtocolTreasury)
    external
    onlyRole(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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManagerWorkflowTreasuries(address workflow, address treasury)
    external
    onlyRole(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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManagerDefaultCollateralFee(uint _defaultCollateralFee)
    external
    onlyRole(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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setFeeManagerDefaultIssuanceFee(uint _defaultIssuanceFee)
    external
    onlyRole(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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function setFeeManagerCollateralWorkflowFee(
    address workflow,
    address module,
    bytes4 functionSelector,
    bool set,
    uint fee
) external onlyCommunityOrTeamMultisig;
```

**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}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol).

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function setFeeManagerIssuanceWorkflowFee(
    address workflow,
    address module,
    bytes4 functionSelector,
    bool set,
    uint fee
) external onlyCommunityOrTeamMultisig;
```

**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}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) with the provided `metadata` in the target [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol).

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function registerMetadataInModuleFactory(
    IModule_v1.Metadata memory metadata,
    IInverterBeacon_v1 beacon
) external onlyCommunityOrTeamMultisig accessibleBeacon(address(beacon));
```

**Parameters**

| Name       | Type                  | Description                                                                                                                                                 |
| ---------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `metadata` | `IModule_v1.Metadata` | The metadata that will be registered.                                                                                                                       |
| `beacon`   | `IInverterBeacon_v1`  | The [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that will be registered. |

#### upgradeBeaconWithTimelock

Starts the upgrade process of a [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) by creating a timelock period after which the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) can be upgraded via `triggerUpgradeBeaconWithTimelock()`.

*This function will override previous timelocks even if they are active.*

```solidity
function upgradeBeaconWithTimelock(
    address beacon,
    address newImplementation,
    uint newMinorVersion,
    uint newPatchVersion
)
    external
    onlyCommunityOrTeamMultisig
    accessibleBeacon(beacon)
    validAddress(newImplementation);
```

**Parameters**

| Name                | Type      | Description                                                                                                                                                                           |
| ------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `beacon`            | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that is intended to be upgraded.    |
| `newImplementation` | `address` | The address of the intended new Implementation of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol). |
| `newMinorVersion`   | `uint256` | The intended new minor version of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).                 |
| `newPatchVersion`   | `uint256` | The intended new patch version of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).                 |

#### triggerUpgradeBeaconWithTimelock

Upgrades a [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) with the data provided by the active timelock.

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function triggerUpgradeBeaconWithTimelock(address beacon)
    external
    onlyCommunityOrTeamMultisig
    accessibleBeacon(beacon)
    upgradeProcessAlreadyStarted(beacon)
    timelockPeriodExceeded(beacon);
```

**Parameters**

| Name     | Type      | Description                                                                                                                                                                        |
| -------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `beacon` | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that is intended to be upgraded. |

#### cancelUpgrade

Cancels an upgrade of [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) by setting the active timelock to inactive.

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function cancelUpgrade(address beacon)
    external
    onlyCommunityOrTeamMultisig
    upgradeProcessAlreadyStarted(beacon);
```

**Parameters**

| Name     | Type      | Description                                                                                                                                                                                  |
| -------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `beacon` | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) for which the timelock should be canceled. |

#### setTimelockPeriod

Sets the timelock period of a [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) upgrade process.

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function setTimelockPeriod(uint newTimelockPeriod)
    external
    onlyRole(COMMUNITY_MULTISIG_ROLE);
```

**Parameters**

| Name                | Type      | Description |
| ------------------- | --------- | ----------- |
| `newTimelockPeriod` | `uint256` |             |

#### initiateBeaconShutdown

Initiates the shutdown of a [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function initiateBeaconShutdown(address beacon)
    external
    onlyCommunityOrTeamMultisig
    accessibleBeacon(beacon);
```

**Parameters**

| Name     | Type      | Description                                                                                                                                                                 |
| -------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `beacon` | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that should be shut down. |

#### initiateBeaconShutdownForAllLinkedBeacons

Initiates the shutdown of all linked [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol)s.

*Can only be accessed by either the `COMMUNITY_MULTISIG_ROLE` or the `TEAM_MULTISIG_ROLE`.*

```solidity
function initiateBeaconShutdownForAllLinkedBeacons()
    external
    onlyCommunityOrTeamMultisig;
```

#### forceUpgradeBeaconAndRestartImplementation

This function forces the upgrade of a beacon and restarts the implementation afterwards.

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function forceUpgradeBeaconAndRestartImplementation(
    address beacon,
    address newImplementation,
    uint newMinorVersion,
    uint newPatchVersion
)
    external
    onlyRole(COMMUNITY_MULTISIG_ROLE)
    accessibleBeacon(beacon)
    validAddress(newImplementation);
```

**Parameters**

| Name                | Type      | Description                                                                                                                                                                                      |
| ------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `beacon`            | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that is intended to be upgraded and restarted. |
| `newImplementation` | `address` | The address of the intended new Implementation of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).            |
| `newMinorVersion`   | `uint256` | The intended new minor version of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).                            |
| `newPatchVersion`   | `uint256` | The intended new patch version of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol).                            |

#### restartBeaconImplementation

Restarts the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) implementation.

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE`.*

```solidity
function restartBeaconImplementation(address beacon)
    external
    onlyRole(COMMUNITY_MULTISIG_ROLE)
    accessibleBeacon(beacon);
```

**Parameters**

| Name     | Type      | Description                                                                                                                                                              |
| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `beacon` | `address` | The address of the [{IInverterBeacon\_v1}](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) that should restarted. |

#### acceptOwnership

Accepts the ownership over the target address.

*Can only be accessed by the `COMMUNITY_MULTISIG_ROLE` or `TEAM_MULTISIG_ROLE`.*

```solidity
function acceptOwnership(address adr) external onlyCommunityOrTeamMultisig;
```

**Parameters**

| Name  | Type      | Description                                                  |
| ----- | --------- | ------------------------------------------------------------ |
| `adr` | `address` | The address of target that wants to hand over the ownership. |

#### \_setFeeManager

*sets the internal* [*{FeeManager\_v1}*](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol) *address.*

```solidity
function _setFeeManager(address newFeeManager)
    internal
    validAddress(newFeeManager);
```

**Parameters**

| Name            | Type      | Description                                                                                                                             |
| --------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `newFeeManager` | `address` | the address of the new [{FeeManager\_v1}](https://docs.inverter.network/contracts/technical-reference/external/fees/feemanager_v1.sol). |

#### \_setTimelockPeriod

*sets the internal timelock period.*

```solidity
function _setTimelockPeriod(uint newTimelockPeriod)
    internal
    validTimelockPeriod(newTimelockPeriod);
```

**Parameters**

| Name                | Type      | Description              |
| ------------------- | --------- | ------------------------ |
| `newTimelockPeriod` | `uint256` | the new timelock period. |

#### \_setModuleFactory

*sets the internal* [*{ModuleFactory\_v1}* ](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol)*address.*

```solidity
function _setModuleFactory(address newModuleFactory)
    internal
    validAddress(newModuleFactory);
```

**Parameters**

| Name               | Type      | Description                                                                                                                               |
| ------------------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `newModuleFactory` | `address` | the address of the new [{ModuleFactory\_v1}](https://docs.inverter.network/contracts/technical-reference/factories/modulefactory_v1.sol). |

#### \_isBeaconAccessible

*Internal function that checks if target address is a* [*{IInverterBeacon\_v1}*](https://docs.inverter.network/contracts/technical-reference/proxies/interfaces/iinverterbeacon_v1.sol) *and this contract has the ownership of it.*

```solidity
function _isBeaconAccessible(address target) internal returns (bool);
```
