Search projects, hackathons, sponsors and tech

    ← All projects

    zero-shield

    Zero-knowledge, zero friction.

    Demo

    About

    The problem it solves ## The Problem Zero-knowledge proofs are one of the most powerful primitives in Web3 — but they're locked behind a steep wall of complexity. To integrate ZK into a product today, a developer needs to: - Learn Circom circuit syntax - Manually run `snarkjs` commands in the right order - Write custom deployment scripts for verifier contracts - Handle ABI encoding, calldata formatting, and on-chain calls - Debug cryptographic errors with almost no tooling support This isn't a knowledge gap — it's a missing layer of infrastructure. **Most JS developers never even try.** --- ## What zero-shield Solves `zero-shield` is the missing infrastructure layer between a developer and production-ready ZK — built entirely for the JavaScript ecosystem. ### ✳️ For product developers Ship privacy-preserving features without hiring a ZK specialist. Age verification, credential proofs, private voting — all achievable with just your circuit inputs and one function call. ### ✳️ For hackathon builders Go from zero to a deployed ZK verifier on Base in under 10 minutes. No setup rabbit holes. No cryptography detours. ### ✳️ For the ZK ecosystem Every SDK that hides complexity grows the developer surface area of ZK. zero-shield brings ZK within reach of the 20M+ JavaScript developers who would otherwise never touch it. --- ## Concrete Use Cases | Use Case | What zero-shield enables | |---|---| | 🔞 Age verification | Prove you're 18+ without revealing your birthdate | | 🎓 Credential proofs | Prove you hold a degree without exposing personal data | | 🗳️ Private voting | Cast verifiable votes with zero identity leakage | | 💰 Private transactions | Prove solvency without revealing balances | | 🔐 Access control | Gate features behind ZK proofs, not passwords | --- ## The Bottom Line ZK has been "the future" for years. The reason it hasn't gone mainstream isn't the cryptography — **it's the developer experience.** `zero-shield` fixes that.

    How it's made

    Challenges we ran into ## Challenges I Ran Into Building zero-shield meant going through every painful step of ZK integration manually — so developers using the SDK never have to. --- ### 🔧 snarkjs failing silently `snarkjs` commands would exit without clear error messages, making it nearly impossible to tell whether the circuit compilation failed, the trusted setup was incomplete, or the witness generation was broken. **How I got over it:** Mapped every snarkjs command to its expected output files and built validation checkpoints between each step — if an expected file wasn't produced, zero-shield throws a clear, human-readable error telling the developer exactly what went wrong and why. --- ### 📦 Trusted setup output files in the wrong format The Groth16 trusted setup produces multiple interdependent files (`.r1cs`, `.zkey`, `.wasm`). Getting them to play nicely together — especially when paths were mismatched or files were generated out of order — caused hours of silent failures. **How I got over it:** Standardized the entire output into a single named folder per circuit, with a strict generation order enforced by the CLI. This became the `compile` command. --- ### 🔐 Calldata formatting for the Solidity verifier Formatting proof outputs into the exact calldata structure expected by the deployed Solidity verifier was one of the hardest parts. snarkjs exports proof data in a format that doesn't map 1:1 to what the verifier contract expects — requiring manual transformation of `pi_a`, `pi_b`, `pi_c` and public signals into the right ABI-encoded structure. **How I got over it:** Wrote a calldata formatter that handles the full transformation automatically — this is now baked into `verifyProof()` so developers never see it. --- ### 🚀 Deployment to Base reverting unexpectedly Deploying the `verifier.sol` contract to Base would silently revert during certain gas estimation steps, with no useful revert reason returned. Debugging this without a clean error surface was time-consuming. **How I got over it:** Added explicit gas limit overrides and surface-level revert reason decoding to the deploy command, making failures readable instead of cryptic. --- ### 💡 The Bigger Realization Every one of these challenges is something a JS developer building a product would hit — and give up on. That friction is exactly why zero-shield exists. The SDK doesn't just wrap these tools — it absorbs every sharp edge so the developer never encounters them.