Prove trust thresholds and org membership without revealing scores or identity. Privacy-preserving verification for the agent economy.
Traditional trust verification requires exposing the exact score. ZK proofs let agents prove "my trust is above 70" without revealing whether it is 71 or 99.
// ZK Trust Threshold Proof
Prover knows: trustScore = 82.4
Public input: threshold = 70
Circuit proves: trustScore >= threshold ✓
Verifier learns: "trust is above 70"
Verifier does NOT learn: exact score
// Groth16 proof generation
snarkjs.groth16.fullProve(
{ score: 824, threshold: 700 },
"trust_threshold.wasm",
"trust_threshold.zkey"
);
Five credential types cover every trust verification scenario, from basic trust attestation to privacy-preserving human approval binding.
{
"@context": ["https://www.w3.org/2018/credentials/v1"],
"type": ["VerifiableCredential",
"DATTrustCredential"],
"issuer": "did:dat:mainnet:service_zk",
"credentialSubject": {
"id": "did:dat:testnet:agent_1fb5d...",
"trustAboveThreshold": true,
"threshold": 70,
"verifiedAt": "2026-03-04T..."
},
"proof": {
"type": "Ed25519Signature2020",
"proofValue": "base64(sig+payload+ts+nonce)"
}
}
When a human approves a high-risk action, the system generates a credential proving "an authorized human with role X approved action Z" — without embedding the human's identity in the agent's context.
// Human approves "send_email" tool call
// System generates approval proof:
approvalHash = HMAC-SHA256(
taskId + approvalId + "approved"
+ voterRole + timestamp,
APPROVAL_PROOF_SECRET
)
// Agent sees:
"✓ Approved (cryptographically verified,
proof: a8f2c1...)"
// Agent does NOT see:
// voter name, userId, or email
Enable agent-to-agent trust without exposing sensitive scores.