The MakerDAO Voting Proxy Contract
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.
Two types of voting
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.
Voting with a cold wallet
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.
Supporting the two types of voting
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.
Minimizing the need to have cold wallets online
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.
The setup process
Setting up the voting proxy contract involves a few steps. The user must:
- Prove they control of both the “cold wallet” and the “hot wallet”
- Transfer their MKR to be used for voting to the contract for Executive voting (DS-Chief)
- Draw IOU tokens from the Executive voting contract, and transfer them to the Governance voting (Polling) contract.
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.
- Initiate link — After the user has specified which wallets to use as cold and hot wallet, the first transaction is the “Initiate link”, where the user proves control of the cold wallet, and specifies which wallet to use as hot wallet.
- Approve link — Next, it is time for the user to prove control of the hot wallet to create the link between the two wallets with “Approve link” transaction, that specifies the address of the cold wallet.
- Approve MKR transfer — Once the link between cold and hot wallets has been created, it is almost time to transfer the MKR from the cold wallet into the voting system, but first we must approve that MKR can be transferred to the voting system contract. This happens with the “Approve MKR transfer” transaction.
- Send MKR — The last step, the “Send MKR” transaction transfers MKR to the so-called Chief contract, gets corresponding IOU tokens issued, and finally transfers those to the Polling vote contract to specify the users voting weight. This step can be repeated later at any time to “top up” with additional MKR.
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.
What does the one-time proxy setup cost?
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