
MynaHealth
Zero-knowledge medical eligibility for Japan: prove the condition, keep the record.
Demo
About
MynaHealth is a medical proof primitive for Japan. It turns an issuer-signed dispensing record into a browser-generated Groth16 proof that a treatment rule is satisfied—without releasing the patient name, medication code, exact dispensing day, signature, or source document. A clinic, insurer, or online health service receives a narrow, independently verifiable answer instead of another copy of a sensitive record. The working demo generates eligible and ineligible proofs from synthetic Japanese records. The technical design composes an ENS-named policy, a World IDKit request bound to the medical proof digest, and a replay-protected Solidity gate. We also built a MyNaPortal medication-XML adapter and a second circuit that proves a hidden nine-digit medication code is in an allowed set and matches a blinded SHA-256 commitment. This is the foundation for attaching authenticated web provenance to the private medical proof.
How it's made
The core Circom 2 circuit checks an EdDSA/Poseidon issuer signature, medication allowlist, date window, and holder context using a private record witness. snarkjs creates the Groth16 proof in the React browser; an Express verifier independently checks the public policy inputs. A second compiled circuit proves SHA256(ASCII medication code || 16-byte blinder) and allowed-set membership while the code remains private; an altered public hash fails verification. The YZK-IF-002 adapter parses Japanese MyNaPortal medication XML locally. World IDKit 4 uses an RP-signed request tied to the medical proof digest, with backend World verification and a nullifier replay guard. viem resolves ENS policy metadata; Solidity and Forge model an ENS-resolved gate and test policy mismatch and double-spend rejection. We independently ran a TLSNotary fixture; binding a live authenticated medical response to the commitment is the remaining bridge. Built with Bun, Vite, TypeScript, Solidity, and Foundry.