1 stable release
1.0.0 | Oct 14, 2020 |
---|
#9 in #tally
Used in edge-signaling
35KB
759 lines
edge_voting
This module contains logic for voting. It currently supports binary and multi-option elections with optional commit/reveal schemes using the Blake2Hash function as the hashing algorithm.
Setup
Install rust or update to the latest versions.
curl https://sh.rustup.rs -sSf | sh
rustup update nightly
rustup target add wasm32-unknown-unknown --toolchain nightly
rustup update stable
cargo install --git https://github.com/alexcrichton/wasm-gc
You will also need to install the following packages:
Linux:
sudo apt install cmake pkg-config libssl-dev git clang libclang-dev
Mac:
brew install cmake pkg-config openssl git llvm
Voting Lifecycle
Votes go through a number of stages, conditional on the type of vote.
- Prevoting
- (Optional) Commit
- Voting
- Completed
Tally types
- One person, one vote
- One coin, one vote
Voting types
- Binary votes
- Multi-option votes
- Commit-reveal votes
Prevoting
The prevoting stage marks the creation of a vote. Additionally, in this stage no voting can take place. This is currently being used by the edge-signaling module.
Commit
The commit stage is used for votes that require commit-reveal schemes. Within this stage, all participants submit commitments. After the commit phase, all participants should reveal.
Voting
The voting stage doubles as a reveal phase when the vote uses a commit-reveal scheme and simply a general public vote otherwise.
Completed
The completed stage marks the ending of a vote, meaning no further votes will be considered in a tally.
Dependencies
~6–16MB
~215K SLoC