Live on Solana devnet · World Cup 2026

Markets that settle themselves.

Prediction markets where escrow is released by a cryptographic proof of the score — verified on-chain against TxODDS's anchored Merkle roots. No admin key. No oracle vote. No claim button.

100
markets on-chain
21
settlements proven
$10,312
escrowed in markets
112s
whistle → all markets settled

The problem

In 2026, Polymarket logged 1,150+ disputed markets. Contested outcomes go to a token vote — not a court of facts.

FinalWhistle removes the human from settlement entirely. A market resolves if and only if a proof of the score verifies on-chain.

  1. The whistle blows

    TxODDS anchors every score batch on Solana as a Merkle root — cryptographically signed match data, updated through the game.

  2. Anyone submits the proof

    A permissionless keeper fetches the Merkle proof of the final score. The sender has no authority — validity comes from the proof.

  3. The chain verifies it — twice

    SettleKit CPIs into TxODDS's validator and independently recomputes the Merkle root with its own sha256. Two verifications, no single point of trust.

  4. Money moves

    Every market on the match settles from that one proof. Winners are paid to their wallets — nobody clicks claim.

Powered by SettleKit

A zero-authority settlement engine. FinalWhistle is the flagship market built on it.

  • Zero admin keys

    The settlement engine has no authority accounts, no config, no pause switch. Every instruction is permissionless.

  • Dual attestation

    Each flagship verdict is verified by CPI into TxODDS's validator and by an independent sha256 Merkle reproduction.

  • The trifecta

    All three TxLINE validation primitives on-chain: validate_stat (settlement), validate_fixture (proven kickoffs), validate_odds (price provenance).

  • A general Question engine

    Any predicate over the signed stat feed settles the same proven way — including binary sums like “corners A + B > 10”.

Parametric match insurance in ~170 lines — its entire oracle integration:
// goalshield-mini: release the payout iff the proof exists
require!(v.fixture_id == p.fixture_id, WrongVerdict);
require!(v.question_hash == p.question_hash, WrongVerdict);
require!(v.outcome, VerdictNotTrue);
// v is a SettleKit Verdict — proven against TxODDS's
// anchored Merkle root before it can exist.

Verdicts are init-once accounts keyed by sha256(question). If one exists, the oracle proved it. That is the whole trust model.

Don't trust us — read a receipt.

Every settlement links its Merkle proof, the verifying transaction, and the init-once account that made it permanent. Here is a real one: Mexico 2–3 England, ten markets settled from a single proof.

View the receipt →
fw-settle (SettleKit engine)
HJR3owk8ARzqayhwELA72S38yome3X4HWvb7HMP9AA8K
fw-markets (LMSR)
3as8xHoWivvFTEcg1N6MCb81RANkahr9dt484vr1Camc
goalshield-mini
BaRqEqDuhqEJPsApRKgHtz3ozFtqAhEgPKLxPsipeDae

For judges

The 2-minute path

No wallet, no sign-up, no SOL. And everything below is clickable evidence, not a claim.

  1. Launch the app

    A burner wallet is created for you — no extension, no seed phrase, no SOL. One click on the faucet funds test USDC.

  2. Trade a live market

    Buy any outcome at the live LMSR quote, then watch the chart move on the trade you just wrote on-chain.

  3. Read a receipt

    Open a settled match: the proven score, the verifying transaction, and the immutable facts account — all linked.

  4. Check our work

    Dual-attestation transactions on devnet, 65 tests in CI against TxODDS's production oracle binary, the full settlement spec.