# Governance Module

The **GovernanceModule** enables participating in the governance of component tokens held in the [SetToken](/index-coop-community-handbook/protocol/index-protocol/core-contracts/set-token.md). Examples of intended protocols include Aave, Compound, and Uniswap governance.

## Select Methods

### delegate()

`function delegate(ISetToken _setToken, string memory _governanceName, address _delegatee)`

**Manager only**. Delegate voting power to an Ethereum address. Note: for some governance adapters, delegating to self is equivalent to registering and delegating to zero address is revoking right to vote.

| Parameter Name   | Type      | Description                                                          |
| ---------------- | --------- | -------------------------------------------------------------------- |
| \_setToken       | ISetToken | Instance of the SetToken                                             |
| \_governanceName | string    | Human readable name of integration stored in the IntegrationRegistry |
| \_delegatee      | address   | Address of delegatee                                                 |

### propose()

`function propose(ISetToken _setToken, string memory _governanceName, bytes memory _proposalData)`

**Manager only**. Create a new proposal for a specified governance protocol.

| Parameter Name   | Type      | Description                                                          |
| ---------------- | --------- | -------------------------------------------------------------------- |
| \_setToken       | ISetToken | Instance of the SetToken                                             |
| \_governanceName | string    | Human readable name of integration stored in the IntegrationRegistry |
| \_proposalData   | bytes     | Byte data of proposal to pass into governance adapter                |

### vote()

`function vote(ISetToken _setToken, string memory _governanceName, uint256 _proposalId, bool _support, bytes memory _data)`

**Manager only**. Cast vote for a specific governance token held in the SetToken. Manager specifies whether to vote for or against a given proposal

| Parameter Name   | Type      | Description                                                          |
| ---------------- | --------- | -------------------------------------------------------------------- |
| \_setToken       | ISetToken | Instance of the SetToken                                             |
| \_governanceName | string    | Human readable name of integration stored in the IntegrationRegistry |
| \_proposalId     | uint256   | ID of the proposal to vote on                                        |
| \_support        | bool      | Boolean indicating whether to support proposal                       |
| \_data           | bytes     | Arbitrary bytes to be used to construct vote call data               |

### register()

`function register(ISetToken _setToken, string memory _governanceName)`

**Manager only**. Register for voting for the SetToken

| Parameter Name   | Type      | Description                                                          |
| ---------------- | --------- | -------------------------------------------------------------------- |
| \_setToken       | ISetToken | Instance of the SetToken                                             |
| \_governanceName | string    | Human readable name of integration stored in the IntegrationRegistry |

### revoke()

`function revoke(ISetToken _setToken, string memory _governanceName)`

**Manager only**. Revoke voting for the SetToken

| Parameter Name   | Type      | Description                                                          |
| ---------------- | --------- | -------------------------------------------------------------------- |
| \_setToken       | ISetToken | Instance of the SetToken                                             |
| \_governanceName | string    | Human readable name of integration stored in the IntegrationRegistry |

### initialize()

`function initialize(ISetToken _setToken)`

**Manager only.** Initializes this module to the SetToken.

| Parameter Name | Type      | Description             |
| -------------- | --------- | ----------------------- |
| \_setToken     | ISetToken | Address of the SetToken |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.indexcoop.com/index-coop-community-handbook/protocol/index-protocol/modules/governance-module.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
