ZKaggle is a bounty platform for incentivized decentralized computing on Filecoin's EVM. Bounty providers post ML tasks with token rewards, bounty hunters solve them and prove honest computation with zero-knowledge proofs — without revealing their model weights. It was a finalist at the ETHGlobal FVM Space Warp hackathon.
The project is open source at github.com/yihan2099/ZKaggle.
Problem
Machine learning competitions like Kaggle require participants to upload their models or predictions to a centralized platform. This creates two problems: model IP is exposed, and the platform takes a cut. There is no way for a model owner to prove that their model produces a correct result on a dataset without revealing the model itself.
Solution
A four-transaction bounty protocol on FEVM where zero-knowledge proofs guarantee computational integrity and protect model privacy:
- Create — The bounty provider uploads data to Filecoin via Lighthouse SDK and deploys a bounty contract with a token reward.
- Submit — The bounty hunter downloads the data, runs their model locally, and submits a ZK proof on-chain. The contract verifies the proof and checks the data CID matches.
- Release — The provider reviews the submission and approves payment.
- Claim — The hunter reveals the pre-image of their hashed result. The contract verifies the hash and transfers the reward.
Key Features
- ZK-proven ML inference — A full MNIST CNN classifier (Conv2D → BatchNorm → Poly → AvgPool → Dense → ArgMax) encoded as a Circom circuit using circomlib-ml. The circuit SHA256-hashes the input data to bind the proof to the on-chain CID, and hashes the output with a salt for commit-reveal.
- Private model monetization — Bounty hunters prove their model produced a correct result without revealing weights. The ZK proof is verified on-chain via a Groth16 verifier contract auto-generated by snarkjs.
- Cheap deployment — BountyFactory uses OpenZeppelin Clones (EIP-1167 minimal proxies) to deploy new bounty instances from a template, keeping gas costs low.
- Encrypted storage — Lighthouse SDK encrypts uploaded files on Filecoin so only the paying bounty provider can view hunter-uploaded artifacts (zkey, circuit, verifier), preventing free-riding.
Technical Highlights
The smart contract layer uses Solidity on FEVM with Hardhat, OpenZeppelin Clones for factory deployment, and upgradeable bounty contracts via Initializable + OwnableUpgradeable. CID verification reconstructs bytes32 from two uint128 values and validates against CID v1 constants.
The ZK layer compiles Circom circuits with snarkjs for Groth16 proof generation — both locally and in-browser. The main circuit encodes a two-layer CNN with batch normalization, polynomial activation, and argmax classification. The stat.circom circuit provides reusable Mean and MeanAndVariance templates for statistical computations.
The frontend is Next.js with RainbowKit for wallet connection and wagmi for contract interaction, deployed on Vercel.