zkbounty
Developers

Prove physical action in three calls

The SDK reads hardware metadata, strips PII, and produces a succinct proof. The on-chain verifier does the rest. No proving infrastructure to run.

SDK v1.0 · stable
Quickstart

From capture to settled proof

1

Install

terminal
npm install @zkbounty/zk-sdk
2

Capture & attest on-device

capture.ts
import { ZkBounty } from "@zkbounty/zk-sdk";

const zk = new ZkBounty({ cluster: "mainnet-beta" });

// reads enclave signature, GPS lock, sensor sig + slot hash
const attested = await zk.capture({
  bountyId: "bnt_3f9a…",
  action: "photo",
});
3

Prove & submit

submit.ts
// strips PII, generates the zk proof locally
const proof = await zk.prove(attested);

// verifier program settles in one transaction
const receipt = await zk.submit(proof);

console.log(receipt.status); // "verified"
console.log(receipt.slot);   // 318_540_991
console.log(receipt.payout); // 12 SOL -> your wallet

That's the whole flow.

No backend, no proving cluster, no review step. The proof is generated on the hunter's device and verified by the on-chain program.

API reference

REST · base https://zk-bounty.com/v1

GET/v1/statsNetwork stats - live bounties, escrow, capability
GET/v1/bountiesList and filter open bounties and their criteria
GET/v1/bounties/:slugFetch a bounty and its submissions
POST/v1/bountiesDeploy a bounty and fund its escrow vault
POST/v1/proofsSubmit a generated proof for on-chain verification
GET/v1/proofs/:idFetch a submission's verification status
GET/v1/activityRecent network activity feed

Circuit registry

One circuit per action class.

CircuitStatus
physical_action_v2live
sensor_log_v1live
geo_scan_v1live
cold_chain_v1beta
Attestation mask flags:ENCLAVE=1<<0GEO=1<<1SENSOR=1<<2SLOT=1<<3