Adversarial demo
Go ahead. Try to cheat.
Settlement here is permissionless — no oracle wallet, no admin key, no allow-list. Anyone can settle any market, and the reason that is safe is the five check gates the program runs on every settle. To prove it, we seeded three real matched markets and armed three real attacks against them. Connect a wallet and fire one: your wallet signs a real settle_market transaction with a genuinely valid TxLINE Merkle proof — just the wrong one — and watch the program reject it on-chain. The failed transaction lands on devnet anyway, so you can open it in the explorer and read the gate that stopped you.
Attack 1
Settle at halftime
Submit a real, valid TxLINE proof — of the 0–0 score at the halftime whistle (period 3) — to settle before the match is over.
If it worked
A prop like “no red cards in the second half” reads YES at minute 60, when no H2 red has happened yet. Settle early and you bank a bet the match could still lose.
Target · HzcHyw…FHxEkD ↗
Attack 2
Prove the wrong stats
This market is “total corners > 9.5” (keys [7,8]). Submit a real, valid, FINAL proof — of the goals (keys [1,2]) — instead.
If it worked
TxLINE strategies address leaves by index, not by stat key. A valid proof of the wrong stat slots into index 0/1 and can flip a losing corners bet into a winning one.
Target · J2YUfm…CoVEXr ↗
Attack 3
Use another match’s proof
This market is bound to fixture 99999901. Submit the real, valid, final England v Argentina (18241006) proof to settle it anyway.
If it worked
Some match somewhere always satisfies your predicate. If proofs weren’t bound to THIS fixture, a valid proof from a different game could settle any market you like.
Target · 95oW57…HJxasg ↗
No valid proof for fixture 99999901 can ever be produced, so nobody — not even an honest settler — can close this market. Its escrow is recoverable only via the permissionless void hatch (both stakes home, 6h past kickoff). Funds can never strand.
The five check gates
Full write-up in the README ↗Three of these are what you just fired at. All five run on every permissionless settle; together they mean the only thing a settler controls is which valid proof to bring, and the program decides the rest.
| # | Gate | Prevents |
|---|---|---|
| 1 | Kickoff deadline | taking a side after the match started — betting on known outcomes |
| 2 | Finality (period == 100) | settling a mid-match proof as final (this page, attack 1) |
| 3 | Epoch window | shopping arbitrary historical daily roots |
| 4 | Fixture binding | settling with a valid proof from a different match (attack 3) |
| 5 | Stat-key binding | settling with a valid proof of the wrong stats (attack 2) |