VoteCast – Blockchain Based Secure Voting System

VoteCast is an Ethereum Blockchain based decentralized application which ensures secure and transparent voting scheme for organizing public and private elections.

Demo.mp4

💡 Features

▶️ Secure Voter Registration ▶️ Ballot Signing Support For Election Authority ▶️ Tamper-proof Ballots ▶️ Double Voting Prevention ▶️ Blind Signature Support using ECDSA

🎯 Purpose of Blockchain Based E-Voting

Physical election systems that are prevalent have several drawbacks –

  • Ballots can be internally tampered before or after vote casting
  • Election system does not ensure transparency and security
  • Voters need to trust election authority
  • Double voting issue can occur

CryptoCast, being a blockchain based E-Voting solution, addresses these issues by adpoting following schemes –

  • Each ballot is cryptographically signed using election authority’s private key
  • Ballots are tamper-proof as those are digitally signed and verified by smart contract on the blockchain.
  • Double voting is addressed by keeping registered voters’ data on Blockchain
  • Election authority does not have access to voter’s ballot
  • Elligible voters can only register for the election with their National Identification Number.

🔨 Technology Stack

  1. Blockchain Tools
    1. Truffle
    2. Web3 JS
    3. Ganache
  2. Smart Contract Programming
    1. Solidity
  3. Front End
    1. HTML
    2. CSS
    3. Bootstrap
    4. JavaScript
  4. Dev Servers
    1. Node
    2. Lite-Server

💼 Pre-requisites

  • Truffle = v5.1.10
  • Node.js >= v12.18.2
  • Solidity (Solc-js) = v0.4.23
  • Node.js >= v12.18.2
  • Web3 >= v1.2.11

📣 How to Build

Step-1 : Prepare Development Environment

  1. Install Node JS

    • Head into the website & download.
    • Tip: Use NVM version manager to flexibly install NodeJS)
  2. Install Truffle Smart Contract Blockchain Framework

    • $ npm install -g truffle
  3. Install Ganache GUI

    • Head into the website & download.
  4. Clone the repository

    • Download the repo to your local machine using $ git clone.
  5. Install Project Dependencies using NPM

    • Change directory into the project root by $ cd CryptoCast/ and run $ npm install
  6. Install MetaMax extension

    • Install the extension based on your preferred web browser (Chrome/Edge/Firefox)
  7. Install Solidity Syntax Highlighter Package (Optional)

    • Based on your favorite text editor (Atom/Sublime Text/VSCode), install Solidity Syntax Highlighter Package to properly highlight the solidity sources.

Step-2 : Run the Project

  1. Compile & Test

    • Run ‘$ truffle compile’ and make sure the source is successfully compiled.

    • Tip: Remove ‘build/’ folder and then compile for generating fresh new compilation artifacts of the sources.

  2. Fire Up Ganache

    • Open Ganace and start local blockchain workspace
    • Make sure the Ganache port ID is same as the port specified under ‘development’ network in truffle-config.js.
    • Copy the deployed ‘contract address’ and paste it on contractAddress variable on ‘src/js/app.js’ script
  3. Smart Contract Migration

    • Run $ truffle migrate --reset and wait for successful deployment of the contracts on the local blockchain.
  4. Start Dev Server

    • Start Lite-Server using $ npm run dev on project root.

Step-3 : Interact with the Dapp

  1. Open your preferred browser in http://localhost:3000, with MetaMask activated and logged in
  2. Connect MetaMax with running Ganache using ‘Local RPC Server’option in settings.
  3. Take any fake account from ganache.
  4. Register as a voter with NID, wait for transaction to be mined, and then refresh the page
  5. Now you can vote and interact with the contract.

🤝 Contribution

Contributions are welcome!

Feel free to submit a pull request, with anything from small fixes, to full new sections. See the issues for topics that need to be covered or updated. If you have an idea you’d like to discuss, please open up an issue.

GitHub

View Github