Zero-Knowledge Voting Protocol Implementation


Friends - a new competition for developers on the Free TON blockchain has been launched. A whole team of programmers should be involved in this competition, since the task is very complex and multifaceted. A zero knowledge voting protocol needs to be developed on top of the recently submitted TVM Groth16 verification instruction

Contest dates

August 9 - November 8, 2021, 23:59 UTC


In January, 2021, a contest called Challenge MIT/Harvard paper on Blockchain Faults in Election Systems was held, which crowdsourced arguments to defend the position that secure blockchain based elections are possible. As a result, community arguments were summarized in a joint Free TON community paper, which was used by the GBA to foster a discussion with US election officials

=nil; Foundation, as an initial member of the Free TON community developed an upgraded version of the TON Virtual Machine, which includes cryptographic primitives required for usage of zero-knowledge proof verification within virtualized applications. =nil; Foundation also prepared C++ ( and Rust ( ZK proof verification instruction-enhanced TON protocol implementations

Now Free TON has all of the required technologies to run a blockchain mass voting implementation contest

Voting protocols inherently imply voter anonymity, but they should also support voter registration by authorities, so they usually get designed as Zero-Knowledge protocols (e.g. or


Create a voting protocol using the recently submitted VERGRTH16 instruction and make it usable with the FreeTON protocol


General requirements

● Must be a correctly functioning FreeTON virtualized application deployed either to ( or to or to

● Must Involve VERGRTH16 TVM instruction usage

● Must ensure the bulletin maintains its integrity

● Must ensure the ballot box is a non-malleable one

● Must ensure that the ballot guarantees privacy of the voting message while also guaranteeing that the voter cannot reproduce their vote

● Must allow the voter to verify the inclusion of their vote, and also ensure that others cannot coerce the voter to create a false ballot

● The ballot must only be generated for eligible voters

● Must ensure that voting results uniquely correspond to the ballots in the public board

● Must ensure that ballots do not reveal voter identity to any entities, even authorities

● Must ensure that ballots are unique to only the individual voting and there is no possibility for proxy votes

● Must contain the following actor roles: ○ Voter. ○ Verifier. ○ Ballot Issuer

● Must contain definitions for the following items: ○ Ballot. Required not to disclose the Voter's decision until the Ballot Issuer decides to. ○ Voter Registry. Proves a particular Voter is eligible to vote

● Must contain a Ballot Issuer Voter registration procedure: ○ Voter generates some public identifier. ○ Voter submits the public identifier to the Ballot Issuer. ○ Ballot Issuer introduces the Voter's identifier to the Voter Registry

Additional requirements

● Fraudulent ballot generation complexity should be no less than EdDSA over Ed25519 brute force complexity (not an extremely formal requirement, but it is okay since the public voter identifier could be, for example, a EdDSA public key)

● Voting results disclosure should be not possible until the voting is ended. Evaluation criteria and winning conditions

● Apart from uploading a submission, a code should be submitted in accordance with and deployed either to ( or to ( or

● Each contestant should present their solution at a convenient time agreed upon in advance with DevEx Sub-governance members. A solution should include tests with clear instructions

● If a test does not cover some scenarios, then jurors can develop their own tests; however, if the burden falls on the jurors, the contest submissions scores should lose some points

● The solution should have an open source license

● The solution should contain at least a draft of the architecture description which is implied to contain following parts: ○ In-TVM part. Proof verification part. This part is supposed to be done with VERGRTH16 instruction usage and executed within the TVM. ○ Native part. Circuit definition. Proof generator


1 st prize - 600,000 TONs
2 nd prize - 300,000 TONs
3 rd prize - 100,000 TONs
4 th prize - 20,000 TONs
5 th prize - 18,000 TONs
6 th prize - 16,000 TONs
7 th prize - 14,000 TONs
8 th prize - 12,000 TONs
9 th prize - 10,000 TONs
10 th prize - 8,000 TONs

Landing page
Official news
Chats /
Introduction to FREE TON (short course)
Coingecko -Криптовалюты/ton-crystal

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!