# EngenGovernance

**Deployment Address:**

Mainnet: [<mark style="color:purple;">0x27926a991BB0193Bf5b679bdb6Cb3d3B6581084E</mark>](https://explorer.kinto.xyz/address/0x27926a991BB0193Bf5b679bdb6Cb3d3B6581084E?tab=contract)

Interface: [<mark style="color:purple;">IGovernor.sol</mark>](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/governance/IGovernor.sol)

***

## Basics

The `EngenGovernance` contract is an implementation of a Governor contract for the Engen governance. It uses the `GovernorVotes` and `GovernorVotesQuorumFraction` modules from OpenZeppelin for voting and quorum functionality.

For example, if you want to check the quorum at a specific block number, you can call:

```
quorum(<BLOCK_NUMBER>)
```

### Voting Parameters

These are the key parameters used in the contract.

| Parameter          | Value   |
| ------------------ | ------- |
| Voting Delay       | 1 day   |
| Voting Period      | 3 weeks |
| Proposal Threshold | 5 ENG   |

Using the following call method, you can check the voting delay:

```
votingDelay()
```

### State Functions

Anyone can call the following functions to get information about the governance parameters.

```solidity

function votingDelay() public pure returns (uint256);

function votingPeriod() public pure returns (uint256);

function proposalThreshold() public pure returns (uint256);

function quorum(uint256 blockNumber) public view returns (uint256);

```

**1. votingDelay**

This function returns the delay period for voting.

Function Interface:

```solidity
function votingDelay() public pure override returns (uint256);
```

| Parameter | Type | Explanation                      |
| --------- | ---- | -------------------------------- |
|           |      | Returns the voting delay in days |

***

**2. votingPeriod**

This function returns the voting period.

Function Interface:

```solidity
function votingPeriod() public pure override returns (uint256);
```

| Parameter | Type | Explanation                        |
| --------- | ---- | ---------------------------------- |
|           |      | Returns the voting period in weeks |

***

**3. proposalThreshold**

This function returns the threshold needed to create a proposal.

Function Interface:

```solidity
function proposalThreshold() public pure override returns (uint256);
```

| Parameter | Type | Explanation                           |
| --------- | ---- | ------------------------------------- |
|           |      | Returns the proposal threshold in ENG |

***

**4. quorum**

This function returns the quorum at a specific block number.

Function Interface:

```solidity
function quorum(uint256 blockNumber) public view override(IGovernor, GovernorVotesQuorumFraction) returns (uint256);
```

| Parameter   | Type    | Explanation                           |
| ----------- | ------- | ------------------------------------- |
| blockNumber | uint256 | The block number to get the quorum at |

***

### **View Functions**

Anyone can call the following functions without a transaction to retrieve information from the contract.

```solidity
function votingDelay() public pure returns (uint256);

function votingPeriod() public pure returns (uint256);

function proposalThreshold() public pure returns (uint256);

function quorum(uint256 blockNumber) public view returns (uint256);
```

**1. votingDelay**

This function returns the delay period for voting.

Function Interface:

```solidity
function votingDelay() public pure override returns (uint256);
```

| Parameter | Type | Explanation                      |
| --------- | ---- | -------------------------------- |
|           |      | Returns the voting delay in days |

**2. votingPeriod**

This function returns the voting period.

Function Interface:

```solidity
function votingPeriod() public pure override returns (uint256);
```

| Parameter | Type | Explanation                        |
| --------- | ---- | ---------------------------------- |
|           |      | Returns the voting period in weeks |

***

**3. proposalThreshold**

This function returns the threshold needed to create a proposal.

Function Interface:

```solidity
function proposalThreshold() public pure override returns (uint256);
```

| Parameter | Type | Explanation                           |
| --------- | ---- | ------------------------------------- |
|           |      | Returns the proposal threshold in ENG |

***

**4. quorum**

This function returns the quorum at a specific block number.

Function Interface:

```solidity
function quorum(uint256 blockNumber) public view override(IGovernor, GovernorVotesQuorumFraction) returns (uint256);
```

| Parameter   | Type    | Explanation                           |
| ----------- | ------- | ------------------------------------- |
| blockNumber | uint256 | The block number to get the quorum at |


---

# 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.kinto.xyz/kinto-the-modular-exchange/building-on-kinto/smart-contract-reference/engengovernance.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.
