Skip to content


Repository files navigation


WaveVote is a voting system based on Ethereum. It is inspired and is based on the work of
You can find his work here :
Thanks for his amazing job.

Based of this work, WaveVote :

  • Removed the limit of 40 voters
  • Removed the obligation of all voters to vote => secret is now corrupted by the administrator
  • Add a distributed administration => keep all secret safe until all administrators are corrupted. If one administrator is safe, then all secrets are safe (NOT IMPLEMENTED YET)
  • Add the possibility to organize a multi-candidates election
  • Cryptography is now hidden in the client
  • Use Electron to create a user friendly application
  • Many others things ...

I want directly test the WaveVote Client ! (Might be working !)

It's possible.
To achieve this, you have to download VirtualBox here :
Then, you need to download a Virtual Box LUbuntu image, which contains the client and a local private Ethereum Blockchain which mines automatically. You will find the image here :!050DBCyY!VL3jBwU9wgMMj6SwIRxtDs-rcej3szHxs-rHHP5WcSA
Last thing, import the image into VirtualBox and let's have fun ! The administrator's password is : Vote and the password of all Ethereum's accounts are password.

How to install the WaveVote client ?

1 - git clone <location>
2 - cd \<location\>/WaveVote_Electron
3 - npm install --unsafe-perm
4 - npm start



Download and install NodeJs here :
The project has been tested with this versions :

  • Node : 8.9.3 & npm : 5.5.1

Public Blockchain

At the moment, this project is neither on the testnet nor on the mainnet.

Private Blockchain

A Geth client is included in the application. It will automatically create the genesis block (the genesis file can be changed) and connect to the Blockchain on the networkid 9876. You can change the networkid in the file config.json.
WARNING: the intern geth client work only under Windows. If you want to use the application under Linux or Mac, you have to use an external geth client.


By default, the client will not mine new blocks and will act as a relay. However, you can change the "mine" value to true in the config file, so that the client will mine with a single thread.

{"mine":true, "minethreads":2, ...}

It's possible to set the client as a light node. In this case, the client mandatory act as a relay. To set this, change the value "lightNode" to true in the config file.

{"lightNode": true, ...}

It's possible to use an other geth client. To do this, change in the config file, the value "externGeth" to true and the value "addrProvider" to "IP:8545". For example :

{"externGeth": true, "addrProvider": localhost:8545, ...}

How to install the Smart Contract ?

1 - Install Ethereum-Wallet/Mist :
Warning : the version must be 0.8.10 or you won't be able to compile the contract.
2 - Compile and upload the 3 contracts : WaveVote.sol, LocalCrypto.sol and WaveVoteContractRegistry.sol.
3 - Edit the config file and change the param "WaveVoteContractRegistryAddress" to the new address of the contract WaveVoteContractRegistry.

{"WaveVoteContractRegistryAddress":"0xe73B1eBf7190A66e2b07F39A8cF9A117Db4d2740", ...}

4 - Send two transactions to the Contract WaveVoteContractRegistry to set the abi and the address of the contracts WaveVote and LocalCrypto.
5 - You can now use the client.