Starting with the belief that ZEC holders have a vested interest in the success of Zcash, we deserve a feedback system that is transparently verifiable, yet leverages the privacy-preserving benefits of Zcash. With the recent community discussions around licensing of NU5-related software, it is more important than ever to give ZEC holders a voice.
ZIP-1014 has a Non-requirement section that states: “General on-chain governance is outside the scope of this proposal. Rigorous voting mechanisms (whether coin-weighted, holding-time-weighted or one-person-one-vote) are outside the scope of this proposal, though there is prescribed room for integrating them once available.”
Zcash will not be the first project to undertake such a coin-weighted voting mechanism. Many other coins have made it functional and have made the community happy by making their voice heard, even at times when large holders with skin in the game vote against the choice of minority coin holders. Additional consideration needs to be given to what questions are allowed to be voted on. There have been a lot of discussions around coin holder-weighted voting and we think we can create a design that is easy for ZEC holders to use that addresses questions raised by community members. I personally would not want supply cap or consensus changes brought up to vote with coin voting. This is similar to how other cryptocurrency projects have leveraged coin voting - by limiting the vote to decide on community initiatives or awarding grants.
An ideal coin voting mechanism would consist of a set of constraints, rules, rewards, and an accessible, privacy-preserving, web-based system to achieve a non-binding coin-weighted voting system. Over time, Zcash wallets & exchanges may include a dedicated voting portal to make it easy for every holder to take part. Coin Voting will enable all ZEC holders to participate in the decision-making process to contribute to the growth and usability of Zcash. The coin-weighted voting mechanism for the Zcash community is designed for simplicity and maximum participation:
Here is a list of ideas to shape the rules:
- Incentivize users to migrate to Shielded ZEC for participating in the voting round.
- It does not require coins to be moved to a transparent address.
- Give every ZEC holder an easy way to take part in coin-weighted voting.
- Reward users that take part in the voting rounds.
- Add the requirement of holding Shielded ZEC through the quarterly voting round to count the votes.
- Questions for voting can be discussed on the forums prior to the start of the voting round.
- Aim to have quarterly voting rounds.
- Prevent users from gaming the vote by acquiring easy influence via short-term loans.
- Have a minimum threshold of ~2 ZEC allocation requirements to take part in voting to reduce spam.
- The ZEC allocation by users is free to be spent if needed, and not locked.
- Build an easy-to-use web portal with a list of items up for a vote, that generates a scannable Payment URI with a memo formatted for the voting.
- Use Viewing Keys to keep the tally of votes and voting results in a decentralized and publicly verifiable manner.
- Allow change of vote till the end of the voting round by adopting the ZIP-304 signature model, or limiting it to a one-time vote at the onset of the 3 months voting round.
- Avoid linkability of voting history across different voting rounds by requiring the creation of new Shielded address for each voting round.
- Conduct a trial round of voting and publish the learnings and research.
Voting Schedule, Commitments, and Rewards:
- Four quarterly voting rounds per calendar year.
- Each holder must commit to keeping a certain ZEC balance for each quarterly period.
- There will be at least one voting session in each voting round.
- Zcash holders must vote in each voting session but can choose to “vote with the ZCG recommendation”.
- Every measure to be voted on will have links to discussions on the Zcash forum.
- Holders who maintain their coin allocation and successfully cast their vote are eligible to claim rewards for taking part in voting.
- Rewards are proportional to the ZEC commitment by each holder.
- Specific Rewards pool for each period, decided by Voting Rounds/ZCG vote.
Step-by-step mechanism for a privacy-preserving, decentralized, publicly verifiable voting rounds:
- This requires the building of an easy-to-use web portal with a list of items up for a vote, that generates a scannable Payment URI for the user to generate a transaction to their own newly created shielded address to take part in voting.
- Zcash holders decide how much ZEC they want to allocate for the predefined 3-month voting round.
- The user creates a fresh Shielded Address and sends ZEC equal to or more than the allocation amount.
- The user shares the viewing key of the address to a web portal.
- The portal checks for existing entry and possibly even the structure of the memo and that a fresh address is used(no other history of memos) before adding the VK to the voting round.
- A snapshot of VK balances submitted is taken at the beginning of the 3 month period.
- The user can update the votes by sending a new signed shielded memo to their UA. (this amount of ZEC will not be counted towards the total voting power as the snapshot date has passed)
- The portal keeps track of all VKs and balances on a regular basis throughout the voting round.
- The user votes on proposals(added by ZCG on the web portal by the input from the forum) by sending a shielded memo with Q/A choice during the voting round (e.g. first 4 weeks of the quarter). This process can be made easier by using a web form with questions & a Payment Request to the user’s voting UA address.
- At the end of the voting round, the web portal verifies that each VK balance did not dip below the initial allocated balance, and votes were submitted in the form of shielded memos and confirmed & verified that each VK completed voting on all the questions.
- Following the verification by ZCG, the votes for the user are counted towards the questions, and the results are shared with the community.
- A predefined amount of ZEC is allocated to all the voters’ addresses depending on the % of their share in the total voting coins.
- ZEC allocation for the next round of voting begins 2 weeks before the end of the quarter.
Next steps:
- Discuss and review the feasibility of the proposed coin voting mechanism.
- Gather the list of questions to be put up for a vote, including the question about how many rewards in ZEC to allocate for the next 4 voting rounds in 2023.
- Plan for the first voting round starting this October 1st to December 31st.
- Build out the simplified portal with a CRON job to monitor the balances and vote by reading the last shielded memo.
- Source rewards for the voting round from the ZCG discretionary budget and poll ZCAP + coin voting for a separate budget set aside for coin voting rewards in 2023.
- Plan a web/mobile app for easy access and memo generation.
- Work with wallet developers & exchanges to provision a dedicated voting address for every user to hold balances for the duration of the voting round.
Items to finalize:
- ZCG site to host the coin-weighted voting interface.
- Allocate 100 ZEC from the discretionary budget for the trial run vote for Oct 1 - Dec 31, 2022.
- Write a script and audit it to disburse rewards to the successful participants.
Acknowledgment:
I’d like to thank Michael Harms @BrunchTime for brainstorming several voting mechanisms employed in the cryptocurrency space, Brian @wobbzz, Jason McGee @aquietinvestor, and Hudson Jameson @Souptacular for review & feedback on drafts of this proposal. And thanks to @pacu for helping review the idea to leverage ZIP-304 signature scheme.
Thanks to Balsamiq for providing me a license key completely free of charge for contributing to the open-source projects in Zcash.