Privacy voting system using Zero-Knowledge Proofs via Polygon ID to ensure user anonymity and uniqueness of the vote.
Blockchain-based election systems often experience two problems: user anonymity or uniqueness of voting. Traditional sybil resistance solutions often rely on multi-verification wallets, damaging the anonymity.
This project allows a voting system where the user authenticates their ability to vote using verifiable private credentials through ZKPs. For this, the user must receive this credential in advance from a trusted issuer, so that this credential is verified at the time of voting. In this way, the user is able to vote even using a newly created wallet, without revealing their personal data, but still ensuring that their vote is computed only once. For the issuer, we simulate the government's role in issuing credentials that guarantee sufficient age to vote, nationality and a unique citizen identifier. The verification body (Electoral Justice) must request the ZKP corresponding to these credentials before authorizing the voter to vote.
Our project uses Polygon ID to issue and verify verifiable private credentials that allow the user to generate a ZKP that their personal data entitles them to vote, but without revealing that data. By connecting your wallet to our frontend, the system will check if the user has already voted and if they haven't, it will be necessary to verify the credentials in the Polygon ID to allow the wallet to perform their vote. Using WalletConnect we guarantee a great experience for multiple wallets both via desktop and mobile platforms. Our contracts were deployed on testnet mumbai. The frontend was developed using NextJS. We also implemented the PUSH Protocol technology to notify the user that their vote was successfully registered on the blockchain