#voting #module #binary #commit #tally #auxiliary #commit-reveal

no-std edge-voting

Edgeware auxiliary voting module

1 stable release

1.0.0 Oct 14, 2020

#9 in #tally


Used in edge-signaling

GPL-3.0-or-later…

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.

  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-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