Crypto based vote without ZK

There are many ZK-based projects, one of the famous use cases is voting.
However, due to the hard math and computation, we are not quite sure if ZK is the only direction.

During today’s discussion, meta suggested that we could just hide the users’ voting results before the voting ends. This idea is very web2, but I think we can do a bit more towards crypto.

I propose to use crypto commitment and hash time-lock to build a voting system.
Commitment is an important and simple concept in ZK. However, it is useful for voting.

Users should hash their voting choice so that everyone can see who has voted, but nobody can guess the result unless the user reveals the result.
It is a simple solution. However, from a product perspective, people vote and leave. It is hard to call a user back to reveal his voting result after voting. In such a case, most of the voting can never show the results.

So, another crypto tool named time-lock will help us.
Before the user participates in the voting, he may use his spare computation to prepare a voting ticket.
Depending on the computation he spends on the key, we can estimate how much computation or time must be used to unveil the result. This is said, if we set the voting unveiling time 3 days from now, we can choose a prepared ticket and do the vote.

After voting, whoever is online helps the voting system to unlock. But even if more people join, the task cannot speed up with parallel computation. It is limited by the fastest single-core CPU/GPU/ASIC to show the result in the fixed future moment.

OK, that’s my voting system proposal. I think we can build it together with fairsharing project so we can record the work amount and do the voting at the same place.

It is not a perfect crypto scheme, but useful in the product.
The point I learned from LXDAO community is that people need to hide their results during the voting, to avoid bias from other votes. We don’t need absolute privacy to know you’re voting and the results without knowing what you have voted.


The voter gave the voting result with hash and proof of the voting result during the progress, but it seems that the voter can vote again or change the voting result

1 Like

Time-lock is one requirement, but anonymous voting is another more important requirement. No matter when unlocking the voting result, voters are able to be hidden.