A vote that's counted,
never traced.
ShadowPoll is a privacy-preserving Yes/No poll, live on Midnight. Anyone can verify the tally. Nobody โ not even this page โ can see who voted, or how.
Couldn't load live contract state right now: Indexer request failed: 410 Gone
How it works
Public result. Private identity.
Every voter authenticates with a secret key that never leaves their own machine โ a private witness. The circuit derives a one-way hash of that key (a nullifier) and, deliberately, only disclose()s that hash and the Yes/No choice onto the public ledger. The nullifier blocks a second vote from the same key; nobody can work backwards from it to the voter's identity.
export circuit castVote(voteYes: Boolean): [] {
const nullifier = disclose(voteNullifier(voterSecretKey(), kernel.self().bytes));
assert(!nullifiers.member(nullifier), "already voted");
nullifiers.insert(nullifier);
const disclosedVote = disclose(voteYes);
if (disclosedVote) { yesVotes.increment(1); } else { noVotes.increment(1); }
}