Buy $CALLS
Replay

Grade it yourself.

Every grade publishes its inputs: the ciphertext, the drand round, the seal transaction, the outcome source and its record. The replay script fetches them, re-derives everything, and prints PASS or FAIL per step. It needs Node 20+ and the pinned timelock library.

mkdir replay && cd replay
npm init -y >/dev/null && npm i tlock-js@0.9.0
curl -sO https://sealedcalls.fun/replay.mjs
node replay.mjs <commitment>            # any 64-hex commitment
node replay.mjs <commitment> --site https://sealedcalls.fun

What it checks

1. sha256(ciphertext) == commitment                (the memo pins exactly this ciphertext)
2. the seal transaction carries memo seal:<commitment>, signed by the wallet, at slot/time T
3. T <= market.resolvesAt - 86400s                    (no sealing after the fact)
4. the drand beacon for the round, from https://api.drand.sh (BLS-verified by drand-client)
5. the ciphertext decrypts with that beacon; payload.w == signer; payload.m == the market
6. the outcome from its public source (Coinbase 1-minute candle open at T, or the migration tx on chain)
7. BS = (p/100 - outcome)^2, skill = 1 - BS / 0.25, compared with the site's grade

The bundle

Each call’s inputs are served as JSON at /api/replay/<commitment>. The board’s lower bound is mean(skill) − 1.645 · sd(skill) / √n over a wallet’s graded calls, which /api/caller/<wallet> lists in full.

Why it holds

No key opens a call early: the ciphertext can only be decrypted with a drand round signature that does not exist until that round. The memo on chain fixes the ciphertext before the outcome exists. The opener runs the same rules this script does, so a disagreement between the script and the site would be visible to anyone.