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
- 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.