# IGovernor

Matt Stam (@mattstam)

IGovernor

The standard Governor that uses an ERC20 token for voting on proposals.

OpenZepplin IGovernor but with initialize(), since using clones + minimal-clones for cheapest possible token deployment. There is nothing Git Consensus specific about this governor. A typical use-case for governor's in the Etheruem ecosystem is to set it to the "owner of a contract, and then protect some of the contract's functions with the onlyOwner() modifier (see: https://docs.openzeppelin.com/contracts/2.x/access-control and https://docs.openzeppelin.com/contracts/2.x/api/ownership#Ownable). What is novel is that Git Consensus effectively makes addRelease() dynamically ownable, such that the only one calling it can be the one in the git tag message.

# Methods

# initialize

function initialize(address tokenAddr, string name, uint256 votingDelay, uint256 votingPeriod, uint256 proposalThreshold, uint256 quorumNumerator) external nonpayable

Initializes the Governor contract.

# Parameters

Name Type Description
tokenAddr address The ERC20 token that will be used for voting.
name string Name of the governor (e.g. "ExampleGovernor").
votingDelay uint256 The number of blocks that must pass between a proposal being proposed and when it becomes executable (e.g. 1 = 1 block).
votingPeriod uint256 The number of blocks that voting is open for a proposal (e.g. 100800 = 2 weeks = 12/s per block).
proposalThreshold uint256 The minimum number of votes required for an account to create a proposal (e.g. 0 = anyone can create a proposal).
quorumNumerator uint256 The quorumNumerator/100 to give a percentage representing minimum number of votes out of the supply required to pass a proposal (e.g. 5 = 5%).