VoteProxycontract allows for MKR users to vote with a hot or cold wallet using a proxy voting identity instead of interacting directly with the chief. In addition to supporting two different voting mechanisms, the vote proxy also minimizes the time that MKR owners need to have their wallet(s) online.
approvals: A mapping of candidate addresses to their
slate- A mapping of
addressarrays. Represents sets of candidates. Weighted votes are given to slates.
votes: A mapping of voter addresses to the slate they have voted for.
DSTokenused for voting.
DSTokenissued in exchange for locking
VoteProxycontract enables MKR owners to vote with the full weight of the MKR they own, for both for Governance and Executive votes. As mentioned above, this process also reduces the risk for MKR users when voting with a cold wallet. This is done by allowing the MKR owner to designate a “hot wallet” which is used to transfer MKR to the proxy and can only be used for voting on Governance and Executive votes. The “hot wallet” can then be used to lock MKR in the voting system and draw it back to their cold wallet.
auth- Checks to confirm that the sender must be a Cold or Hot Wallet.
lock- Charges the user
wadMKR tokens, issues an equal amount of IOU tokens to the VoteProxy, and adds
wadweight to the candidates on the user's selected slate.
free- Charges the user
wadIOU tokens, issues an equal amount of MKR tokens to the user, and subtracts
wadweight from the candidates on the user's selected slate.
vote- Saves a set of ordered addresses as a slate, moves the voter's weight from their current slate to the new slate, and returns the slate's identifier.
vote(bytes32 slate)- Removes voter's weight from their current slate and adds it to the specified slate.
VoteProxy, they can now vote directly with a single wallet, by depositing directly into Chief and then voting with their wallet.