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); }
}