[NRG Proposal] Semaphore in Noir #7498
chancehudson
started this conversation in
[NRG#3] Semaphore
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This is a proposal to build a Semaphore implementation in Noir along with associated Javascript and Solidity bindings. The implementation will be compatible with the Semaphore v4 npm packages and circom circuits.
This proposal includes:
Team members
Chance Hudson - former PSE engineer
Bhargav Annem - undergraduate at Caltech, former PSE grantee
Timeline
Weeks 1-2: Noir circuit with tests, Javascript bindings for calling/testing the noir circuit
Weeks 3-4: Javascript wrapper package, solidity verifier (both with tests against existing npm package)
Week 5: Demo application
Start date: flexible based on approval.
Detailed description
This section contains detailed descriptions of what is to be built and what will be changed in the Semaphore library.
Noir implementation
The Semaphore Noir implementation will live in it's own repository. We'll use the zk-kit.noir merkle tree implementation, and a jubjub key implementation based on jat9292/noir-elgamal. This is a small wrapper around the noir standard libraries.
A rough sample can be seen here.
This implementation will be tested against @semaphore-protocol/identity for compatibility.
Solidity implementation
The Solidity implementation will include a change to
@semaphore-protocol/contracts
. Specifically we'll modify SemaphoreProof to separate the public signals and the proof data. We'll make variants such asSemaphoreProofGroth16
,SemaphoreProofUltraplonk
, etc. with verification and validation functions inSemaphore.sol
.This implementation will include tests to generate and verify proofs from the Noir implementation above.
Javascript wrapper
We'll include a Javascript wrapper for generating Noir proofs with a similar api to @semaphore-protocol/proof. The delivered package should be suitable for integration into the semaphore-protocol monorepo.
Web demo
We'll include a web demo that generates a semaphore group, adds members, and generates membership proofs in browser. We'll deploy a Semaphore contract to the Sepolia testnet and allow the web demo to modify this contract arbitrarily.
Beta Was this translation helpful? Give feedback.
All reactions