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.
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.
To compile this Leo program, run:
leo build
Make changes to vote/inputs/vote.in
before running each command.
Anyone can issue a new proposal publicly by calling propose
function.
Run propose
:
leo run propose
Output sample:
{
owner: aleo1kkk52quhnxgn2nfrcd9jqk7c9x27c23f2wvw7fyzcze56yahvcgszgttu2.private,
gates: 0u64.private,
id: 2805252584833208809872967597325381727971256629741137995614832105537063464740field.private,
info: {
title: 2077160157502449938194577302446444field.private,
content: 1452374294790018907888397545906607852827800436field.private,
proposer: aleo1kkk52quhnxgn2nfrcd9jqk7c9x27c23f2wvw7fyzcze56yahvcgszgttu2.private
},
_nonce: 1639660347839832220966145410710039205878572956621820215177036061076060242021group.public
}
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,
gates: 0u64.private,
pid: 2264670486490520844857553240576860973319410481267184439818180411609250173817field.private,
_nonce: 1637267040221574073903539416642641433705357302885235345311606754421919550724group.public
}
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