This post provides details about the voting proxy contract that is being used in the dapp for the governance vote about the Foundational Principles for Maker.
We will describe the background for having the contract, what it does, and what happens “behind the curtain” during the one-time setup of the voting contract.
The reason for having the voting proxy contract is two-fold: to support two different voting mechanisms and to minimize the time that MKR owners need to have their wallet online.
As described in the MakerDAO Governance Risk Framework, voting will take two forms. The first will be a vote where a resolution is required. The second will be a vote to enact that resolution into the system. The first type of vote is called a Governance Vote, and its objective is to represent resolution on a matter or collection of matters. As an example, the inclusion of new Oracles or a new risk team. The second type of vote is called an Executive Vote. Its objective is to change the state of the system. An example of this could be to ratify risk parameters for a newly accepted collateral type.
It is generally considered a best practice to keep wallets that hold any significant value in cryptocurrency offline as much as possible, i.e. to use a “cold wallet”.
To vote, MKR owners must “lock up” their tokens by transferring them to the voting system. Once transferred, they can then vote on different proposals with the weight of the MKR that is locked up.
This initially meant that MKR owners had to have their “cold wallet” online for every vote.
The Governance voting mechanism will be a basic poll vote (e.g. Yes/No to a proposal) while an Executive Vote is handled via Approval voting. This means that there are different contracts that manage the two type of votes. The voting proxy contract assures that MKR owners can vote with the full weight of the MKR they own, both for Governance voting, and for Executive voting.
The voting proxy contract improves security in the voting process by enabling MKR owners to participate in Maker Governance without having their most secure wallet (called the “cold wallet”) online for every vote. The MKR owner designates a so-called “hot wallet” that can be used only for voting, and transfers their MKR to the voting proxy contract. The designated “hot wallet” can then be used to lock up MKR in the voting system and draw MKR back to the cold wallet at a later time. These are the only actions the “hot wallet” can perform. It cannot send the MKR anywhere else, nor can it withdraw the MKR to its own wallet.
Setting up the voting proxy contract involves a few steps. The user must:
Below we will describe the steps in the figure in detail.
Note: During the actual setup there are links to etherscan.io for each step in the UI, so users can see the details of the underlying transactions.
In the figure above Ledger is used to exemplify the cold wallet, and MetaMask is used to exemplify the hot wallet.
After this process, the MKR owner can participate both in Governance and Executive voting.
Setting up the voting proxy contract is a one-time action as long as the user wants to use the same designated cold and hot wallets. However, if the user want to use another cold or hot wallet, the link can be broken, and a new voting proxy contract can be set up.
Note: Even though we say the MKR is being “locked up,” as an MKR owner, you are able to withdraw MKR back to the wallet it originally came from at any point.
The setup cost will depend on the current Ethereum gas price.
At a gas cost of 4 gwei, setting up the voting proxy contract is approximately 1 Dai. Again, remember this is a one-time action. The cost to vote will require significantly less gas than setting up the voting proxy contract.
We hope this post have helped to explain to our users what happens “behind the curtain” in the voting setup process. You can access the Maker voting system on September 12, 2018 at https://vote.makerdao.com
If you have any questions about the process we’ve described here, please come join us in our chat or in our subreddit and we will be glad to help.