Governance
The Governance module manages the contracts that run Ubeswap.
Contracts
The Governance module contains several important contracts:
UbeToken: governance token; based on Uni
ReleaseUbe: non-transferrable token that releases Ube at an even rate over a period of 156 weeks. Based on Uni to keep track of voting power.
Timelock: based on the Uniswap timelock contract; ensures a minimum of 2 days must pass between the time an admin transaction is created and posted and the time that the transaction is executed.
A diff between Uni governance contracts and Ubeswap is available here.
Timelocks
Timelocks are a way to ensure that actions of protocol governance can be viewed ahead of time. We plan on launching a dashboard soon to allow users to view the actions of any of these timelocks.
Three Timelocks are deployed in this script:
Community -- Receives a share of mined tokens. Used to fund community projects.
Executive -- Controls most functions of Ubeswap; owner of most important contracts, notably:
The protocol fee switch in UbeswapFactory
The allocation of rewards between different liquidity mining pools (PoolManager)
The allocation of ReleaseUbe
CeloReserve -- Receives a share of mined tokens. Will be given to the Celo Reserve.
Currently, all Timelocks are admined by a wallet at 0x489AAc7Cb9A3B233e4a289Ec92284C8d83d49c6f
. We plan on transitioning this as soon as possible to a multisig, then to a DAO.
UbeToken
The UbeToken is the governance token of Ubeswap, used to vote on the direction of the protocol. Currently the voting mechanism is not live-- we plan on shipping it and a portal some time in Q3.
The token is largely based on the Uni token; however, we have decomposed the contract into a series of contracts inherited from each other:
VotingPower -- keeps track of how much voting power an address has
VotingToken -- a VotingPower that exposes a name, symbol, decimals, and balanceOf. Cannot be transferred.
TransferrableVotingToken -- a VotingToken that is fully ERC20-compliant and can be transferred.
UbeToken -- the Ubeswap governance token.
This decomposition was performed in order to easily allow ReleaseUbe to use the same logic without being transferrable.
We were careful to preserve whitespace on VotingPower
and TransferrableVotingToken
, as the code was copy/pasted from Uni.
ReleaseUbe
ReleaseUbe allows for early Ube team members and early supporters to vote on proposals while still preventing those team members from selling their tokens early.
ReleaseUbe's release schedule distributes 25.7M UBE under the following schedule:
Start time: Thu Apr 22 2021 14:00:00 GMT+0000
End time: Thu Apr 18 2024 14:00:00 GMT+0000 (52*3 weeks later)
The following contracts make up ReleaseUbe:
LinearReleaseToken -- inherits from VotingToken.
ReleaseUbe -- the ReleaseUbe token.
Deployment
There are three steps to the deployment:
Deploying UbeToken/ReleaseUbe
This script ends up sending tokens to the Operator for the Operator to later distribute to the farming pools.
Allocating ReleaseUbe
The actual allocation of ReleaseUbe will be in a private file, but the holders of ReleaseUbe are viewable on-chain via block explorer.
ReleaseUbe will be allocated before the launch date, and after the launch date, only the Executive timelock can modify the allocation.