Engineering

ZKP Engineer

ZKP Engineer

Build the cryptography that powers trustless resolution. Design and implement ZK circuits that make our markets provably fair.

Engineering

Remote

Full time

About the role

We're hiring a ZKP Engineer to build the zero-knowledge infrastructure behind Kash. You'll design and implement circuits for trustless market resolution, privacy-preserving proofs, and cryptographic primitives that make our prediction markets provably fair. If you think in constraints and dream in R1CS, we want to talk.


What you'll do

  • Design and build ZK circuits for market resolution and verification

  • Implement zkTLS and other proof systems for trustless data attestation

  • Optimize circuit performance and proving times

  • Work with smart contract engineers to integrate proofs onchain

  • Research and prototype new cryptographic approaches

  • Contribute to our security architecture and threat modeling


What we're looking for

  • 3+ years working with zero-knowledge proof systems

  • Strong experience with Circom, Noir, or similar DSLs

  • Deep understanding of constraint systems, R1CS, and circuit optimization

  • Familiarity with zkTLS, attestation protocols, or oracle design

  • Solid foundation in cryptography and mathematics

  • Experience with Solidity and EVM integration a plus

  • Bonus: contributions to open-source ZK projects


Zero-knowledge salary:


include "comparators.circom";

template ZKSalaryRiddle() {
    signal input baseFiat;
    signal input tokenChest;
    signal output ok;

    signal total;
    total <== baseFiat + tokenChest;

    component ltLow = LessThan(32);
    ltLow.in[0] <== total;
    ltLow.in[1] <== 250000;
    signal lowOk;
    lowOk <== 1 - ltLow.out;

    component ltHigh = LessThan(32);
    ltHigh.in[0] <== total;
    ltHigh.in[1] <== 300001;
    signal highOk;
    highOk <== ltHigh.out;

    signal tenTokens;
    tenTokens <== tokenChest * 10;
    signal threeTotal;
    threeTotal <== total * 3;
    signal tenTokensPlusOne;
    tenTokensPlusOne <== tenTokens + 1;

    component ltSig = LessThan(64);
    ltSig.in[0] <== threeTotal;
    ltSig.in[1] <== tenTokensPlusOne;
    signal sigOk;
    sigOk <== ltSig.out;

    ok <== lowOk * highOk * sigOk;
}


If you can solve the constraints, you know your comp.

Location: Remote

About the role

We're hiring a ZKP Engineer to build the zero-knowledge infrastructure behind Kash. You'll design and implement circuits for trustless market resolution, privacy-preserving proofs, and cryptographic primitives that make our prediction markets provably fair. If you think in constraints and dream in R1CS, we want to talk.


What you'll do

  • Design and build ZK circuits for market resolution and verification

  • Implement zkTLS and other proof systems for trustless data attestation

  • Optimize circuit performance and proving times

  • Work with smart contract engineers to integrate proofs onchain

  • Research and prototype new cryptographic approaches

  • Contribute to our security architecture and threat modeling


What we're looking for

  • 3+ years working with zero-knowledge proof systems

  • Strong experience with Circom, Noir, or similar DSLs

  • Deep understanding of constraint systems, R1CS, and circuit optimization

  • Familiarity with zkTLS, attestation protocols, or oracle design

  • Solid foundation in cryptography and mathematics

  • Experience with Solidity and EVM integration a plus

  • Bonus: contributions to open-source ZK projects


Zero-knowledge salary:


include "comparators.circom";

template ZKSalaryRiddle() {
    signal input baseFiat;
    signal input tokenChest;
    signal output ok;

    signal total;
    total <== baseFiat + tokenChest;

    component ltLow = LessThan(32);
    ltLow.in[0] <== total;
    ltLow.in[1] <== 250000;
    signal lowOk;
    lowOk <== 1 - ltLow.out;

    component ltHigh = LessThan(32);
    ltHigh.in[0] <== total;
    ltHigh.in[1] <== 300001;
    signal highOk;
    highOk <== ltHigh.out;

    signal tenTokens;
    tenTokens <== tokenChest * 10;
    signal threeTotal;
    threeTotal <== total * 3;
    signal tenTokensPlusOne;
    tenTokensPlusOne <== tenTokens + 1;

    component ltSig = LessThan(64);
    ltSig.in[0] <== threeTotal;
    ltSig.in[1] <== tenTokensPlusOne;
    signal sigOk;
    sigOk <== ltSig.out;

    ok <== lowOk * highOk * sigOk;
}


If you can solve the constraints, you know your comp.

Location: Remote