The problem priveasyVoting solves
Problems Solving
- Public voting: On public blockchains, voting data can be seen at any point. This reveals what individual addresses are voting for. Additionally, subsequent voters can see what prior users have voted for which can bias their decision.
- Restrictive voting styles: Traditionally blockchain voting models have had to stick to simplistic systems such as First Past the Post due to computational overhead incurring excessive gas costs. On zkSync, the chain is scalable enough to facilitate more complex voting styles that arguably come to a better consensus such as Ranked Choice Voting, Single Transferable Vote and Quadratic Voting.
- Only available for blockchain users: In order to vote on a blockchain, users had to already have a blockchain wallet and funds to pay for the voting transaction. zkSync's native account abstraction is leveraged to allow social logins and a Gasmaster is deployed to fund their transactions. This massively lowers the barrier for entry, as users simply need an email to receive their unique voting code.
Use Cases
priveasyVoting is a flexible protocol that can be adapted for a wide range of use cases. In it's current form, there are multiple ways to allow blockchain and non-blockchain users to vote. The protocol could very easily be utilized to enable sending voting links via alternative sources such as through social media or SMS.
Challenges we ran into
- There were issues with getting the frontend to consistently function correctly. Performing the same action could either result in a successful or failed tx. Attempted to debug as thoroughly as possible to get a proof of concept ready to demo.
- Attempted to use txTsuko for an easy integration of a gasless paymaster on zkSync, but found that they were not deployed for use on the testnet. Instead, deployed a simple GeneralPaymaster and funded it.
- Encountered issues with integrating social logins with web3auth, which supports account abstraction for EIP-4337 models but currently not compatible with zkSync's native account abstraction. For now, we implemented a rudimentary mock implementation.