This proposal aims to be a small stepping stone toward #2 of Brian Gu’s Six ZK Moonshots. The idea is to have an on-chain data marketplace where users can trade private data, for example, “a high-res image that downsamples to a known low-res image”, using ZK. Within the scope of this proposal, the MVP is to implement a dApp that (0) use ZK to prove that the low-res image is downsized from an actual high-res image, (1) mint an NFT that contains the downsized image, *as well as the hash of the original image, (2) implement an in-browser camera for authentic on-chain photo-taking, and *(3) a marketplace providing secured transfer of the underlying full-res image.
*=optional/nice to have
GitHub - socathie/zkPhoto: Private authentic photo sharing using ZKP
This project demonstrates a small stepping stone toward #2 of Brian Gu's Six ZK Moonshots. The idea is to have an on-chain data marketplace where users can trade private data, for example, "a high-res image that downsamples to a known low-res image", using ZK.
GitHub - socathie/zkPhoto-ui: frontend for zkPhoto
This project was bootstrapped with Create React App. In the project directory, you can run: Runs the app in the development mode. Open http://localhost:3000 to view it in the browser. The page will reload if you make edits. You will also see any lint errors in the console.
Phase 0: downsizing photo with ZKP
MVP: a verifier contract that takes a private input of the fixed-size high-res image and outputs the low-res image *and the hash of the original image
Input: an image of resolutions 1024x1024 in png format
Output: a downsized image of resolutions 64x64 and the hash of the original image
Phase 1: NFT minting
MVP: a smart contract that mints an NFT given the downsized image and *the hash of the high-res image
Requirements of the zkPhoto smart contract
Phase 2: on-chain photo taking
MVP: an in-browser js camera that takes a photo then mints a zkPhoto NFT directly
Phase 3: secured transfer of private data