# Controller

The Index Protocol **Controller** ([Etherscan](https://etherscan.io/address/0xd2463675a099101e36d85278494268261a66603a)) is a contract that registers system contracts such as added [setTokens](https://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/core-contracts/set-token), [Modules](https://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/modules), factories, resources (like [Price Oracles](https://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/core-contracts/price-oracle)), and protocol fee configurations.

## Select View Methods

### getModuleFee()

`function getModuleFee(address _moduleAddress, uint256 _feeType) external view returns (uint256)`

Returns the protocol fee for a given module.

| Parameter Name  | Type    | Description       |
| --------------- | ------- | ----------------- |
| \_moduleAddress | address | Address of module |
| \_feeType       | uint256 | Fee type          |

| Return Name | Type    | Description                   |
| ----------- | ------- | ----------------------------- |
| fee         | uint256 | Stored protocol fee on module |

### isSystemContract()

`function isSystemContract(address _contractAddress) external view returns (bool)`

Check if a contract address is a module, Set, resource, factory or controller.

| Parameter Name    | Type    | Description         |
| ----------------- | ------- | ------------------- |
| \_contractAddress | address | Address of contract |

| Return Name      | Type | Description                                           |
| ---------------- | ---- | ----------------------------------------------------- |
| isSystemContract | bool | Boolean that returns if address is part of Set system |
