Giter Site home page Giter Site logo

krish-depani / decentralized-voting-system Goto Github PK

View Code? Open in Web Editor NEW
60.0 1.0 23.0 5.4 MB

A decentralized voting system using Ethereum blockchain for secure and transparent elections, with features like user authentication and real-time result tracking.

License: MIT License

JavaScript 34.17% Python 12.71% Solidity 10.26% HTML 19.91% CSS 22.96%
blockchain blockchain-voting blockchain-voting-system decentralization decentralized-applications decentralized-voting ethereum ganache jwt-authentication metamask

decentralized-voting-system's Introduction

Decentralized-Voting-System-Using-Ethereum-Blockchain

The Decentralized Voting System using Ethereum Blockchain is a secure and transparent solution for conducting elections. Leveraging Ethereum's blockchain technology, this system ensures tamper-proof voting records, enabling users to cast their votes remotely while maintaining anonymity and preventing fraud. Explore this innovative project for trustworthy and decentralized voting processes.

For a cool demo of this project watch this YouTube video.

For more details checkout Project Report.

Features

  • Implements JWT for secure voter authentication and authorization.
  • Utilizes Ethereum blockchain for tamper-proof and transparent voting records.
  • Removes the need for intermediaries, ensuring a trustless voting process.
  • Admin panel to manage candidates, set voting dates, and monitor results.
  • Intuitive UI for voters to cast votes and view candidate information.

Requirements

  • Node.js (version – 18.14.0)
  • Metamask
  • Python (version – 3.9)
  • FastAPI
  • MySQL Database (port – 3306)

Screenshots

Login Page

Admin Page

Voter Page

Installation

  1. Open a terminal.

  2. Clone the repository by using the command

     git clone https://github.com/Krish-Depani/Decentralized-Voting-System-Using-Ethereum-Blockchain.git
    
  3. Download and install Ganache.

  4. Create a workspace named developement, in the truffle projects section add truffle-config.js by clicking ADD PROJECT button.

  5. Download Metamask extension for the browser.

  6. Now create wallet (if you don't have one), then import accounts from ganache.

  7. Add network to the metamask. ( Network name - Localhost 7575, RPC URl - http://localhost:7545, Chain ID - 1337, Currency symbol - ETH)

  8. Open MySQL and create database named voter_db. (DON'T USE XAMPP)

  9. In the database created, create new table named voters in 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  |
     +--------------------------------------+-------+-----------+
     |                                      |       |           |
     +--------------------------------------+-------+-----------+
    
  10. Install truffle globally

    npm install -g truffle
    
  11. Go to the root directory of repo and install node modules

    npm install
    
  12. Install python dependencies

    pip install fastapi mysql-connector-python pydantic python-dotenv uvicorn uvicorn[standard] PyJWT
    

Usage

Note: Update the database credentials in the ./Database_API/.env file.

  1. Open terminal at the project directory

  2. Open Ganache and it's development workspace.

  3. open terminal in project's root directory and run the command

     truffle console
    

    then compile the smart contracts with command

     compile
    

    exit the truffle console

  4. Bundle app.js with browserify

     browserify ./src/js/app.js -o ./src/dist/app.bundle.js
    
  5. Start the node server server

     node index.js
    
  6. Navigate to Database_API folder in another terminal

     cd Database_API
    

    then start the database server by following command

     uvicorn main:app --reload --host 127.0.0.1
    
  7. 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/.
For more info about usage checkout YouTube video.

Code Structure

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

License

The code in this repository is licensed under the MIT License. This means that you are free to use, modify, and distribute the code, as long as you include the original copyright and license notice. For more information about LICENSE please click here.

If you like this project, please give it a 🌟.

Thank you 😊.

decentralized-voting-system's People

Contributors

krish-depani avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

decentralized-voting-system's Issues

Cant do anything(i suppose i might dont know)

I have done everything as in the steps perfectly. everything was fine but..
image
as you can see created the data base and all. Apparently when i try to login using that credential i have created i cant login while from above seeing those requests i eventually figured out that it not recognized my data base(MYSQL) server address that i wrote in .env file. So please help me i really dont know what to write in the field of MYSQL_DB. even wrote http://localhost:8000 0r with different ports and also 12.0.0.1 . everything this how currently it looks like: MYSQL_USER="admin"
MYSQL_PASSWORD="BlockChain1234"
MYSQL_HOST="DESKTOP-FUGQNF4"
MYSQL_DB="voter_db"
SECRET_KEY="d2b861a623b1d0e89f7c91c313bce1db34fbce8356ca80cf38b72e4c5a832ed5f0fa7136ef0ed5c32641308daa88c29c108d85835afcf37e5385c8e2c4cacee6" Please help me fix this

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.