{"id":18542770,"url":"https://github.com/coinbase/mkr-vote-proxy","last_synced_at":"2025-04-09T18:32:13.195Z","repository":{"id":44013916,"uuid":"191806036","full_name":"coinbase/mkr-vote-proxy","owner":"coinbase","description":"Cold storage-friendly voting for MKR tokens","archived":false,"fork":false,"pushed_at":"2023-07-18T22:10:02.000Z","size":774,"stargazers_count":10,"open_issues_count":10,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T10:38:48.067Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coinbase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-13T17:29:39.000Z","updated_at":"2024-12-21T17:31:22.000Z","dependencies_parsed_at":"2024-11-06T20:10:39.584Z","dependency_job_id":"f03e9819-fa6c-4298-a10a-027713c46e62","html_url":"https://github.com/coinbase/mkr-vote-proxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coinbase%2Fmkr-vote-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coinbase%2Fmkr-vote-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coinbase%2Fmkr-vote-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coinbase%2Fmkr-vote-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coinbase","download_url":"https://codeload.github.com/coinbase/mkr-vote-proxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248087860,"owners_count":21045602,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T20:10:35.588Z","updated_at":"2025-04-09T18:32:08.187Z","avatar_url":"https://github.com/coinbase.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MKR Vote Proxy\nThese smart contracts (`VoteProxy`, `VoteProxyFactory`) are designed to permit token\nholders to vote MKR tokens while ensuring those tokens continue to have the security\nof private keys held in cold storage.\n\n### MKR voting\nMKR holders vote by depositing MKR into a voting contract designated by MakerDao.\nThis contract, DSChief [src](https://github.com/dapphub/ds-chief/blob/master/src/chief.sol),\nreceives MKR deposits and permits the depositor to cast votes based on the number\nof tokens deposited. Depositors can release their tokens at any time (and their votes\nare removed as well).\n\n### Vote with hot key, funds to cold key\nThe VoteProxy contract permits tokens holders to vote securely without having keys\nassociated with the MKR token online (hot storage). When a VoteProxy contract\nis created, it is associated with two keys: a hot and cold key. (The cold, private\nkey can be stored offline.)\n\nMKR holders deposit funds into the VoteProxy, use the\nhot key to transfer tokens to the MakerDao voting contract (DSChief), and cast\nvotes using the hot key. The hot key can also be used to release MKR from the DSChief\nand the VoteProxy. MKR can only be released to the cold storage address--they cannot\nbe transferred to any other address.\n\nThis project has two contracts:\n* VoteProxy: lock/vote funds with a DSChief contract. Controlled by a hot key. Release\n  funds only to a cold storage address.\n* VoteProxyFactory: originates a VoteProxy contracts with a smart contract function call.\n  Tracks the mapping of hot keys\u003eVoteProxies and enforces a 1:1 mapping of hot key to\n  proxy contracts.\n\n## Resources\n\n* MakerDao voting issues: https://vote.makerdao.com/\n* MakerDao voting contract: https://chief.makerdao.com/\n\n## Quickstart\n```\n# Install node dependencies\nnpm install\n\n# Start ganache in another terminal\nnpm run dev-blockchain\n\n# Build contracts\nnpx truffle compile\n\n# Deploy contracts\nnpx truffle migrate --reset\n\n# Run tests\nnpm test\n```\n\n## Deploy to a testnet/mainnet\nCreate a `.env` file in the project root directory with your\nInfura API key and Metamask account mnemonic\n```\nMNEMONIC=\"your twelve words go here ....\"\nINFURA_API_KEY=\u003cbase64 API key\u003e\nADDRESS=\u003cHEX address of your Metamask account\u003e\n```\n\nDeploy to Ropsten\n```\nnpx truffle migrate --network ropsten\n```\n\nDeploy to Kovan\n```\nnpx truffle migrate --network kovan\n```\n\nDeploy to ethereum mainnet\n```\nnpx truffle migrate --network mainnet\n```\n\n## License\nThis project is available open source under the terms of the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoinbase%2Fmkr-vote-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoinbase%2Fmkr-vote-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoinbase%2Fmkr-vote-proxy/lists"}