Fairness
OPDuel Originals
Limbo
Plinko
Keno
Roulette
Mines
Blackjack
Roll
Dice
Provably Fair Roulette
OPDuel Roulette uses a European wheel with 37 pockets - numbers 0 through 36. The algorithm generates a single random number that determines where the ball lands.
Verify Game Fairness
The Algorithm
// Step 1: Generate hash
const message = `${clientSeed}:${nonce}:0`;
const hash = HMAC_SHA256(serverSeed, message);
// Step 2: Extract float from first 4 bytes
const bytes = hash.slice(0, 4);
let float = 0;
for (let i = 0; i < 4; i++) {
float += bytes[i] / Math.pow(256, i + 1);
}
// Step 3: Scale to roulette range (0-36)
const result = Math.floor(float * 37);How It Works
- Combine seeds - Your client seed, nonce, and round (always 0) form the message
- Generate hash - HMAC-SHA256 produces 32 deterministic bytes
- Extract float - First 4 bytes become a number between 0 and 1
- Scale to wheel - Multiply by 37 and floor to get a number from 0 to 36
Each number has exactly a 1/37 (2.70%) chance of being selected.
Number Colors
European roulette follows a specific color pattern:
| Color | Numbers |
|---|---|
| Green | 0 |
| Red | 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 |
| Black | 2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35 |
Note: The colors don’t simply alternate. The pattern follows the physical European roulette wheel layout.
Bet Types and Payouts
| Bet Type | Payout | Covers |
|---|---|---|
| Straight (single number) | 36x (35:1) | 1 number |
| Split | 18x (17:1) | 2 numbers |
| Street | 12x (11:1) | 3 numbers |
| Corner | 9x (8:1) | 4 numbers |
| Line | 6x (5:1) | 6 numbers |
| Column / Dozen | 3x (2:1) | 12 numbers |
| Red / Black | 2x (1:1) | 18 numbers |
| Odd / Even | 2x (1:1) | 18 numbers |
| 1-18 / 19-36 | 2x (1:1) | 18 numbers |
Example
Given these inputs:
- Server Seed:
c5e7146c5863d7d647c93ffe7d4ec13fffbb7311108fab0c067d97bcc2b32d55 - Client Seed:
LuckyClientSeed777 - Nonce:
5
The hash produces bytes: [109, 117, 110, 25] (hex: 6d 75 6e 19)
float = 109/256 + 117/256² + 110/256³ + 25/256⁴
= 0.4257813 + 0.001785 + 0.0000065 + 0.0000000006
= 0.4275730907
result = floor(0.4275730907 × 37)
= floor(15.820204)
= 15The ball lands on 15 Black.

