Docs · Developers

Reading a seal

The public API: list seals, fetch one by code hash, and what each field means.

Seals are read from the worker over HTTPS. There is no key and no rate limit worth mentioning; the responses are small and cache for thirty seconds.

The worker's base URL is https://zkcheck-worker.fly.dev. The same seals are on Robinhood Chain in the registry at 0xeaDdD9E4dA832395BDCcD658e9EaCD1725ddFeEA: badge(bytes32 codehash) returns (score, passedCount, ranCount, proven, standing) and sealOf(bytes32) the full record. The worker holds the evidence sentences and the review text, which are not on the chain.

Endpoints

Method Path Returns
GET /seals Every seal, newest first.
GET /seals/<hash> One seal, or 404 {"error":"no seal"}. The hash is 0x plus 64 lower-case hex characters.
GET /jobs/<id> The status of a review in progress.
GET / { ok, auditor, seals }: the auditor's address and the count.

A seal

{
  "hash": "0xb857b3aa…",
  "name": "Remus factory",
  "symbol": "REMUS",
  "address": "0x59eb9157A24bF41F3758eF85a8F62e03c19b3E66",
  "commit": "3f1c9a2e…",
  "contract": "DuoFactoryPons",
  "compiler": "0.8.26+commit.8a97fa7a",
  "checks": [
    { "id": "01", "title": "No hidden mint", "pass": true, "note": "Nothing in the code creates supply." },
    { "id": "07", "title": "Sell path clears", "pass": null, "note": "Not run: no wallet holds this token yet." }
  ],
  "passed": 7,
  "review": "The contract is a factory that …\n\nBottom line: …",
  "reviewModel": "claude-opus-5",
  "auditor": "0x7099…79C8",
  "signature": "0xce18…7d61c",
  "proven": "signed",
  "createdAt": 1789852243690,
  "score": { "value": 91, "band": "lower-risk", "parts": { "checks": [52.5, 52.5], "analysis": [23, 25], "review": [15, 15] }, "coverage": 93, "tldr": "…", "redFlags": [], "greenFlags": ["…"] },
  "analysis": { "earned": 23, "max": 25, "signals": [{ "key": "privileged", "label": "Owner-only functions that change state", "value": "openTrading, excludeFromFee", "points": 8, "max": 10 }], "redFlags": [], "greenFlags": ["…"] }
}
Field Notes
hash The key. keccak256(eth_getCode(address)), lower-case.
address Null when the review was of undeployed bytecode.
commit The git commit the source was read at. The repository is not returned.
checks[].pass true, false, or null for not run.
checks[].note One sentence of evidence. Always present.
passed Count of true.
review Null when skipped; reviewModel then starts with skipped: and says why.
proven signed or zkvm.
score The zkCheck Score: value, band, the three parts as [earned, available], coverage, the reviewer's one-line summary, red and green flags. The zkCheck Score.
analysis The code analysis, signal by signal.
tx The Robinhood Chain transaction that wrote the seal to the registry, or null for seals written before it existed.

A job

{ "id": "af7187f7efd52810", "status": "running", "step": "Compiling with Foundry", "error": null, "hash": null }

status is queued, running, done or failed. On done, hash is set and the seal exists. On failed, error is one sentence.

Looking up a contract you did not seal

Hash its code and ask:

import { createPublicClient, http, keccak256 } from "viem";

const client = createPublicClient({ transport: http("https://rpc.mainnet.chain.robinhood.com") });
const code = await client.getCode({ address });
const hash = keccak256(code!);
const seal = await fetch(`${WORKER}/seals/${hash}`).then((r) => (r.ok ? r.json() : null));

A null means no seal for that code. Any deployment of the same bytecode anywhere returns the same seal.

Verifying the signature

Do not trust the endpoint; check the auditor signed what it says. Verify a seal yourself is the full recipe: rebuild the digest from the public fields and recover the signer.

Names

name and symbol are what the submitter typed. Read the token's own name() and symbol() if you need them to be true.