Provably Fair
Every spin is verifiable on the blockchain. No trust required. The outcome is determined by math that nobody can manipulate.
On-Chain Settlement
Every round with bets is settled directly on the Arbitrum blockchain. The smart contract generates the result and verifies fairness. Round outcomes are permanently recorded on-chain.
Three-Source Randomness
Every result combines three independent random sources: the server's secret seed (committed before bets open), each player's own random seed contributed with their bet, and the on-chain hash of a future block fixed at commit time. No single party, not even the server, can predict or rig the outcome.
Withdraw Anytime
Your balance is tracked in real-time. When you're ready to leave, hit Cash Out to withdraw your funds on-chain directly to your wallet via the smart contract. No approval needed.
How Every Round Works
Seed Commitment
Before any bets are placed, our server generates a random seed and publishes its hash (keccak256) on the blockchain. The block number of this commit is recorded. The hash is permanent and unchangeable -- it proves the seed existed before any bets.
commitSeed(keccak256(serverSeed)) at block NPlayers Place Bets (With Their Own Seed)
During the 45-second betting window, players place bets through our interface. Every bet carries a 32-byte random seed generated by the player's browser. Bets are collected off-chain for a seamless experience -- no wallet popups per bet -- and every player's seed becomes part of the final result.
Each bet includes: clientSeed = crypto.getRandomValues(32)On-Chain Settlement (At a Later Block)
After betting closes, the server waits for at least 10 more blocks to be mined, then submits all bets plus every player's clientSeed to the smart contract and reveals the original seed. The contract enforces that the entropy block (commit + 10) is mined and within reach, so the server cannot grind the seed against known randomness or pick a favorable settle block.
settleRound(serverSeed, clientSeeds[], bets[]) at block > commitBlock + 10Result Generation
The smart contract hashes the server's seed together with the hash of all players' clientSeeds and the blockhash of a fixed future block (commitBlock + 10) chosen at commit time. The entropy block is locked when the seed was committed, so neither server nor players can choose it after the fact. If any one of these three inputs is random and honest, the outcome is unpredictable to everyone else.
result = keccak256(serverSeed, keccak256(clientSeeds), blockhash(commitBlock + 10)) % 37Result & Verification
The contract checks each bet against the result and emits events for every outcome. Winnings are tracked and your balance updates in real-time. When you're ready, cash out on-chain to your wallet.
Results recorded. Balances updated. Withdraw anytime via cashOut().Why Nobody Can Cheat
The Casino Can't Cheat
- ✓Server commits its seed hash BEFORE seeing any bets
- ✓Cannot change the seed after bets are placed (hash is on-chain)
- ✓Settlement must be in a later block -- no grinding against known randomness
- ✓Every player contributes their own seed; server cannot predict them
- ✓To rig the result, the server would need to know every player's seed AND the future block's prevrandao. Impossible.
Players Can't Cheat
- ✓Players don't know the server's seed (only the hash is public)
- ✓Cannot predict what prevrandao will be in the settlement block
- ✓Bets are locked before the result is generated
- ✓Smart contract enforces all payout rules automatically
Validators Can't Cheat
- ✓The blockhash entropy comes from a future block fixed at commit time
- ✓Server commits seed-hash before knowing the entropy block's hash
- ✓Players' own random seeds are mixed in too — server can't predict them
- ✓All three inputs must be honest; one source of entropy is enough
Open Source & Auditable
- ✓Smart contract is verified on Arbiscan -- read the code yourself
- ✓Every round's seed, entropy, and result are stored on-chain
- ✓Anyone can verify any historical round independently
- ✓verifyRound() function built into the contract
What's Still Operator-Dependent
Provably fair = the result cannot be tampered with. It does NOT mean the casino runs forever without operator action. Two things still depend on the operator running their settle bot:
Liveness
If the operator's bot is offline, rounds don't settle. Bets in flight are held off-chain and refunded — no funds are lost — but new rounds halt until the bot is back. Watch the timer; if rounds stop, the bot is down.
Slot Sessions
A slot session pauses your cashOut while active. If the operator never settles your session, after 1 hour you can call cancelSlotSessionByPlayer() directly on the contract to free up your funds. Your USDT is never locked indefinitely.
Full zero-trust randomness (no operator seed at all, automated VRF settle) is on the roadmap for the protocol-kit phase. For now, the operator can disrupt liveness but cannot manipulate outcomes — the math forbids it.
The Math
The result is a number from 0 to 36, exactly like a European roulette wheel. House edge: 2.70% (1/37), same as any real casino. The server cannot rig the result without knowing every player's clientSeed in advance -- combinatorially impossible.
Payout Table
Standard European roulette odds. Enforced by the smart contract.
| Bet Type | Coverage | Payout |
|---|---|---|
| Straight | 1 number | 36x |
| Split | 2 numbers | 18x |
| Street | 3 numbers | 12x |
| Corner | 4 numbers | 9x |
| Six Line | 6 numbers | 6x |
| Column / Dozen | 12 numbers | 3x |
| Red / Black / Odd / Even | 18 numbers | 2x |
| Low (1-18) / High (19-36) | 18 numbers | 2x |
| Voisins du Zero | 17 numbers | 3x |
| Tiers du Cylindre | 12 numbers | 3x |
| Orphelins | 8 numbers | 4x |
Smart Contract
Verified and open source on Arbiscan
Cash Out Anytime
Your balance updates in real-time as you play. Winnings and losses are tracked after each round settles on-chain. When you're ready to leave, hit the Cash Out button to withdraw your funds.
Cash Out calls cashOut() on the smart contract, which sends USDT directly to your wallet in a single transaction. There is no withdrawal queue, no manual approval from the operator.