Awesome
<img src="./client/immuvoting-logo.svg" height="85">Electronic voting system allowing anyone to act as an auditor and (cryptographically) verify that the election data has not been tampered.
Powered by immudb
Short demo video
How to run it
Prerequisites
-
immudb v0.9.x - the immutable database. GitHub repo is here. More details about it can be found on it's official site.
-
A modern browser (the web interface uses relatively new HTML and ES6 features - e.g. the
featch
API,const
keyword etc.).
Fire it up!
- Run
immudb
NOTE: immuvoting will try to connect to it using default config: localhost
, port 3322
, database defaultdb
and default credentials (have a look in server/main.go for more details)
-
from immuvoting's server folder run:
go get ./...
go run .
to start the HTTP API server (backend)
-
a separate HTTP server needs to be started to serve the frontend (in the client folder) - e.g. if using VSCode, you can just use it's Go Live feature; or you can use any other solution, like
python -m SimpleHTTPServer
.
That's all. You can now access the fronted at http://localhost:<xxx>.
NOTE: Port number depends on the HTTP server you used: default port for VSCode's Go Live it's 5500
, for python's SimpleHTTPServer
it's 8000
.
Miscellanea
- The cryptographic verification of the election data (a.k.a. the consistency proof or tampering proof) is written in Go and it's code resides in server/verifier/verifier.go. It is compiled to WebAssembly (i.e. to client/verifier.wasm) and runs in the browser, on the voter's / auditor's machine, automatically at a fixed interval. For instructions on how to recompile it to WASM, see the README in the server/verifier folder.
How it works: Consistency proofs and Merkle Trees
- The cryptographic verification, a.k.a the consistency proof, is achieved by leveraging the core features of immudb. It is based on Merkle Trees. More details about this can be read, for example, in this article or in this one which explains the Merkle proofs.