# 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 |
