What Is Semaphore?
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
Trusted Setup Ceremony
The secure parameters for generating valid proofs with Semaphore circuits were generated in a Trusted Setup Ceremony that was completed with over 300 participants on 29 March 2022.
If you are using one of the previous versions of Semaphore, see the Semaphore V1 or the Semaphore V2 documentation.