Weekly Meeting Minutes 25/1/23 === :::info - **Date:** Jan 25, 2023 7:30 AM (UTC) - **Agenda** 1. Grant Milestone Status Summary 2. New Nullifier Milestone 3. AnonMinting Service - **Participants:** - Blake [name=BlakeMScurr] - Gauthier [name=r1oga] ::: [Grant Milestones](https://hackmd.io/EzB7W6GcRn-IhAmoyij78Q?view) Status Summary --- - [ ] 1. Setup - [x] 1.1 - [x] 1.2 - [ ] 1.3 - [ ] 2. Public Key Recovery Template Replaced by [non membership template milestone](https://hackmd.io/EsmnIXHhSaim3O9PlTiIHw#Circom-Set-Non-Membership-Circuit). [PR](https://github.com/privacy-scaling-explorations/e2e-zk-ecdsa/pull/76) submitted, waiting for reviews. - [x] 3. Pub key validation template: done. Not paid - [x] 4. ecrecover: irrelevant Because we can pass the pub key to the circuit instead of deriving it from sig To replace with [new nullifier milestone](#New-Nullifier-Milestone). - [x] 5. Set Membership circuit: done. Not paid - [ ] 6. Blog post New Nullifier Milestone --- Several ideas for a public nullifier have been discussed in the past weeks. - $N=Poseidon(signature)$ where $signature$ would use RFC6979(deterministic nonce) ([name=Wanseob]) - going around the nullifier problem by integrating with [Unirep](https://developer.unirep.io/) > We can build a unirep attester that gives an Ethereum address to a semaphore identity as user data. When the user wants to sign up with another platform they can prove control of an Ethereum address by proving their unirep user data. [name=Chance] Although this idea is appealing, the *e2e-zk-ecdsa* intends to achieve an end to end proof of membership zk workflow without having to rely on onchain contracts to manage anonymity sets / merkle trees, so we'll exlude that option. - Collaborate with [Personae Labs](https://personaelabs.org/) and build on ~~[zk-nullifier snap](https://ethglobal.com/showcase/zk-nullifier-snap-6a9sq)~~ [full PLUME proof](https://hackmd.io/VsojkopuSMuEA4vkYKSB8g?view) This is the option we will go forward with. **[name=BlakeMScurr] to prepare corresponding new milestone description.** AnonMinting Service MVP --- ### Product Walkthrough 1. connect with metamask 2. Sign message 3. Ask for receive address 4. See an animation showing progress: a. "Generating offchain zk proof..." b. Sending proof to relay... c. Relay broadcasting tx to verifier contract... d. Minting AnonNFT... 5. User has received his AnonNFT on the provided address ### UX **UX of zk app should be: gasless, 5s anonymous final tx** ### Features - web interface - anon onchain minting - tx relaying - proof generation: remote - offchain - proof verification: in browser + on chain verifier contract - docs - can't reuse proof (nullifying) ### Implementation - [ ] circuit (*in grant's scope*) - [x] circom membership template(s) - [ ] nullifier - [ ] Documentation website - [x] [Query API](https://github.com/privacy-scaling-explorations/e2e-zk-ecdsa/tree/main/apis/query) Serve list of punk owners as of latest block - [ ] Proofs generation server API (*in grant's scope*) Node JS server (with circomlibjs, snarkjs)? To be confirmed POST endpoint that accepts a signature, returns a proof - [ ] Minting contract on a test network (For 1 NFT collection (crypto punk)) Receive a proof and a receive-address. Verify proof. Send AnonNFT to receive address - [ ] Relayer or simply start with faucet Anymously send transactions to minting contract - [ ] User interface React web app that implements a workflow describe in [product walkthrough](Product-Walkthrough)