leo/examples/vote
d0cd d0c29ce8e0
[Update] snarkvm 0.11.0 (#2377)
* Remove gates from tests

* Remove Finalize test namespace

* Remove gates from examples

* Remove gates from compiler

* Regen expectations

* Add test that gates is allowed as a standard field of a record

* Update Rust version in CI

* Add check for MAX_MAPPINGS
2023-05-10 21:32:37 -07:00
..
inputs [Update] snarkvm 0.11.0 (#2377) 2023-05-10 21:32:37 -07:00
src [Update] snarkvm 0.11.0 (#2377) 2023-05-10 21:32:37 -07:00
.gitignore commit vote example 2022-09-19 14:52:55 -07:00
program.json commit vote example 2022-09-19 14:52:55 -07:00
README.md [Update] snarkvm 0.11.0 (#2377) 2023-05-10 21:32:37 -07:00
run.sh Update example scripts 2023-02-16 09:13:51 -08:00

workshop/vote

Summary

vote.leo is a general vote program.

Anyone can issue new proposals, proposers can issue tickets to the voters, and voters can vote without exposing their identity.

This example is inspired by the aleo-vote example written by the Aleo community.

Noteworthy Features

Voter identity is concealed by privately passing a voter's ballot into a function. Proposal information and voting results are revealed using the public mapping datatype in Leo.

How to Run

To compile this Leo program, run:

leo build

Make changes to vote/inputs/vote.in before running each command.

Propose

Anyone can issue a new proposal publicly by calling propose function.

Run propose:

leo run propose

Output sample:

 {
  owner: aleo1kkk52quhnxgn2nfrcd9jqk7c9x27c23f2wvw7fyzcze56yahvcgszgttu2.private,
  id: 2805252584833208809872967597325381727971256629741137995614832105537063464740field.private,
  info: {
    title: 2077160157502449938194577302446444field.private,
    content: 1452374294790018907888397545906607852827800436field.private,
    proposer: aleo1kkk52quhnxgn2nfrcd9jqk7c9x27c23f2wvw7fyzcze56yahvcgszgttu2.private
  },
  _nonce: 1639660347839832220966145410710039205878572956621820215177036061076060242021group.public
}

Create Ticket

Proposers can create new tickets for proposed proposals.

Ticket is a record with owner and pid, it can be used to vote for the specific proposal - pid, and can only be used(voted) by the ticket owner.

Run new_ticket:

leo run new_ticket

Output sample:

{
  owner: aleo1kkk52quhnxgn2nfrcd9jqk7c9x27c23f2wvw7fyzcze56yahvcgszgttu2.private,
  pid: 2264670486490520844857553240576860973319410481267184439818180411609250173817field.private,
  _nonce: 1637267040221574073903539416642641433705357302885235345311606754421919550724group.public
}

Vote

A ticket owner can use their ticket record to vote agree / disagree with the specific proposal - pid.

Since the ticket record can be used as an input privately, the voter's privacy is protected.

Run agree:

leo run agree

Run disagree:

leo run disagree