Proposal Phase

The Proposal Phase is the first phase of the community governance process. In the Proposal Phase, token holders can submit proposals to the community governance contracts, and token holders can stake support for any submitted proposal using their total voting power.

The Proposal Phase lasts until a given proposal reaches staked support of 15% of the total voting power in that generation (the support threshold), or 9 days and 16 hours have passed, whichever comes first. If 9 days and 16 hours pass without a single proposal reaching the support threshold, then the community governance process ends for that generation, and no proposal is executed or put up for a vote.

Submitting a Proposal

Proposals are submitted to the PolicyProposals.sol contract for that generation. In order to determine the current PolicyProposals.sol contract, please see the section on "Finding Active Contracts".

The root policy contract manages proposal upgrades if they pass the full community governance process. When successfully voted through, and any applicable delay period has passed, the root policy contract calls the execute function of the proposal, and will execute whatever code is inside.

The Community Governance process can modify any underlying contract code in the entire system when executing a proposal. This is intentional behavior, but it comes with great responsibility. Upgrade proposals need to be free of exploitable smart contract bugs, and be carefully tested to ensure that the entire currency system is still functional after an upgrade.

Please see the GitHub repository for best practices and templates when submitting a proposal. The GitHub repository will go over how to set up your developer environment, run tests on the currency, and the procedure for submitting a proposal for review.

Submitting a Proposal to the PolicyProposals.sol contract requires calling the registerProposal(Proposal _prop) function with the address of the contract you deployed. Each deployed contract can only be proposed as a proposal once per generation and requires a one-time fee.

Submitting a proposal requires a fee of 10,000 ECO. This is to ensure that only earnest proposals are submitted to the PolicyProposals contract.

If the proposal fails to reach the support threshold, 5,000 ECO is eligible to be refunded after the proposal phase ends. To claim a refund, please see the "Claiming a Proposal Refund" section. If the proposal is enacted, the 10,000 ECO is sent to the community treasury. The unrefunded amounts are also sent to the treasury, but only once all refunds have been issued.

Supporting a Proposal

During the proposal phase, any address can choose to stake its support for a given proposal and can unstake support at any time. The weight of their support is equal to their total voting power. Any number of active proposals may be supported at any time, by staking support for each of them individually.

Staking support for a proposal gives the full weight of that addresses' voting power to the proposal and does not require a user to lock up their tokens. For an explanation of how voting power is calculated each generation, see the "Generational Voting Power" section.

The proposal phase proceeds to the "Voting Phase" as soon as one proposal has reached the support threshold of 15% of the total voting power in that generation. If the 9-day 16-hour end time of the phase is reached and no proposal has reached the support threshold, the community governance process is over until it restarts in the next generation (4 days and 8 hours later). If a proposal reaches the support threshold, the ProposalVotes.sol contract is cloned to start voting on that proposal immediately and all other proposals are left behind.

Deploying the Voting Phase

Once a proposal reaches the support threshold, the support phase immediately ends and the voting phase may then be deployed. Deploying the ProposalVotes.sol contract uses a "Supervisor Function" in the PolicyProposals.sol called deployProposalVoting(). Calling deployProposalVoting() clones the ProposalVotes.sol contract and registers it in the root policy contract.

Claiming a Proposal Refund

To claim a refund, call refund(Proposal _prop) in the PolicyProposals.sol contract with the address of the proposal submitted at the start of the voting process. Refunds can be claimed on behalf of other users, but all funds are sent to the user who submitted the proposal.

Last updated