FairWhistle the story
Match-integrity surveillance Β· TxODDS World Cup hackathon

A price moved.
Here's the signed record β€”
not a guess about what it meant.

FairWhistle is an autonomous agent that watches odds microstructure for repricing patterns public information can't explain, then publishes a timestamped, hashed, Ed25519-signed alert the moment it fires β€” anchored on Solana so the record can't be quietly edited after the fact.

Agent live Β· autonomous πŸ”‘ Ed25519-signed every alert βš“ Solana devnet-anchored πŸ† FIFA World Cup Final Β· today
Abstract visualization of a single price signal spiking above baseline noise and being sealed at its peak.
01 Β· What it is, and why it matters

A risk desk for one question

Not a trading strategy. Not a fixing accusation machine. FairWhistle answers exactly one thing before you act on a price: is there a reason to distrust this quote right now?

WHAT

Watches microstructure, not headlines

Three causal detectors read raw odds ticks across books and markets β€” abnormal repricing velocity, cross-market coordination, and stale-then-snap liquidity pulls. No sentiment, no punditry, no black box.

WHY

Fixing and informed money move price first

Both leave the same fingerprint before the public catches up: price moves faster or more coordinated than a public-event window can explain. That fingerprint is what the detectors are built to isolate.

HOW HONEST

Point-in-time, not a running verdict

Every alert is hashed and signed the second it fires. It is a record of what the system knew then β€” never silently rewritten as more information arrives later.

02 Β· How it works

Odds in, signed record out

Four steps, the same code path for replay, live, and backtest.

Abstract diagram motif of four connected nodes representing a data pipeline.
01

Odds feed

TxLINE consensus book β€” replay fixture, live mainnet feed, or historical archive, depending on mode.

β†’
02

Detectors

Velocity, cross-market coordination, stale-then-snap β€” pure functions over the price series, no side channels.

β†’
03

Signed alert

SHA-256 core hash, Ed25519 signature, detection timestamp. Verifiable in the browser.

β†’
04

Devnet anchor

Fingerprint memo'd on-chain β€” Solana devnet, independently checkable via getTransaction.

03 Β· The centerpiece β€” today's live alert

15:48:57 ET: an alert fires mid-match

This is REAL β€” the live TxLINE mainnet feed, today's match, not a rehearsed scenario.

FIFA World Cup Final β€” Spain v Argentina kickoff 15:06:04 ET 2026-07-19 rule velocity_live market OU 2.5 Β· Over
Abstract visualization of a single signal spike above a field of calm noise, later enclosed by a wider band.
15:45:54Detector starts watching
15:46:13Yellow card (public match event)
15:48:33–37Shot / high-danger sequence
15:48:57Alert fires Β· z 5.86
minutes laterRecompute clears
detector watch window (15:45:54–15:48:57 ET) match-event / suppression window alert fires recompute clears

Over roughly three minutes, velocity_live watched OU 2.5 Β· Over reprice +6.4% on the real TxLINE mainnet consensus feed β€” peak z-score 5.86 against a threshold of 5, with no public explanation visible in the data available at that moment. At 15:48:57 ET the alert fired.

πŸ”’ What was signed

core hashfd21174f5a2ba63aebf23e893161606712472e8510646051c5e052f356c36e01
signatureEd25519 Β· agent key Β· at detection time

Solana devnet, confirmed on-chain, independently verified by us via getTransaction.

🟑 What the detector didn't know yet

A yellow card had occurred at 15:46:13 ET, and a shot / high-danger-possession sequence at 15:48:33–37 ET β€” both real, public match events.

The free-tier score/action feed lags the odds feed, so this data hadn't arrived when the detector fired. Minutes later, once the score feed caught up, a fresh recompute no longer surfaces this alert β€” both events now fall inside the detector's own suppression window, explaining the price move as legitimate public reaction, not fixing.

β€œThe signed record is the feature. A live detector working with partial information will sometimes flag something that a fuller picture later explains β€” that's not a flaw, it's exactly why the alert is signed and anchored the moment it fires, not treated as an evolving β€˜current status.’ Point-in-time attestation beats hindsight: nobody can retroactively pretend the system didn't flag it, and nobody can retroactively claim it proved fixing when it didn't.” β€” FairWhistle design frame
There was also a second, earlier live alert today (cd34f356c930, ~15:30 ET) β€” REAL but video-only: we have video evidence of it firing, not the full underlying data, so it isn't independently anchored. Mentioned here for completeness; fd21174f5a2b… above is the centerpiece and the one we can fully evidence.
04 Β· Backtest capability

The same detector, run across a tournament

REAL Β· historical archive β€” a standalone copy of the live detection math, run against a local, pre-captured archive of real TxLINE World Cup fixture data (not synthetic).

105
fixtures swept
~42s
total run time
1:1
fidelity vs. live detector
Full-tournament backtest capability demonstrated (105 fixtures, ~42 seconds, exact fidelity match vs. the live detector); per-market threshold calibration identified as the next step. That sweep surfaced 272 alerts across those fixtures at one fixed threshold tuned for a single match's noise profile β€” a count that needs per-market calibration before it means anything as a standalone signal, not a finding of anomalies.
Abstract visualization of many parallel data traces swept uniformly, representing a systematic sweep across many fixtures.
05 Β· Honesty, in full

What's real, what's staged, every time

⚠ Replay fixture SIMULATED

The default view on the dashboard is a deterministic, seeded, synthetic tape β€” 3 planted, openly-labeled anomalies, looped every 10 minutes. Always available, never live data.

  • Detectors never see scenario metadata β€” same code path as live
  • Used to demonstrate detection logic on demand, not to report real events

● Live mode REAL

The real FIFA World Cup Final via TxLINE mainnet consensus odds β€” free tier, a single consensus book, ~60s batch delay. Everything in the centerpiece above came from this mode.

  • No execution, no trades β€” a pre-trade integrity check only
  • Every live alert is signed at detection time, same as replay