DEMO FOR OCR READER (Since it got corrupted in our video): https://imgur.com/xcbU6Gi
The COVID-19 Pandemic has led to many people wondering how they are going to vote for their selected leaders in the upcoming elections, especially in the United States where the presidential election will take place this November. People are hesitant to go to voting booths to vote due to the risk of catching the virus. The only options left are online voting, and mail-in voting. However, our traditional system for online voting is very unsafe and there have been many cases in various countries of hackers messing with the votes. As well, many have expressed fears of mail-in voting due to vote spoofing, and a rigging of the election. Motivated by this demanding issue that people keep forgetting about, we have decided to create CryptoVOTE.
What it does
CryptoVOTE is a decentralized web application that securely counts people's votes using a blockchain. The web application also has a verification Optical Character Recognition (OCR) system which reads the user's Voter ID or driver’s licence and verifies it with a simulated government database using MongoDB Atlas to make sure that the individual voting is eligible and real. The utilization of an OCR alongside the blockchain system makes it virtually impossible to hack, through brute force or any other malicious strategy - creating a safe way for people to vote online.
How we built it
We built CryptoVOTE using a wide variety of tools and frameworks. These include ReactJS for the front end, a Blockstack Gaia storage/MongoDB Atlas combo to act as a decentralized backend and store user votes in a blockchain format, Blockstack for the decentralization log in/log out process, and TesseractJS for the OCR verification as well as NodeJS and Express for the non-voting backend.
Challenges we ran into
Most of our challenges lied in deploying the actual application and backend. Due to unknown issues, we spent hours trying to deploy our front-end to firebase, and backend to Google App Engine. However, we later realized it was a combination of Blockstack and MongoDB issues. Due to CORS, we were unable to send POST requests to our backend, until we found out how to allow it in our application. MongoDB also didn’t allow us to deploy to Heroku, as we were unable to whitelist the dynamic IP address for MongoDB Atlas. Lastly, Blockstack caused some hiccups on the way, as it would not allow us to deploy our frontend to Firebase static hosting. However, in the end we were able to figure out the issues, despite it costing us hours.
Accomplishments that we're proud of
We are proud to have learned to create a truly decentralized and safe way of voting in just 24 hours. It was all of our first time creating a blockchain app and we are very excited to have succeeded in making it. We hope that our creation will be able to impact many and provide a safe and secure way to vote.
What we learned
It was our first time building a blockchain app and we learned a lot. We learned how the Blockchain system works, its technicalities, why it is so secure, its potentials for the future and how to build one. We also learned a lot about how backend databases work. After studying the Gaia Storage database and MongoDB Atlas one, we were eventually even able to combine the two to make a decentralized database and that was very exciting.
What's next for CryptoVOTE
CryptoVOTE has the potential to be an extremely useful and versatile app. It solves an urgent and complex COVID-19 issue that determines the fate of entire countries. The election process is extremely important and can not be messed around with at any cost and our app is integral in solving the unsecure online voting problem. We hope to talk to various organizations (whether it be as small as schools having a valedictorian election or as big as the American Presidential election) and offer them our solution to this grave problem.