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.