🏩Governance
Understand how governance of Ekubo Protocol is designed
Introduction
This guide will help you understand how to participate in the governance of Ekubo Protocol by staking tokens, creating proposals, and voting on them.
The governance contracts are open source and permissively licensed on GitHub.
Proposal Lifecycle
Staking Tokens
Before you can create or vote on proposals, you need to stake your tokens with the Staker contract. You can do so via the Delegate page in the app. Staking tokens means you lock your tokens in the Governor contract, which gives you voting power. There is no penalty for unstaking, nor minimum amount of time that tokens can be staked.
Staking can also be done at the smart contract level. Note that voting weight is not exactly equal to staked tokens due to the voting_weight_smoothing_period
. This is the number of seconds over which the average number of tokens delegated to you is taken, which is what determines your voting weight.
How to Stake Tokens
Stake All Tokens:
Use the
stake
function to delegate all your approved tokens to a specific address.Example:
stake(delegateAddress)
Stake a Specific Amount:
Use the
stake_amount
function to delegate a specified amount of tokens.Example:
stake_amount(delegateAddress, amount)
Creating a Proposal
Once you have staked tokens, you can create a proposal. The page in the app to do so is here. A proposal is a request to execute a specific set of calls, either to self (Governor) or other smart contracts.
Proposals can be created directly from the smart contracts as well:
How to Create a Proposal
Propose:
Use the
propose
function to submit your proposal along with the actions you want to execute.Example:
propose(actions)
Describe Your Proposal:
Attach a description to your proposal using the
describe
function.Example:
describe(proposalId, description)
Propose and Describe:
Combine the above two steps using the
propose_and_describe
function.Example:
propose_and_describe(actions, description)
Voting on Proposals
After a proposal is created, it enters the voting phase where token holders can vote for or against (i.e. yea
or nay
) the proposal.
How to Vote
Vote Yea or Nay:
Use the
vote
function to cast your vote.Example:
vote(proposalId, yea)
(whereyea
istrue
for yea,false
for nay)
Cancelling a Proposal
If you are the proposer, you can cancel your proposal if the voting period has not started. This allows proposers to correct errors identified during the delay period before voting starts.
How to Cancel a Proposal
Use the
cancel
function to cancel your proposal.Example:
cancel(proposalId)
Executing a Proposal
If a proposal passes the voting phase, meaning it received at least quorum
'yea' votes and the simple majority voted in favor, it can be executed after the execution delay period.
How to Execute a Proposal
Use the
execute
function to carry out the actions in the proposal.Example:
execute(proposalId, actions)
Configuration Parameters
The Governor contract has specific configuration parameters that determine how proposals and voting work:
Voting Start Delay: 1 day (86400 seconds)
Voting Period: 7 days (604800 seconds)
Voting Weight Smoothing Duration: 1 day (86400 seconds)
Quorum: 3,500,000 tokens (with 18 decimals)
Proposal Creation Threshold: 100,000 tokens (with 18 decimals)
Execution Delay: 1 day (86400 seconds)
Execution Window: 30 days (2592000 seconds)
These parameters ensure a fair governance process, allowing ample time for voting and execution of proposals.
Last updated