Our project empowers the Maker Governance Voter to delegate their votes in a privacy-presevering fashion. We use the zero-knowledge proofs to make it happen. When the voter wants to delegate his votes, he comes to our Delegate Vote Function where he performs a one-time setup, and then it securely generates the ZK-Note for the Vote Delegation. The ZK-Note can then be sent to user to whom the voter wants to delgate their vote to via an off-chain communication channel. The user(delegate) can then use this ZK-Note to Vote on the proposal. The weight of the vote would correspond to the MKR locked by the delegator in the voting contract. This makes sure the identity of the delegate is private till the point he actually votes. Therefore the delegate is safe from any influencing, bribing, or any other illicit activities.
We have built the enitre application on top of the Maker Contracts(voteProxy.sol and chief.sol) and that makes it easily integrable with the Maker Specs.
We have written a medium article documenting our journey in the hackathon and the design decisions we made. It's highly recommended to read that too. You can read that here.
We also have a video demo here.
$ git clone https://github.com/tHeMaskedMan981/Private-delegation-Maker-Governance.git
$ cd Private-delegation-Maker-Governance
$ cd zk_library
$ npm install
$ cd frontend
$ npm install
$ cd frontend/client
$ npm install
$ cd frontend
$ truffle migrate --reset --network develop
$ node setup.js
$ cd zk_library
$ node server.js
$ cd frontend/client
$ npm start
And that's it we are good to go. Please feel free to reach out to us with any improvements.