Semaphore is a zero-knowledge protocol that allows you to cast a signal (for example, a vote or endorsement) as a provable group member without revealing your identity. Additionally, it provides a simple mechanism to prevent double-signaling. Use cases include private voting, whistleblowing, anonymous DAOs and mixers.
With Semaphore, you can allow your users to do the following:
- Create a Semaphore identity.
- Add their Semaphore identity to a group (i.e. Merkle tree).
- Send a verifiable, anonymous signal (e.g a vote or endorsement).
When a user broadcasts a signal (for example: a vote), Semaphore zero-knowledge proofs can ensure that the user has joined the group and hasn't already cast a signal with their nullifier.
- On chain, Solidity contracts can be used to manage groups and verify proofs.
Semaphore is designed to be a simple and generic privacy layer for decentralized applications (dApps) on Ethereum. It encourages modular application design, allowing dApp developers to choose and customize the on-chain and off-chain components they need.
About the code
If you are using the previous version of Semaphore, see the Semaphore V1 documentation.