FAQ
Where can I ask questions about Semaphore?​
You can ask questions about Semaphore on Telegram or by opening a Semaphore Discussion. The most frequent questions will be listed below.
Why should I prevent proofs from being verified twice?​
Since zero-knowledge proofs are completely anonymous, it is important to prevent those generated by eligible identities from being reused by a malicious party.
For example, in an anonymous voting application a valid proof could be reused to vote again.
What is the difference between the "nullifier" and "scope"?​
The scope is used like a topic on which users can generate a valid proof only once. The scope is a public value and every one can see what the scope of a proof is.
The nullifier is the hash of the private key of the identity and the scope, and it is used to check if the same proof with that specific scope has already been generated by the same user. The nullifier is also a public value and it is what is actually stored to prevent, for example, double-voting.
In the case of a voting application, if you have a group and you want all members of this group to vote only once, you can use the id of the group as the scope. When a user votes the first time, you can store the hash of voter's private key and the group id (i.e., the nullifier) and prevent double-voting by checking if that hash already exists.
See the Semaphore circuits for more technical information, or the Semaphore boilerplate for a real use-case.
Where can I find examples of applications using Semaphore?​
You can find a complete list of applications that are using Semaphore on the Semaphore website.
How can I start a project using Semaphore?​
There are three ways you can start using Semaphore in your project: using the CLI, using the boilerplate as a template or forking it, or installing the Semaphore packages manually.
How can I contribute to the protocol?​
There are several ways you could contribute to the protocol, you can find more information about on Github.