Skip to content
Switch branches/tags


Failed to load latest commit information.
Latest commit message
Commit time


Github license GitHub Workflow test Coveralls Linter eslint Code style prettier Repository top language

Semaphore is a zero-knowledge gadget which allows Ethereum users to prove their membership of a set without revealing their original identity. At the same time, it allows users to signal their endorsement of an arbitrary string. It is designed to be a simple and generic privacy layer for Ethereum DApps. Use cases include private voting, whistleblowing, mixers, and anonymous authentication.

The core of the Semaphore protocol is in the circuit logic. However Semaphore also provides Solidity contracts and JavaScript libraries (i.e. @zk-kit/identity and @zk-kit/protocols) to make the steps for offchain proof creation and onchain verification easier. To learn more about Semaphore visit

⚠️ Semaphore V2 has not yet been audited. Please do not use it in production. You can find Semaphore V1 on version/1.0.0.

Deployed contracts


Each Verifier.sol contract can be used with a binary tree of a certain depth. If depth = 20 the tree can have maximum 2^20 leaves (a group of 1048576 members).

Depth Kovan Goerli Arbitrum One
20 0xed75...0E18 0xEFD8...aCe5


Semaphore also provides a Semaphore.sol contract where you can create groups and verify zero-knowledge proof.

Kovan Goerli Arbitrum One
0x1972...8793 0x4400...dE0b