project screenshot 1
project screenshot 2
project screenshot 3
project screenshot 4
project screenshot 5
project screenshot 6

ZeroPoll

ZeroPoll is a private voting system powered by zero-knowledge proofs

ZeroPoll

Created At

ETHOnline 2024

Project Description

The code of ZeroPoll defines a secure, privacy-preserving poll system. It leverages zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge) to ensure that votes are both anonymous and verifiable without revealing any sensitive information.

Here’s how it works: Participants know which other participants wallets are eligible to vote. ZeroPoll allow participants to verify this through a zero-knowledge proof, called a commitment, which confirms eligibility without ever revealing the public key used for voting. This verification process happens on client-side.

Zeropoll takes privacy even further. Not only are the votes anonymous, but every poll option is securely hashed with a salt before being added to the chain. This ensures that only participants with access to the poll can view the options.

When voting, participants create a zero-knowledge proof of their votes associated with the hash of the poll option and transact to the Runtime Module, where the votes will persist without reveling any sensitive information.

The poll ui also consumes the votes directly from this runtime module and by executing zero-knowledge proofs, it ensures the text of each poll option is correct and how much votes was casted.

Zeropoll isn't limited to traditional elections. It’s ideal for any situation where private, secure voting is essential—whether it's in businesses, organizations, or even casual social interactions. You can experience this next level of voting today - visit zeropoll.xyz, connect your Auro Wallet and experience the future of anonymous voting.

How it's Made

Zeropoll can be splited in 2 parts:

  1. The Chain, with the Runtime Modules - operates with Protokit and O1JS—Mina's zero-knowledge DSL for writing provable code.

  2. The Web App, made with Next.js, React, Zustand, ShadcnUI and Tailwind. It offers a UI for users to interact with the chain in a easy way.

Both, the chains modules and the web app are made with Typescript and was initially set up with proto-kit/starter-kit (https://github.com/proto-kit/starter-kit).

Key Components

ZK Program, Commitment from Merkle Map, Nullifiers, Hashed poll options with Salt

Security Considerations

Anonymity: The system ensures that votes are anonymous by using zk-SNARKs. The nullifier mechanism guarantees that each participant can vote only once, without revealing their vote or identity.

Merkle Tree: The commitmentRoot is derived from a Merkle tree, which participants can verify to ensure that only the correct set of participants is allowed to vote.

Salts: The use of salts in the commitment process (if implemented) adds an extra layer of security, making it even harder to link a vote back to a specific participant.

background image mobile

Join the mailing list

Get the latest news and updates