Bring World ID to Mina, as a core building block for zkApps, to enable all kinds of use cases from private voting, private transaction and more. It includes a demo UI and mock sequencer.
This project is an exploration in what it takes to make World IDs - the proofs of personhood (PoP) issues by Worldcoin and it's "orbs" - available on Mina zkApps. We ported Semaphore to snarkyjs and create an e2e demo by adding a mock sequencer (which maintains the PoP Merkle tree) and a demo UI showing 2 simple PoP use cases.
snarkyjs and the universal JavaScript stack it enables, with a React UI, two small node js servers, and a couple of zk smart contracts written in JS.
I had to make some concessions regarding compatibility with Worldcoin, owing to different hash functions being available / efficient. This points in the direction that a separate Merkle tree, originating from the same private key, will have to be maintained to enable flexible use in foreign zk proof systems. Ideally, at least public keys should be the same, however for this hackathon, I just went with recreating everything from scratch based on Mina's Poseidon version, since there was no solution in reach to actually use parts of Worldcoin's data.