AGATHANo gut feelings

Verify a pick

Every numbered pick is sealed on the Solana mainnet before its game and opened after it grades. Nothing on this page asks you to trust agatha.gg: the proof lives on a public chain and the check runs in your browser.

Open a receipt

Receipts run #1 to #2248.

The promise, in one sentence

For any date, the number of distinct pick numbers the Agatha account sealed for that date must equal the number of rows the ledger shows for that date (wins, losses, pushes and voids). If those two numbers ever differ, we lied.

How a seal works

  1. Locked

    When a pick locks, 15 minutes before its start (earlier for a tennis or esports match that follows another on its court or stream), its frozen fields become a small text record: the pick, side, line, price, book, confidence, units, the time it locked and the game start. A pick is only ever added to the board with 15 minutes or more still to play.

  2. Sealed on chain

    The record is encrypted with that day's key and written into a Solana transaction that the Agatha address pays for and signs. Its one memo carries the pick number, the game date, the SHA-256 fingerprint of the plain record and the encrypted bytes, so the chain shows when it was fixed and what it hashes to, but not yet what it says.

  3. Key released

    After the day's games grade (06:00 ET the next morning at the latest) the day key goes out in another memo from the same address, with that day's seal count. One key opens every pick of that day at once, so no single result can be held back.

  4. Anyone checks

    Anyone can fetch the transaction, decrypt it with the released key, check the fingerprint, compare the seal time with the start time, and grade the pick from a public box score. The receipt page does that in your browser, and the prompt on it has an AI assistant check the seal and the result, with the full check if you ask.

The two constants

A full-history check needs nothing from us but these. Walking the account's public transactions discovers every seal; the key list opens them.

Network
Solana mainnet
Agatha address
AGATHAhqdW1ojytKypnrm1phNNNXUwNGBXQRovYHaoFNexplorer.solana.com
Released day keys
/keys.json (30 days released; also on chain as agatha:v1:k:<date> memos)
Address ownership
/.well-known/agatha-seal.json (names the chain, the cluster and this address; the address's own agatha:v1:home:agatha.gg memo points back here)

Check it by hand

  1. Open the transaction from its receipt on explorer.solana.com. It must read Success, its fee payer must be the Agatha address above, and its block time must be before the game's start.

  2. Its memo reads agatha:v1:p:N:<date>:<fingerprint>:<sealed bytes> with the receipt's own pick number and fingerprint.

  3. The day key is in that date's agatha:v1:k:<date>:<key>:<count> memo from the same address, and in /keys.json.

  4. Base64-decode the sealed bytes: the first 12 are the nonce, the last 16 the tag. Decrypt with AES-256-GCM and no associated data (Python's cryptography package or CyberChef both do it).

  5. The SHA-256 of the plain record must equal the fingerprint.

  6. Read its locked_at against the start, and grade the pick from any box score.

To audit every seal, page through the address's signatures (the RPC's getSignaturesForAddress). Count only transactions that succeeded (meta.err null) and whose fee payer, accountKeys[0] with signer true, is the Agatha address: anyone can name the address in a transaction of their own. For each date, the distinct pick numbers in those seal memos must equal the ledger's rows for that date.

Right now

2248picks anchored in the current window

0sealed and waiting for their transaction

30days released

Days with released keys

  • 2026-10-30 (55)
  • 2026-10-29 (67)
  • 2026-10-28 (88)
  • 2026-10-27 (73)
  • 2026-10-26 (81)
  • 2026-10-25 (78)
  • 2026-10-24 (156)
  • 2026-10-23 (62)
  • 2026-10-22 (54)
  • 2026-10-21 (47)
  • 2026-10-20 (56)
  • 2026-10-19 (50)
  • 2026-10-18 (63)
  • 2026-10-17 (148)
  • 2026-10-16 (53)
  • 2026-10-15 (50)
  • 2026-10-14 (56)
  • 2026-10-13 (74)
  • 2026-10-12 (64)
  • 2026-10-11 (73)
  • 2026-10-10 (125)
  • 2026-10-09 (65)
  • 2026-10-08 (60)
  • 2026-10-07 (75)
  • 2026-10-06 (52)
  • 2026-10-05 (62)
  • 2026-10-04 (101)
  • 2026-10-03 (124)
  • 2026-10-02 (52)
  • 2026-10-01 (55)

Fine print

  • Postponed team games void under our settlement rules, so a daily key can only ever reveal an already-voided pick early. A tennis match that rides a rain delay into the next day does reveal a live pick at the daily unlock; we accept that rather than hold a whole day's keys for one match.
  • The price in the record is the price at the named book when the pick sealed, 15 minutes before the start (for a tennis match that follows another on its court, 15 minutes before that court's first match; for an esports match that follows another on its stream, 15 minutes before that stream's first match, but never more than 6 hours before its own start). It is committed before the game, so it cannot be tuned to the result.
  • A golf pick seals 15 minutes before the tournament's first tee time. Golf prices update a few times a day, so its price is the named book's price in the latest golf prices Agatha has when it sealed, which can be up to 12 hours old.
  • The time on chain is the block time Solana's validators agree on, to the second, not a clock we keep. A seal whose confirmation was lost in transit can be sent again with identical bytes and land twice; it is the same pick either way, which is why the promise counts distinct pick numbers.
  • A Python check that needs only the standard library is at /seal-check.py: it opens a seal offline and, with internet, reads the transaction from Solana too. The browser check on each receipt page does the same steps with WebCrypto.

See also the track record and how picks are made.