Loops House

Devcon 8: Build Battle 3
Prove It, Don't Reveal It
Build Battle: Count Every Vote, Name No Voter
This is a 24-hour build sprint around one problem. You build in your own public GitHub repo, and an AI judge reads your code against the brief and the rubric. It never runs the code. The checks and their point values are on the problem page, so you can see what counts as good before you write a line.
The challenge
Priya represents 38 nurses on a hospital night shift. They need to vote on filing a complaint about unsafe staffing. A show of hands in front of a supervisor failed them, and a group-chat poll put every name next to every answer.
Build the vote they can trust: only the 38 can vote, each of them once, nobody (including Priya) can tell who chose what, and anyone on the ward can check the result.
The test is simple: the tally is right, and no vote can be traced to a nurse.
Build it with zero-knowledge proofs
Semaphore lets someone prove "I'm a member of this group" without revealing which member. Here's what's worth knowing for this battle:
- Identities and groups: each voter creates a secret identity on their own device and shares only a commitment to it. The commitments form a Merkle-tree group.
- Nullifiers and scopes: the scope is the topic, such as one ballot. The nullifier is unique to one identity in one scope. Store the nullifier and you stop double voting without learning who voted.
- Message: the vote travels inside the proof as its message, so nobody can change it in flight.
- Check what the proof doesn't: Semaphore proves membership and uniqueness. Your contract still has to pin the scope to the right ballot, enforce the closing time, and count the choice that's in the proof.
- Watch the metadata: a perfect proof sent from a nurse's own wallet still names her. Think about who submits each transaction and what that party can see.
- Tooling: Semaphore V4 (@semaphore-protocol/core), Solidity, Foundry, TypeScript and viem.
You can update your entry until the deadline. Join the challenge now.
FAQ
Frequently asked questions
How does scoring work?
+
Submissions are scored by an AI judge against each problem's judging criteria. Your battle score is the difficulty-weighted average across all problems — attempting more problems earns more — and ratings update once results are finalized.
Can I work in a team?
+
Yes — the team size limits are shown on this page. Everyone on the team shares the submission and the rating outcome.
What do I need to submit?
+
A GitHub repository with your working project, plus a short walkthrough video. You can keep updating your submission until the build window closes.