Using MetaMask snaps to generate ZK nullifier in privacy-preserving way
This project is a MetaMask snap that exposes a method for constructing a novel ZK-nullifier scheme. This scheme takes advantage of a secure execution environment and access to private key entropy provided by MetaMask snaps API. Thanks to those features we are able to derive a ZK-nullifier without leaking sensitive outputs to the browser.
Read more about the ZK-nullifier scheme used here: https://docs.google.com/presentation/d/1mKtOI4XgKrWBEPpKFAYkRjxZsBomwhy6Cc2Ia87hAnY/edit?usp=sharing
This project takes advantage of MetaMask's snap API in order to access private key entropy and use it to generate a ZK-nullifier. The snap itself is partly in TypeScript, and partly in WASM. The WASM component was compiled from Rust sources that implement said ZK-nullifier.
The project also implements a ZK proof-verification component on the frontend. This component would be used to verify the integrity of the nullifier produced by the snap. This component is implemented with snarkjs Groth16 prover, but because the nullifier implementation is incomplete (the circuits are missing), proving is not yet possible.