✓ Provably fair — the seed was committed on-chain before play, the exact step stream was signed by the player's key, and every roll, decision, and payout below is re-derived from public inputs and matches the on-chain settlement.
Verified in your browser
Re-deriving every check from chain reads in this browser — reconstructing the game trees, re-rolling the seed, recovering the signature…
Don't trust this site's RPC either? Paste any HyperEVM RPC URL and re-run — the verification then never touches this site. The algorithm is verifyChannel in @freeroll/sdk — run it yourself from a terminal for zero trust in this page.
This channel re-armed itself mid-session 4 times: each checkpoint settled the epoch's net, revealed its seed, and committed a fresh one — one continuous session, several sealed proofs. Every epoch below is replayed from its checkpoint transaction's signed stream — rolls re-derived, nets recomputed, signatures recovered ✓ and the chain of commitments anchors to the on-chain channel state. Every settled figure below is decoded from the checkpoint transaction's own event — never this site's database.
›Epoch 020 rounds · 118 steps · $26.00 wagered+$4.00✓ replayed from the receiptcheckpoint tx →
committed0x268c36b8366a6fb6926f37de75f643537fcf9bad57048f0c26067eae9a795c90revealed serverSeed0x9061a6a5bfe4c6d9db57d3cd82230e5bda1c37c92b160b5cffcb16814b9c33c7chainclientSeed (this epoch)0x14748dae4b50919f69e540562f30c9bd4d277e6e6eda5911e3ef365ac172a346✓ preimage · ✓ signed root · ✓ session-key sig · ✓ net matches the receipt's event · ✓ wagered total ·
Proof of randomness · final epoch
✓1.The seed was committed before you played
This epoch's commitment was fixed on-chain by the previous checkpoint transaction (linked in the timeline above), before any of this epoch's steps. The seed revealed at close must hash back to that commitment — since keccak256 has no known way to find a second preimage, the house had exactly one seed it could ever reveal, chosen before it saw a single one of your bets.
Each step, your session key signed DrawCommit(channelId, steps, root) — a running hash-chain over every round you entered, every decision you took, and every reveal you requested, signed before the outcome was shown. The close can only settle a stream and count carrying your signature: the house can't add, drop, or reorder a single step.
t2 · you chose option 1 of 2 · worth 2.00× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t6 · you chose option 1 of 3 · worth 0.79× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t7 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t11 · you chose option 1 of 3 · worth 0.49× under optimal play · best free option was 0.68× — no roll here, the choice was yours. Values come from the sealed tree itself.
t16 · you chose option 2 of 3 · worth 0.71× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t23 · you chose option 2 of 3 · worth 0.98× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t36 · you chose option 1 of 3 · worth 1.77× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t45 · you chose option 1 of 3 · worth 0.85× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 1 of 3 · worth 0.58× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t56 · you chose option 3 of 3 · worth 2.29× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t57 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
· you chose option 2 of 3 · worth 0.57× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 2 of 3 · worth 0.57× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 3 of 3 · worth 2.18× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 3 of 3 · worth 1.53× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
t88 · you chose option 1 of 3 · worth 0.49× under optimal play · best free option was 0.58× — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t89 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
· you chose option 2 of 3 · worth 0.57× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 3 of 3 · worth 2.18× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
· you chose option 3 of 3 · worth 1.99× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
›Epoch 12 rounds · 10 steps · $3.00 wagered+$3.50✓ replayed from the receiptcheckpoint tx →
committed0xd9341a99a900413a2f717d78f442d872e41b8ed316b32e451bed377b1e8978a4revealed serverSeed0xd02168f89b62b1fde29161d77d7c536d68f12e8e2cb294f35f90dc3c27057f75chainclientSeed (this epoch)0x919500ad4a13e34185b9ce8c4b499a572c2149236fd3e33b72ca72475b7a7fe6✓ preimage · ✓ signed root · ✓ session-key sig · ✓ net matches the receipt's event · ✓ wagered total · ✓ stepsre-armed: budget $17.50 · win window $70.00 · fresh commit
t3 · you chose option 3 of 3 · worth 2.35× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t4 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t3 · you chose option 1 of 3 · worth 0.58× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t4 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t8 · you chose option 2 of 3 · worth 0.68× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t9 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t15 · you chose option 1 of 3 · worth 0.75× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t20 · you chose option 3 of 3 · worth 2.10× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t21 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t25 · you chose option 2 of 2 · worth 1.12× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t26 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t27 · you chose option 2 of 2 · worth 1.28× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t28 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t29 · you chose option 2 of 2 · worth 1.47× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
›Epoch 320 rounds · 45 steps · $23.00 wagered+$7.46✓ replayed from the receiptcheckpoint tx →
committed0x975db07009816ef9c0af689c78b3a8e64761715aa5cb6f74d94fda24a47641d8revealed serverSeed0x16c3b9bf30d04daa24767cc7991f41f0e1fb909d64ae5354c98da2eb67fa207echainclientSeed (this epoch)0x719ccea3d32614bb2fc772d2875212d0b0f8cc008577a8006f2eb544eb1afb98✓ preimage · ✓ signed root · ✓ session-key sig · ✓ net matches the receipt's event · ✓ wagered total · ✓ stepsre-armed: budget $29.76 · win window $119.05 · fresh commit
t6 · you chose option 2 of 2 · worth 1.23× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t7 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t8 · you chose option 2 of 2 · worth 1.56× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t9 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t10 · you chose option 1 of 2 · worth 1.99× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t44 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairwon · +$9.00
925
010000985
landed · bucket 1/29.8% chance · pays 10.00× · $10.00 on $1.00
Epoch 4 · finalsettled by the close — full replay below✓ commit chain anchors to the on-chain state
Re-folding the submitted stream — root_t = keccak256(root_(t−1), t, …) over each round's (stake, game), each decision's choice, and each reveal — must reproduce the root you signed, pinning the exact sequence to your signature.
Each roll is keccak256(serverSeed, clientSeed, channelId, t) mod 10000, walked through the on-chain game tree it was played against. Recomputed below — not read from anywhere.
These are the final epoch's 39 rounds only — the running column starts from this epoch's first round. The 4 earlier epochs are each replayed under their own seal in the session timeline above.
t75 · you chose option 2 of 3 · worth 0.79× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t114 · you chose option 3 of 3 · worth 2.29× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t127 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
Stakes include mid-round adds (e.g. doubles). ⏏ The final round ended mid-play, so it settled at the position's table value — the same mark the contract paid.
Fold-by-fold trace (128 steps)
tRoundFoldRollNode
01round—→ 2
11reveal75192 → 1
22round—→ 2
32reveal87112 → 1
43round—→ 2
53reveal72602 → 1
64round
Final epoch · replayed net−$14.87
Final epoch · settled by the close tx−$14.87
Final epoch · recomputed wagered$52.00
Steps (signed stream vs settled)128 ✓
✓ The recomputed net, wagered total, and step count match the on-chain close settlement exactly — this proves the final epoch; each earlier epoch is verified against its own checkpoint transaction above.
Earlier epochs · 4 verified checkpoints+$19.94
Whole session+$5.07
✓5.Every round respected the committed caps
The channel committed hard walls before play: no stake above the budget of $29.76, and no single round whose worst-case win exceeds the committed per-round cap of $66.64 against its own game's maximum multiplier. Every round in the stream was re-checked against both — the same integer comparison the contract itself enforces. All rounds fit.
Games (on-chain catalog) chain
Each game is a value tree stored on-chain and validated by the contract when it was sealed — the edge under optimal play is enforced inside a fixed band, so no game referenced here can be unfair in either direction. The payouts above were walked from these exact trees, reconstructed from the chain's packed words.
The seed was fixed by an on-chain commitment before play, and the reveal matches it.
The settled stream carries the player's signature over its exact hash-chain root.
Every roll derives from seed ‖ clientSeed ‖ channelId ‖ t — expand any reveal above and derive it in your own browser.
The payouts fall out of the on-chain trees; the settled net, wagered total, step count, and per-round caps all match the replay.
The trees themselves are reconstructed from the chain's packed words — never this site's copy.
Assumed (and why it's bounded)
The randomness beacon committed its seed without bias. It commits FIRST and cannot adapt to your client seed; it is one named, swappable party — the honest register lives in the entropy docs.
The house settled the HIGHEST stream you signed. It provably cannot forge, reorder, or extend one (your signature pins that) — suppressing your best prefix is the one residual, bounded by the fact that your client holds the same signed stream and can submit the close itself.
This page's server rendered the narrative — which is why the browser panel at the top re-runs every check on your machine, against any RPC you choose.
fold t12 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/2 · −1.00×
1003
0100007553
landed · bucket 1/275.5% chance · pays 0.00×
fold t17 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t18 · you chose option 2 of 2 · worth 0.49× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t19 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 6/6 · −1.00×
4074
0100007701539230830773846
landed · bucket 6/661.5% chance · pays 0.00×
fold t24 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t25 · you chose option 1 of 2 · worth 0.71× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t26 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/2 · −1.00×
1026
0100006464
landed · bucket 1/264.6% chance · pays 0.00×
t31 · you chose option 1 of 3 · worth 0.46× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t32 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/2 · −1.00×
5916
0100007702
landed · bucket 1/277.0% chance · pays 0.00×
fold t37 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/3 · +1.00×
4873
01000084739259
landed · bucket 1/384.7% chance · pays 2.00×
fold t46 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 2/2 · +1.00×
9056
0100005768
landed · bucket 2/242.3% chance · pays 2.00×
t51
fold t52 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 3/3 · +1.00×
9923
01000012077702
landed · bucket 3/323.0% chance · pays 2.00×
fold t58 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/3 · +3.00×
639
01000086129306
landed · bucket 1/386.1% chance · pays 4.00×
t63
fold t64 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 9/9 · −1.00×
9545
010000615410000
landed · bucket 9/938.5% chance · pays 0.00×
t69
fold t70 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 9/9 · −1.00×
6202
010000615410000
landed · bucket 9/938.5% chance · pays 0.00×
t75
fold t76 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t96 · you chose option 1 of 2 · worth 1.06× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t97 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/3 · +1.00×
4161
01000047125919
landed · bucket 1/347.1% chance · pays 2.00×
t102 · you chose option 1 of 3 · worth 1.66× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t103 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/3 · +1.00×
4804
01000073339222
landed · bucket 1/373.3% chance · pays 2.00×
t108
fold t109 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
fold t117 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 3/3 · +3.00×
9830
01000012077702
landed · bucket 3/323.0% chance · pays 4.00×
t10 · you chose option 1 of 2 · worth 1.59× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t11 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 2/3 · 0.00×
8085
01000073268612
landed · bucket 2/312.9% chance · pays 1.00×
fold t16 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 2/2 · +1.00×
9317
0100006261
landed · bucket 2/237.4% chance · pays 2.00×
fold t22 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/3 · +3.00×
3989
01000063097687
landed · bucket 1/363.1% chance · pays 4.00×
fold t30 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t31 · you chose option 2 of 2 · worth 1.70× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t32 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t33 · you chose option 1 of 2 · worth 1.99× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
t59 · you chose option 2 of 3 · worth 0.79× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t60 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t61 · you chose option 2 of 2 · worth 1.10× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t62 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t63 · you chose option 1 of 2 · worth 1.59× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t64 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 3/3 · −1.00×
9511
01000073268612
landed · bucket 3/313.9% chance · pays 0.00×
fold t68 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t69 · you chose option 3 of 3 · worth 2.18× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t70 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t77 · you chose option 2 of 2 · worth 1.10× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t78 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t79 · you chose option 1 of 2 · worth 1.59× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t80 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t85 · you chose option 1 of 3 · worth 1.06× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t86 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 3/3 · −1.00×
6626
01000047125919
landed · bucket 3/340.8% chance · pays 0.00×
fold t90 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t95 · you chose option 2 of 3 · worth 0.80× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t96 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t97 · you chose option 2 of 2 · worth 0.62× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t98 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t99 · you chose option 1 of 2 · worth 1.06× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t100 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 3/3 · −1.00×
9605
01000047125919
landed · bucket 3/340.8% chance · pays 0.00×
t104 · you chose option 2 of 3 · worth 0.64× under optimal play · best free option was 0.71× — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t105 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 8/8 · −1.00×
8643
010000770153923083077384646155384
landed · bucket 8/846.2% chance · pays 0.00×
t109 · you chose option 1 of 3 · worth 0.83× under optimal play · the best option available — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t110 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
provably fairbucket 1/2 · −1.00×
5265
0100005836
landed · bucket 1/258.4% chance · pays 0.00×
fold t115 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000
t121 · you chose option 3 of 3 · worth 2.18× under optimal play · for 100% more stake — no roll here, the choice was yours. Values come from the sealed tree itself.
fold t122 · roll = keccak256(serverSeed ‖ clientSeed ‖ channelId ‖ t) mod 10000