Reimagining Indian Elections with Blockchain: How I Built D-Vote


In a country like India, where elections involve nearly a billion eligible voters, the challenges of scale, security, and transparency are immense. While Electronic Voting Machines (EVMs) have improved logistics, concerns around tampering, limited accessibility, and trust still linger. During one of my personal brainstorming sessions, I started to think: what if we could rethink the voting process using the principles of decentralization?
This thought led to the creation of D-Vote, a decentralized voting system that combines the security of the Ethereum blockchain with Aadhaar-based authentication — making the process not only more transparent but also verifiable and tamper-resistant. In this blog, I want to walk you through the journey of building D-Vote: the motivation behind it, the technology used, and how it all comes together.
The Problem That Sparked It All
Despite being the largest democracy in the world, India still faces serious hurdles in making elections more trustworthy and accessible. Issues like manual fraud, EVM manipulation, and voter identity fraud continue to crop up in different forms.
I realized that most of these problems stem from one root cause: centralization. Trust is concentrated in a single authority, and that opens up room for doubt. The solution, in my opinion, lies in decentralization — and the blockchain naturally fits this need.
The Core Idea Behind D-Vote
D-Vote aims to bring trustless and tamper-proof voting to the Indian election process by verifying each voter through their Aadhaar number and then letting them cast their vote on the blockchain using a MetaMask wallet.
The entire logic of the election — whether it’s registering a voter, tracking who has already voted, or recording each vote — is governed by smart contracts deployed on the Ethereum blockchain. Meanwhile, voter metadata and non-sensitive information are securely stored in an off-chain MongoDB database.
By combining web2 services (like Aadhaar verification and MongoDB) with web3 tools (like Ethereum and smart contracts), D-Vote attempts to bridge the gap between modern civic systems and secure, decentralized infrastructure.
Technology Stack
While developing D-Vote, I chose tools that would give the project the flexibility, modularity, and scalability it needed. Here’s a breakdown of the stack:
Frontend: React.js with Tailwind CSS for building a responsive and clean UI
Backend: Node.js and Express.js for handling API routes and business logic
Blockchain: Ethereum smart contracts written in Solidity and deployed using Hardhat
Authentication: Aadhaar OTP (simulated API) for voter verification
Wallet Integration: MetaMask and Ethers.js for signing and sending transactions
Database: MongoDB for storing voter metadata securely
Aadhaar OTP + Blockchain: A Double-Layered Security Model
One of the most important features of D-Vote is its Aadhaar OTP-based authentication system. This helps ensure that only genuine voters are allowed to register and vote. When a user enters their Aadhaar number, the system sends a One-Time Password (OTP) through a simulated Aadhaar API. Once verified, the user is authenticated and issued a token to proceed with voting.
After this, the voter connects their MetaMask wallet. From here on, everything critical — the election list, vote casting, and voter status — happens on-chain. The smart contract prevents double voting and records each vote immutably.
This two-step process not only mimics real-world Aadhaar verification but also brings a layer of trustlessness into the voting process. There’s no central database storing your vote — it’s on the blockchain, and anyone can verify it.
Admin Control and System Flow
The platform includes a set of admin-only tools that allow for complete control over elections. Admins can create new elections, add or remove candidates, and monitor the outcome in real time. These features are accessible only after proper authentication and are integrated tightly with the blockchain to maintain consistency across the system.
From a technical perspective, the user flow is straightforward:
Users start by registering with their Aadhaar number
They receive an OTP and verify it
Upon successful verification, they are marked as eligible to vote
They connect their MetaMask wallet and cast a vote in the selected election
The smart contract records the vote and prevents further votes from the same wallet
This seamless flow, despite involving multiple layers of verification, keeps the experience intuitive and fast.
Project Structure and Setup
For those interested in understanding how this project is structured under the hood, the complete source code is organized into independent modules for frontend, backend, blockchain logic, and Aadhaar-based authentication. Each module is built to work seamlessly as part of the whole system.
If you're curious to explore how the system works, from code to configurations, feel free to check out the repository here: https://github.com/SadanandJaiswal/D-Vote_India
To keep things simple and reproducible, the repository also includes:
A detailed README with setup instructions
Module-wise dependency installation
Local blockchain simulation with Hardhat
Configuration for MetaMask integration
Aadhaar OTP authentication simulation
Key Learnings
Building D-Vote wasn’t just a technical exercise; it was a deep dive into how decentralization can address some of the most persistent issues in democratic systems. Here are a few things I took away:
Integrating web2 and web3 technologies can be challenging but extremely powerful when done right.
Blockchain introduces a new way of thinking about trust — one that doesn’t rely on centralized entities.
Working with authentication flows like Aadhaar OTP simulation helped me appreciate the importance of user verification in real-world systems.
The importance of smart contract design, especially in applications where every action must be verifiable and immutable.
Final Thoughts
Building D-Vote was an exciting journey where I got to apply blockchain concepts to solve a real-world problem. While it’s still a prototype, it gave me valuable insights into designing secure, decentralized systems.
I hope this blog gave you a clear picture of how the project works and the thought process behind it.
Thanks for reading!
If you're interested in learning more or want to explore the code, feel free to check out the repository. I'd love to hear your feedback or thoughts.
Subscribe to my newsletter
Read articles from Sadanand Manshok Jaiswal directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sadanand Manshok Jaiswal
Sadanand Manshok Jaiswal
Hi, I’m Sadanand Jaiswal a final-year Computer Science student at IIITDM Jabalpur. I’m passionate about web development and love solving problems that have real-world impact. I enjoy exploring new ideas, building meaningful projects, and continuously growing as a developer.