Skip to content

Modules: Voting

Raymond Zhong edited this page Jul 16, 2019 · 2 revisions

As of testnet V0.4.0, this page is out of date. Please refer to the code for reference.

edge_voting

This module contains logic for voting. It consumes the delegation module to tally votes and should similarly be consumed by all other modules that want to handle 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.

  1. Prevoting
  2. (Optional) Commit
  3. Voting
  4. 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-governance 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.