# OpenVerdict A decentralized adversarial AI jury protocol for factual disputes. Five juror seats are drawn on-chain from three model families (DeepSeek, Kimi, MiniMax, all served through GonkaRouter); each juror researches the claim alone, then casts a commit-reveal secret ballot, and a deadlock goes to a bounded cross-examination over frozen evidence. Verdicts settle on Sui as immutable resolution certificates anyone can recompute, with every opened page, run bundle and evidence manifest public on Walrus. Live on Sui testnet. Anyone can stake 0.1 SUI on a juror seat and earn that seat's jury rewards. ## Docs Paths below are relative to the repository root; no public repository URL is published yet. - `README.md`: the product, the architecture, the honest limits. - `AGENTS.md`: how a coding or chat agent uses OpenVerdict. - `docs/API.md`: every public API route, with limits and status codes. - `docs/PRD.md`: complete protocol semantics. - `docs/GONKA-INTEGRATION.md`: model pinning, per-turn request ids, receipts. ## Live - App: https://app.openverdict.info - API base: https://app.openverdict.info/api - The board: https://app.openverdict.info/claims - Submit a claim: https://app.openverdict.info/fact-check - Recompute a verdict in the browser: https://app.openverdict.info/verify ## How to audit a claim No key, no wallet, no database. Start from a claim link (`https://app.openverdict.info/claims/`) or a bare 0x id. Read the record: - `GET /api/claims/`: state, phase, deadlines, attempt. - `GET /api/claims//report`: the verdict, the final-round votes and `auditBundle` (committee, evidence roots per phase, runs, run approvals, commitments, reveals, certificate). The spine of an audit. - `GET /api/claims//runs//proof`: one juror run, its hashes, its sealed and revealed Walrus blob ids, and the Sui objects behind it. - `GET /api/claims//events?snapshot=1`: the resolution event log (leave off `snapshot` for the live Server-Sent Events stream). - `GET /api/gateway-receipts/`: GonkaRouter's public receipt, proxied only because the gateway sends no CORS headers. Check it against sources that are not ours: - Sui JSON-RPC: `https://sui-testnet-rpc.publicnode.com` or `https://fullnode.testnet.sui.io:443` (`sui_getObject`, `sui_getTransactionBlock`). - Sui explorer: `https://suiscan.xyz/testnet/tx/` and `/object/`. - Walrus: `https://aggregator.walrus-testnet.walrus.space/v1/blobs/`. - GonkaRouter: `https://api.gonkarouter.io/v1/receipts/`. Three recomputations say whether the record is intact: 1. Vote commitment: `blake2b256(BCS(VotePreimageV1 {claim_id, agent_profile_id, jury_seat_id, phase u8, outcome u8, confidence_bps u16, evidence_root, output_hash, run_hash, salt}))`, in that order, and it must equal the commitment Sui stored before the reveal. The salt is published nowhere: it is the fifth argument of the `reveal_vote` transaction. 2. Run hash: `blake2b256(BCS(RunRecordV1 {run_id, claim_object_id, agent_profile_id, jury_seat_id, phase, attempt, provider_id, model_id, gonka_request_id, prompt_hash, input_hash, output_hash, tool_transcript_hash, evidence_root, requested_at_ms, completed_at_ms}))`, and it must equal the run hash in the run approval on Sui. 3. Truth score: each valid final-round reveal becomes a probability in basis points (YES its confidence, NO 10000 minus it, UNSURE 5000); the score is `(sum + floor(N/2)) / N` in integer arithmetic, and it must equal the score on the resolution certificate. Outcome codes are 1 YES, 2 NO, 3 UNSURE, and claim results add 4 UNRESOLVED. `docs/API.md` has every route with its statuses and limits, `docs/PRD.md` the semantics. Running it end to end: `pnpm ov audit ` recomputes all three from the public sources and prints one line per check, `pnpm ov trace ` prints the research trail, and https://app.openverdict.info/verify does the same checks in the browser. ## Optional - `.claude/skills/openverdict-audit/`: Claude Code skill that audits a verdict or runs a verification end to end from chat. - `docs/demo/runbook.md`: preserved live testnet claim ids. - Terminal: `pnpm install && pnpm ov help` gives the public CLI (weather, board, extract, submit, queue, status, watch, audit, trace). No key, no wallet, no database.