Most membership systems have the same tradeoff: to prove you belong, you have to say who you are. A whitelist for a token sale reveals your address. A voter roll reveals your vote. A corporate access system reveals which rooms you entered and when.

Zero-knowledge proofs break this tradeoff. This tutorial builds a working allowlist contract in Midnight's Compact language where a member can prove they belong to an approved set without revealing which member they are. The same circuit handles allowlists, voter rolls, and gated access — they are all the same problem underneath.

What we're building

There are three roles in this system.

Role