# PSE Acceleration Program: Semaphore ERC7579 Validator Module
## Project Overview
### Overview
[Semaphore](https://semaphore.pse.dev/) is a zero knowledge component that allows users to prove their group membership and send signals without revealing their original identity.
With the recent development of Account Abstraction [ERC-4337](https://www.erc4337.io/) and Minimal Modular Smart Account [ERC-7579](https://erc7579.com/), these advancements allow a smart account to install modules to gain extra functionalities.
The objective of this accelerator program proposal is to develop a Semaphore ERC-7579 validator module so when this module installed, the smart account allows Semaphore group members (of that particular account) to sign transactions on behalf of the account. I will also integrate [MultiFactor validator](https://github.com/rhinestonewtf/core-modules/blob/main/src/MultiFactor/MultiFactor.sol) so a transaction requires a M (1<=M<=N) of N member signatures, behaving like a multisig wallet. M is configurable by the Semaphore group admin.
One advantage of this setup compared to a normal multisig wallet is that signers' privacy is preserved. Because of the [smart account interaction model](https://www.erc4337.io/docs/understanding-ERC-4337/architecture), the original transaction initiator sends http/RPC requests to a bundler, and the bundler in turn sends the transaction on-chain with paymaster configured to pay for the tx fee. So we won't be able to trace who the original transaction initiator is.
### Project Details
The idea of this project has been explored by Saleel, and is documented in [his blogpost](https://saleel.xyz/blog/zk-account-abstraction/). It was built at a time when the tool stack was still primitive. In this proposal, I aim to formalize this and solve [semaphore-protocol/semaphore#345](https://github.com/semaphore-protocol/semaphore/issues/345). When a smart account owner install this Semaphore ERC-7579 module to a smart account, a new Semaphore group is created. The user becomes the admin of the group and can manage the members inside. Any members in the Semaphore group will be able to send a zk proof of transaction on behalf the smart account. This is like a 1/N mult-sig wallet, with N being the number of members in the Semaphore group.
Next, [MultiFactor validator](https://github.com/rhinestonewtf/core-modules/blob/main/src/MultiFactor/MultiFactor.sol) will be integrated to work with Semaphore validator to make it behave as a M of N multisig wallet. This module will be integrated via [ModuleSDK](https://docs.rhinestone.wtf/module-sdk) to demonstrate the composibility of ERC-7579 modules.
At the end of the proposal, the following will be delivered:
1. Semaphore ERC7579 validator module, making it a 1-of-N wallet.
2. Integration with MultiFactor validator, making it a M-of-N wallet.
3. End-to-end test code for testing the following behaviors:
- installing the module to a smart account
- admin adding/removing members, switching admins
- sending transactions with M of N member signatures
- uninstalling the module from the smart account
4. Inline code documentation.
5. A front-end demo allowing users to install this module to their smart accounts, add members (identity commitments) to the semaphore group, and sending zk proofs, all happening on a chosen testnet.
6. A writeup to introduce what has been done and give a technical overview of the module.
#### Overview of the technology stack to be used
- Solidity, and related contract libraries
- Rhinestone [ModuleKit](https://docs.rhinestone.wtf/modulekit) and [ModuleSDK](https://docs.rhinestone.wtf/module-sdk)
- Hardhat
- Foundry
- Docker for setting up local and testing environment with a [bundler](https://docs.pimlico.io/infra/bundler).
- Next.js, and related front-end libraries for the front-end demo
#### PoC/MVP or other relevant prior work or research on the topic
- Saleel's [semaphore-wallet](https://github.com/saleel/semaphore-wallet) and [blogpost](https://saleel.xyz/blog/zk-account-abstraction/).
- Github discussion among Saleel, Cedoor, John, and myself on exploring this subject: [semaphore-protocol/semaphore#345](https://github.com/semaphore-protocol/semaphore/issues/345)
- My other PRs on Semaphore: [PR#875](https://github.com/semaphore-protocol/semaphore/pull/875), [PR#883](https://github.com/semaphore-protocol/semaphore/pull/883)
## Team 👥
### Team Members
- Jimmy Chu
Email: jimmychu0807@gmail.com
Telegram: [@jimmychu0807](https://t.me/jimmychu0807)
Discord: [@jimmychu0807](https://discord.com/users/jimmychu0807)
### Team Website
website: https://jimmychu0807.hk/
### Team's experience
I participated in the [PSE Core Program 2024 - Taiwan](https://pse.dev/en/programs), and delivered a capstone project of a zero-knowledge [Number Guessing Game](https://jimmychu0807.hk/pse-core-capstone-project), built upon [Semaphore boilerplate](https://github.com/jimmychu0807/PSE-core-capstone).
I previously worked in [Parity](https://www.parity.io/) as Polkadot developer advocate and [CESS](https://cess.network/) as developer advocate advisor. Other prior experience can be seen in [my github profile](https://github.com/jimmychu0807#overview). Other prior experience can be seen in [my github profile](https://github.com/jimmychu0807#overview).
### Team Code Repos
<https://github.com/jimmychu0807>
## Development Roadmap 🔩
### Overview
- **Total Estimated Duration:** 4 weeks
- **Full-time equivalent (FTE):** 1
- **Total Cost:**: $10,000
- Expected Start Date:
- Expected End Date:
### Milestone 1: M-of-N Semaphore validator module
- **Estimated Duration:** 2 weeks
- **FTE:** 1
- **Cost:** $5,000
- Estimated delivery date:
#### Deliverables and Specifications
##### 1. Semaphore ERC7579 validator module
It will be a module in ModuleKit validator. Semaphore and related contracts will be deployed to be used in the validator module. With this module, the smart account behave like an 1-of-N multisig wallet.
##### 2. Integration with MultiFactor validator
Using ModuleSDK to integrate MultiFactor validator with Semaphore validator developed above. With this integration, the smart account will behave like an M-of-N multisig wallet.
##### 3. End-to-end testing code
Both hardhat and foundry test will be written to cover 85% of the Solidity code for unit tests. Local development environment can also be spin up by Docker-compose to run end-to-end test of the module.
##### 4. Inline code documentation
All public functions of the module contract will be documented according to [NatSpec format](https://docs.soliditylang.org/en/latest/natspec-format.html).
### Milestone 2: Front-end demo, deployment scripts, and writeup
- **Estimated Duration:** 2 weeks
- **FTE:** 1
- **Cost:** $5000
- Estimated delivery date:
#### Deliverables and Specifications
##### 5. Front-end demo & deployment scripts
A front-end demo will be able to spin up locally with a single `yarn` command. Because it relies on existing EntryPoint singleton and Paymaster contract to work, the locally running front end will need to connect to a testnet in order to execute all the functionality of the module.
Deployment scripts will be developed for front end being deployed to [Vercel hosting](https://vercel.com/) and smart contracts deployed on a chosen testnet.
##### 6. Writeup
A writeup will be submitted for review giving a technical overview of the project.
## Notes
- Thanks John Guilding for [the proposal feedback](https://github.com/semaphore-protocol/semaphore/issues/345).