SmartBallot is a modern, blockchain-based voting platform built to ensure security, transparency, accessibility, and privacy in electoral processes. Designed with emerging technologies like Zero Knowledge Proofs and blockchain, SmartBallot is a scalable and compliant solution that redefines how digital voting systems can work in the real world.
🏆 This project was awarded Runner-Up at the Eviden & Bishop's University SecureVote Hackathon 2024.
- Introduction
- Vision
- Key Features
- Technology Stack
- How It Works
- Data Protection & Privacy
- Voter Assistance
- Compliance
- Hackathon Achievement
- Diagrams
- License
Elections are the backbone of any democratic system. To ensure their integrity, voting systems must be:
- ✅ Secure
- ✅ Accessible
- ✅ Scalable
- ✅ Anonymous
- ✅ Compliant
SmartBallot leverages modern cryptographic and blockchain tools to meet all these requirements while keeping the user experience simple and intuitive.
SmartBallot aims to revolutionize voting by:
- Enhancing security and transparency
- Ensuring accessibility for all eligible voters
- Eliminating voter fraud
- Respecting data privacy and legal compliance
- Continuously evolving with emerging technologies and best practices
- 🔐 User Authentication & Admin Management
- ⏱️ Real-time Voting
- 🔗 Blockchain Integration for immutability and trust
- 🧠 Zero Knowledge Proofs to preserve voter privacy
- 🧾 External Voter Verification with secure APIs
- ♿ Comprehensive Accessibility Options
| Layer | Tech Used |
|---|---|
| Frontend | Next.js (App Router) |
| Backend | NestJS + TypeORM |
| Blockchain | Hardhat (Smart Contracts) |
| Database | SQLite |
| Authorization | Cerbos (Policy-Based Access Control) |
| External APIs | Secure integration with government databases for voter verification |
- Voter signs in through MFA and verification APIs
- Eligibility verified via ZKPs
- Ballot displayed — voter selects candidate
- ZKP generated off-chain to confirm eligibility without revealing identity
- Vote cast on-chain, anonymously
- Result tallying in real-time via blockchain
ZKPs are used to validate that a voter is eligible without revealing any personal data or vote choice.
- Voters generate a ZKP off-chain
- The ZKP proves eligibility
- Vote is then submitted on-chain, fully anonymized
Key Libraries:
@openzeppelin/contracts/access/Ownable.sol@openzeppelin/contracts/utils/cryptography/ECDSA.sol
- ❌ No storage of vote-candidate relationships
- 🔒 Cryptographic hashing (SHA-256) of voter identities
- 🔐 HTTPS/TLS for data in transit + at-rest encryption
- 📞 Request Assistance via in-app button
- ✅ Trusted Assistant Option for physical help
⚠️ Emergency handling protocols maintain flow and integrity
- ✅ Multi-Factor Authentication
- ✅ One Vote Per Eligible Voter (enforced with blockchain + ZKP)
- ✅ Minimal, lawful data retrieval for identity checks
🎉 SmartBallot was awarded Runner-Up at the Eviden & Bishop's University SecureVote Hackathon 2024, recognizing its strong implementation of secure and accessible voting technologies.
This project includes detailed diagrams to demonstrate:
- App Flow
- Frontend Architecture
- Backend Architecture
- Smart Contract Design
- ZKP Verification Flow
You can find them in the /diagrams folder.
This project is licensed under the MIT License.
Made with ❤️