Video thumbnail

AnonymousVoting

A ZKP-based anonymous voting system, ensuring voter privacy and preventing double voting.

AnonymousVoting

Created At

ETHGlobal Trifecta - Zero Knowledge

Project Description

This project implements a privacy-preserving voting system using zero-knowledge proofs (ZKPs) with Circom and the Groth16 proving system. Each voter generates a cryptographic commitment to their identity and vote choice, ensuring anonymity while preventing double voting through a nullifier mechanism. The system utilizes Poseidon hashing for efficient commitments and enforces valid vote options within a specified range. The proof is verified both off-chain using snarkjs and on-chain via a Groth16 verifier smart contract.

How it's Made

This project is built using zero-knowledge proofs (ZKPs) with Circom and the Groth16 proving system, enabling anonymous and tamper-proof voting on-chain.

Tech Stack & Architecture Circom – Used to define the zero-knowledge circuit that verifies voter identity and ensures valid voting.

SnarkJS – Used for proof generation and local verification before sending it on-chain.

Poseidon Hash – A ZK-friendly hash function for generating cryptographic commitments efficiently.

Hardhat & Ethers.js – Used for deploying and testing the smart contract verifier.

Solidity Smart Contract (Groth16 Verifier) – Used to verify the proof on-chain.

background image mobile

Join the mailing list

Get the latest news and updates