Celo uses a formal on-chain governance mechanism to manage and upgrade the protocol. More information about the Governance system can be found in the Governance section of the protocol documentation. Here, we will discuss using the Celo CLI to participate in Governance as a voter as well as how to create a proposal.
A list of active proposals can be viewed with the following command:
Included will be three lists of proposals by status:
Queued proposals have been submitted, but are not yet being considered. Voters can upvote proposals in this list, and proposals with the most votes from this list will be moved from the queue to be considered.
Dequeued proposals are actively being considered and will pass through the Approval, Referendum, and Execution stages, as discussed in the protocol documentation.
Expired proposals are no longer being considered.
You can view information about a specific proposal with:
celocli governance:view --proposalID=<PROPOSAL_ID>
For example, the first proposal on Mainnet was as follows:
Running Checks:✔ 1 is an existing proposalproposal:0:contract: Freezerfunction: unfreezeargs:0: 0x8D6677192144292870907E3Fa8A5527fE55A7ff6params:target: 0x8D6677192144292870907E3Fa8A5527fE55A7ff6value: 01:contract: EpochRewardsfunction: setCarbonOffsettingFundargs:0: 0x0ba9f5B3CdD349aB65a8DacDA9A38Bc525C2e6D61: 1000000000000000000000params:partner: 0x0ba9f5B3CdD349aB65a8DacDA9A38Bc525C2e6D6value: 1000000000000000000000value: 02:contract: Freezerfunction: unfreezeargs:0: 0x07F007d389883622Ef8D4d347b3f78007f28d8b7params:target: 0x07F007d389883622Ef8D4d347b3f78007f28d8b7value: 0metadata:proposer: 0xF3EB910DA09B8AF348E0E5B6636da442cFa79239deposit: 100000000000000000000 (~100 10^18)timestamp: 1588120122transactionCount: 3descriptionURL: https://gist.github.com/aslawson/a1f693f0e4c5fd391eac463237c4182astage: Approvalupvotes: 0votes:Yes: 0No: 0Abstain: 0passing: falserequirements:participation: 50000000000000000000000 (~50000 10^18)agreement: 80%isApproved: trueisProposalPassing: falsesecondsUntilStages:referendum: 27745execution: 200545expiration: 459745
When a proposal is Queued, you can upvote the proposal to indicate you'd like it to be considered.
celocli governance:upvote --proposalID=<PROPOSAL_ID> --from=<YOUR-VALIDATOR-VOTE-SIGNER-ADDRESS>
At a defined frequency, which can be checked with the
celocli network:parameters command, proposals can be dequeued, with the highest upvoted proposals being dequeued first.
After a proposal is dequeued, it will first enter the Approval phase. In this phase, the Governance Approver may choose to approve the proposal, which will allow it to proceed to the Referendum phase after a given amount of time.
Once a proposal has reached the Referendum phase, it is open to community for voting.
celocli governance:vote --proposalID=<PROPOSAL_ID> --value=<Abstain|Yes|No> --from=<YOUR-VALIDATOR-VOTE-SIGNER-ADDRESS>
If a Governance Proposal receives enough votes and passes in the Referendum phase, it can be executed by anyone.
celocli governance:execute --proposalID:<PROPOSAL_ID> --from=<YOUR_VOTER_ADDRESS>