Skip to content
chaintailPublic

About

Receipts for people who called it first — commit a hashed prediction on-chain before kick-off, mint proof when it lands. Solana devnet commit-reveal.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CalledIt — receipts for people who called it first

Live demo: https://calledit-app.vercel.app

Call it before it happens. CalledIt lets a fan lock a match prediction on-chain before kick-off — as a SHA-256 commitment, so the pick itself stays secret — and when the stat lands, mints a receipt that proves when they called it. The receipt is a clean, shareable image with the on-chain timestamp: social flex with cryptographic teeth.

Wrong call? No receipt. The commitment is already public, so no screenshot-cropping, no deleted tweets, no "I totally called it" — the chain remembers what you actually said.

Built for the Superteam Earn × TxODDS World Cup hackathon (Consumer & Fan Experiences).

How it works

  1. Pick a prediction (e.g. "Lamine Yamal scores in the first half").
  2. Lock it — the app computes SHA-256("calledit:v1|<id>|<text>|<salt>") and writes calledit:commit:v1:<hash> to Solana devnet via the Memo program, before kick-off. Only the fingerprint goes on-chain; the pick stays private until reveal.
  3. The match runs — a deterministic, recorded TxLINE-shaped fixture replays (clearly labeled in-UI; see Data below), driving the same code paths a live feed would.
  4. Reveal + verify — when the stat lands, the server re-derives the hash from the revealed pick + salt and checks it against the on-chain commitment. Any mismatch is rejected: predictions cannot be altered after commit.
  5. Receipt — a correct call writes an on-chain receipt record referencing the commit tx, and renders the shareable receipt image (commit timestamp, landed minute, both tx links). A wrong call gets nothing — that's the anti-cheat point of commit-reveal.

The crypto is invisible

No wallet, no seed phrase, no gas prompt. A demo keypair held by the app signs and pays on devnet. Consumer-simple on purpose: the only crypto the user ever sees is the receipt.

Data: synthetic fixture, honestly labeled

No live TxODDS credentials were used in this build. The match is a deterministic recorded TxLINE-shaped event stream (src/lib/fixture.ts), labeled as such in the UI. The feed seam where a live TxLINE websocket plugs in is src/lib/feed.ts (MatchFeed interface) — settlement, commit deadlines, and receipts run unchanged on live data.

On-chain legs (devnet, stated plainly)

Leg Status
Prediction commitment (Memo program, SHA-256 hash + block timestamp) Live on devnet
Hash verification at reveal (server re-derives + compares vs on-chain memo) Live on devnet
Receipt record (Memo program, references commit tx + settled minute) Live on devnet
Receipt as compressed NFT (Bubblegum) Not in this build — the receipt record above is the on-chain anchor; cNFT mint is the drop-in upgrade

Run it yourself

pnpm install
solana-keygen new -o keypair.json          # demo signer
solana airdrop 1 <pubkey> -u devnet        # or fund however you like
cp .env.example .env.local                 # paste the keypair JSON array in
pnpm dev

Stack

Next.js (App Router) · Tailwind · @solana/web3.js · Memo program · next/og for the receipt image · Vercel.

Commercial path (stated, not built)

  • Creator receipts: pundits/streamers mint branded receipt collections; their hit-rate is public and verifiable — reputation as an asset.
  • Premium: bragging-rights ladders, season-long "called it" streaks, rare receipt art for low-probability calls.
  • B2B: any prediction product can embed commit-reveal receipts as a trust layer ("verified pre-match pick" badge).

About

Receipts for people who called it first — commit a hashed prediction on-chain before kick-off, mint proof when it lands. Solana devnet commit-reveal.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages