This project is an experiment in the Zero Knowledge Machine Learning (ZKML) space where we attempt to verify the output of a Machine Learning (ML) model given a private input. The idea is to have the user of our front-end application take a picture of themselves smiling, run it through the ML model and create a proof of the process, all on the client side. We deploy a verifier on chain and once the user has their proof, they can post that on chain during the minting process of an NFT. This NFT has voting power in the dao and can make proposals, vote, and execute actions of the DAO through tally.
We fine tuned EfficientNet with a 97% recall for the machine learning side of things. We then exported the neural net to an ONNX file in order to generate the circuit, proofs, and verifier.
EZKL by ZKonduit is a tool that takes ONNX files and converts them into verifiable circuits with options to show and/or hide the input, model parameters and output. The tool also can create a solidity verifier for easy verification on chain. Unfortunately, while attempting to convert the model into a circuit, we learned that the limitations of the technology currently do not allow for a model of this size to be converted.
For the front end we chose to use VanillaJS and WASM bindings for EZKL to use on the front end for proof generation. We also used Ethers.js, jquery, solidity, and foundry.