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 Arbitrum's validator randomness. 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 submits all bets plus every player's clientSeed to the smart contract in a single transaction and reveals the original seed. The contract enforces that settlement happens in a strictly later block than the commit, so the server cannot grind the seed against known randomness.
settleRound(serverSeed, clientSeeds[], bets[]) at block > NResult Generation
The smart contract hashes the server's seed together with the hash of all players' clientSeeds and the settlement block's prevrandao. All three inputs must be combined for the result -- if any one of them is random and honest, the outcome is unpredictable to everyone else.
result = keccak256(serverSeed, keccak256(clientSeeds), block.prevrandao) % 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
- ✓Validators control prevrandao but don't know the server seed
- ✓Manipulating prevrandao costs $50,000+ in lost block rewards
- ✓Even with manipulation, the result is still combined with the unknown seed
- ✓Economic attack cost far exceeds any possible gain
Open Source & Auditable
- ✓Smart contract is verified on Arbiscan -- read the code yourself
- ✓Every round's seed, prevrandao, and result are stored on-chain
- ✓Anyone can verify any historical round independently
- ✓verifyRound() function built into the contract
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.