The day after an election, every forecaster called it. The ones who were right say so loudly. The ones who were wrong had "a range of outcomes". Nobody remembers what anyone actually said, or what it was worth at the time.
So I built Receipts: an agent that writes down a forecast before the event, scores it after, and remembers who to trust. It runs on Walrus Memory and Sui, with Tatum as the infrastructure, and I tested it on the 2026 US midterms.
- Live app: receipts-recall.vercel.app
- Demo video: youtu.be/1GuTUcIaS2E
- Code and evidence: github.com/Makabeez/receipts
Picking the winner is not the test
Most scorecards ask one question: did the forecaster pick the winner? That rewards anyone who backs the favourite. If a market already gives a candidate 74%, saying "they'll win" adds nothing.
Receipts asks a harder question: did you beat the market price at the moment you made the call? For every call it computes:
edge = (market − outcome)² − (forecast − outcome)² That is the market's Brier score minus the forecaster's. Positive means you were closer to what happened than the price was. Negative means you'd have done better just quoting the market.
What it remembers, and why that needs Walrus Memory
A receipt only means something if it existed before the result and can't be edited afterwards. So the loop is:
- Log before the event. Each call (who, what, probability) is written to Walrus Memory with the live Polymarket price beside it. The logger refuses to write once polls start closing.
- Certify on Sui. Walrus certifies every blob in a Sui transaction. That timestamp is the proof the call came first.
- Resolve. When the market's UMA resolution is final, a
resultmemory is written. - Score. Each call gets its edge, stored as a
scorememory linking back to the original receipt. - Remember the trust. Each voice gets a
trustprofile: number of calls, mean edge, a 90% interval and a verdict. A new version supersedes the old one by blob ID. Nothing is edited, only appended.
The agent then ranks voices from its own memory, and anyone can search that memory from the site.
The midterms test
On November 1, 2026, about 50 hours before the first polls closed, Receipts wrote 13 published forecasts (Silver Bulletin, Decision Desk HQ and VoteHub, as reported by Newsweek) and 9 Polymarket price snapshots to Walrus Memory on Mainnet. Sui certified all 22 between 20:36:29 and 20:37:10 UTC.
After election night, 8 of the 9 markets had final resolutions and 10 calls could be scored. Two of them show why the metric matters:
- Decision Desk HQ, South Carolina Senate: 65% on an outcome the market priced at 74.5%. It didn't happen. DDHQ still beat the market by 13.3 points, because it was less confident in the wrong answer.
- Decision Desk HQ, Ohio Senate: 54% on an outcome the market priced at 73.5%. It happened. DDHQ picked the winner and still lost 14.1 points to the market, because the price already knew more.
Overall, 3 of 10 calls beat the market:
| Voice | Scored calls | Mean edge vs market (×100) |
|---|---|---|
| Silver Bulletin | 1 | +3.1 |
| Decision Desk HQ | 8 | −3.9 |
| VoteHub | 1 | −5.6 |
The honest part: nobody is distinguishable yet
Ten calls is not enough to crown anyone, and Receipts says so. It estimates how much voices genuinely differ (between-voice variance) against how noisy single calls are (within-voice variance). Right now the noise is bigger than the differences, so the shrinkage constant is infinite and Receipts weights every voice exactly like the market. It would rather say "not yet" than invent a leaderboard.
One bias, disclosed on the site: the forecasts were published Oct 29–30 but the market price was read on Nov 1, so the market had up to three extra days of news. That tilts every score against the forecasters. The House market is still awaiting UMA resolution. When it lands, a re-run writes v2 trust profiles that supersede v1.
In total, Receipts holds 44 memories on Mainnet: 22 receipts (calls and prices) and 22 learning records (results, scores, trust profiles and the model).
Proving it through Tatum
Every receipt links to its Walrus blob and its Sui transaction. I also confirmed all 22 certifying transactions through Tatum's Sui gateway.
One lesson for other builders: Tatum's Sui JSON-RPC route now returns 404, because Sui deprecated JSON-RPC. The gRPC gateway (sui.rpc.v2.LedgerService) works, so everything here uses it.
On the site, Check this receipt on Sui now reads the Blob object live through Tatum and confirms it exists, holds the exact blob, and belongs to the Receipts wallet.
A companion built with Tatum AI Builder
I also built Receipts Verifier from one prompt in Tatum AI Builder. It lists all 22 receipts and re-checks each certifying transaction through Tatum. The generated lookup used the dead JSON-RPC route, so I swapped in a small zero-dependency gRPC client. Now all 22 come back confirmed, each one before polls closed. Code: github.com/Makabeez/receipts-verifier.
Try it
- Open a receipt and press Check this receipt on Sui now.
- Ask the memory: "Why isn't Decision Desk HQ trusted more?"
- Recompute every score yourself, with no wallet and no key:
git clone https://github.com/Makabeez/receipts cd receipts/evidence/midterms-2026 && python3 score.py --resolutions resolutions.json The same loop works for any market with a price and a resolution: sports, earnings, crypto. Elections were just the first scoreboard.
Built for Total Recall by Tatum × Walrus Memory.
