DEV Community

Cover image for ZKVote: The Invisible Ballot That Could Unite the World.
John Revis
John Revis

Posted on

ZKVote: The Invisible Ballot That Could Unite the World.

Midnight Network Challenge: Protect That Data

This is a submission for the Midnight Network "Privacy First" Challenge - Protect That Data prompt

What I Built

ZKVote is a decentralized voting DApp that empowers global citizens to anonymously vote on humanity’s next big innovation priority — from climate tech to ethical AI. Built on the Midnight Network, it uses zero-knowledge proofs to verify voter eligibility without revealing identity, ensuring privacy and trust in every vote.

The app solves a critical problem: how can we enable global participation in decision-making without compromising personal data or exposing individuals to surveillance, bias, or retaliation?

Demo

ZKVote Repo 👉

  • Voting dashboard with animated innovation cards
  • ZK proof submission interface
  • Real-time global results heatmap “Your vote has been encrypted” confirmation modal

How I Used Midnight's Technology

ZKVote is built using:

  • MidnightJS for smart contract logic and blockchain interactions
  • Compact language to define zero-knowledge circuits for voter eligibility
  • Mocked tokens to simulate unique voter credentials
  • Privacy-preserving smart contracts that store encrypted votes and prevent double voting using nullifiers

Data Protection as a Core Feature

Privacy isn’t a layer — it’s the foundation. ZKVote ensures:

  • No personal data is ever stored or exposed
  • Voter identity is never linked to vote content
  • One vote per user is enforced using ZK nullifiers
  • All votes are encrypted and stored on-chain in a format that’s publicly auditable but completely anonymous This design allows people to vote freely, especially on sensitive global topics, without fear of surveillance or profiling.

Set Up Instructions / Tutorial

🧪 Prerequisites
Node.js v18+

MidnightJS SDK installed

Compact compiler configured
⚙️ Installation
git clone https://github.com/Revis047/ZKVOTE
cd ZKVOTE
npm install
npm run dev

Quick tutorial:

Click “Generate ZK Credential” → button switches to “Credential Ready”.
Tap a card to cast your encrypted vote → success dialog → “View Live Results”.
If you try again, you’ll see “Already voted”; use Results for tallies and regional breakdown.

Solo submission by @revis047.

Top comments (3)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.