Skip to main content
Version: V2

What Is Semaphore?

Overview​

Semaphore is a zero-knowledge protocol that allows users to prove their membership in a group and send signals such as votes or endorsements without revealing their identity. Additionally, it provides a simple mechanism to prevent double-signaling. Use cases include private voting, whistleblowing, anonymous DAOs and mixers.

Features​

With Semaphore, you can allow your users to do the following:

  1. Create a private identity and get a provable anonymous public identity.
  2. Add an anonymous public identity to a group (i.e. Merkle tree).
  3. Anonymously broadcast a signal if the user joined the group and hasn't yet used the nullifer.

Semaphore uses on-chain smart contracts and off-chain zero-knowledge components that work in tandem.

  • Off chain, zero-knowledge components allow users to generate identities and proofs.
  • On chain, smart contracts manage groups and verify proofs that, if valid, allow the smart contract to update its state.

Developer benefits​

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​

The core of the protocol is in the circuit logic. In addition to circuits, Semaphore provides Solidity contracts and JavaScript libraries that allow developers to generate zero-knowledge proofs and verify them with minimal effort.

The Semaphore V2 codebase was audited with a focus on the smart contracts and the Circom circuits. See the audit summary.

info

If you are using the previous version of Semaphore, see the Semaphore V1 documentation (code).