The Decentralised Voting System utilizing Ethereum Blockchain offers a secure and transparent method for conducting elections.
By harnessing Ethereum's blockchain technology, this system guarantees tamper-resistant voting records, allowing users to vote remotely while preserving their anonymity and preventing fraudulent activities.
Discover this cutting-edge project for reliable and decentralized voting procedures.
- Utilizes Ethereum blockchain for tamper-proof and transparent voting records.
- Implements JWT for secure voter authentication and authorization.
- Intuitive UI for voters to cast votes and view candidate information.
- Admin panel to manage candidates, set voting dates, and monitor results.
- Removes the need for intermediaries, ensuring a trustless voting process.
- Node.js 18.14.0
- Metamask
- Python 3.9
- FastAPI
- MySQL Database (running at port 3306)
-
Open a terminal.
-
Clone the repository by using the command
git clone https://github.com/KushShriv/Decentralised-Voting-System-Solana-JS.git
-
Download and install Ganache.
-
Create a workspace named developement, in the truffle projects section add
truffle-config.jsby clickingAdd Projectbutton. -
Download Metamask extension for the browser.
-
Now create wallet (if you don't have one), then import accounts from ganache.
-
Add network to the metamask.
( Network name - Localhost 7575, RPC URL - http://localhost:7545, Chain ID - 1337, Symbol - ETH) -
Open MySQL and create database named
voter_db.
NOTE: Don't use Xampp
- In the database created, create new table named
votersin the given format and add some values.
CREATE TABLE voters (
voter_id VARCHAR(36) PRIMARY KEY NOT NULL,
role ENUM('admin', 'user') NOT NULL,
password VARCHAR(255) NOT NULL
);+----------+------+----------+
| voter_id | role | password |
+-----------------------------
| | | |
+----------+------+----------+
- Set up a
Database_API/.envfile with the following environment variables for the database apis to work properly
MYSQL_USER="yourUser"
MYSQL_PASSWORD="yourPassword"
MYSQL_HOST="localhost"
MYSQL_DB="voter_db"
SECRET_KEY= "yourSecretKey"
Set up a
.envfile in the root directory with just the secret key too
- Install truffle globally
npm install -g truffle
- Go to the root directory of repo and install node modules
npm install
- Install python dependencies
pip install fastapi mysql-connector-python pydantic python-dotenv uvicorn uvicorn[standard] PyJWT
Note: Update the database credentials in the
./Database_API/.envfile.
-
Open terminal at the project directory
-
Open Ganache and it's
developmentworkspace. -
Open terminal in project's root directory and run the command
truffle console
- Compile the smart contracts with command
compile
- Bundle app.js with browserify
browserify ./src/js/app.js -o ./src/dist/app.bundle.js
- Start the node server server
node index.js
- Navigate to
Database_APIfolder in another terminal
cd Database_API
- Start the database server by following command
uvicorn main:app --reload --host 127.0.0.1
- In a new terminal migrate the truffle contract to local blockchain
truffle migrate
You're all set! The Voting app should be up and running now at http://localhost:8080/.
blockchain-voting-dapp # Root directory of the project.
├── build # Directory containing compiled contract artifacts.
| └── contracts
| ├── Migrations.json
| └── Voting.json
├── contracts # Directory containing smart contract source code.
| ├── 2_deploy_contracts.js
| ├── Migrations.sol
| └── Voting.sol
├── Database_API # API code for database communication.
| └── main.py
├── migrations # Ethereum contract deployment scripts.
| └── 1_initial_migration.js
├── node_modules # Node.js modules and dependencies.
├── public # Public assets like favicon.
| └── favicon.ico
├── src
| ├── assets # Project images.
| | └── eth5.jpg
| ├── css # CSS stylesheets.
| | ├── admin.css
| | ├── index.css
| | └── login.css
| ├── dist # Compiled JavaScript bundles.
| | ├── app.bundle.js
| | └── login.bundle.js
| ├── html # HTML templates.
| | ├── admin.html
| | ├── index.html
| | └── login.html
| └── js # JavaScript logic files.
| ├── app.js
| └── login.js
├── index.js # Main entry point for Node.js application.
├── package.json # Node.js package configuration.
├── package-lock.json # Lockfile for package dependencies.
├── README.md # Project documentation.
└── truffle-config.js # Truffle configuration file.
Inspired By Decentralised Voting System - Krish Depani