GALABET FAIR / The pocket comes first

Roulette

Thirty-seven pockets, including zero. Watch the selected pocket meet the pointer, then compare it with a colour, number or parity choice.

Interactive public-seed demonstration

032151942122517346271336113082310524163312014319221829728123532620POCKET
POCKET / NONCE 4220

Black · European wheel

Selection matches
A fox croupier places a chip beside a result slip at a curved table.
Read the calculation ↓

Selection comparison only. No chips are debited or paid.

Public inputs. Real calculations.
Each new example advances the nonce and runs @galabet/fair in your browser. Results are reproducible, and the seed is visible to everyone.

Inspect this Roulette result · nonce 42

THIS EXAMPLE / NONCE 42

Keep the inputs.
Check the result.

This demonstration uses a public server seed. Its record checks the calculation; it does not establish when a live service published a commitment.

Client seed
galabet
Fractions consumed
1
Highest cursor
0
Server seed commitment
ab37723062965715c5e6eeb54816f909a8e787bd3bfaee67a3cc0a3b90707de7
Open full verifier ↗

Revealed inputs and complete JSON
{
  "spec": "GFS/1.0",
  "profile": "single-player",
  "game": "roulette",
  "params": {},
  "serverSeed": "5c1f7d3e8a2b4c6d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d",
  "clientSeed": "galabet",
  "nonce": 42,
  "commitment": "ab37723062965715c5e6eeb54816f909a8e787bd3bfaee67a3cc0a3b90707de7",
  "cursor": 0,
  "result": 20,
  "at": 0
}

TAKE A TURN · GALABET PRACTICE

Play Roulette.

YOUR ROULETTE BALANCE—virtual credits
03215194212251734627133611308231052416331201431922182972812353260POCKET

Virtual credits only. No deposits or withdrawals. Each game has its own practice balance. Sessions last 24 hours; unfinished rounds can be resumed during that time.

Round commitment & rulesConnecting…

The server commits to a fresh seed before your stake. Your chosen client seed and the revealed record reproduce the completed outcome. Verification checks the shuffle or result, not the payout policy or your action history.

Payouts follow the published demo rules. Returned credits include the stake and are rounded down to whole credits.

THE SMALL CROSS-LANGUAGE CHECK

Pocket 20.
Same in Python.

A compact mapping makes a useful first test for an independent implementation. Derive the fraction from the same inputs, multiply by 37 and take the integer part.

floor(0.5611712262… × 37) = 20

A pocket is not a payout.

Single-number and group selections have different rules. A live result slip should retain the original selection, stake and returned chips alongside the generated pocket. Reproducing pocket 20 alone does not verify settlement.

A SELECTION HAS A FOOTPRINT

Which pockets
does this cover?

A dozen covers twelve numbers. A colour covers eighteen. A single-number selection covers one. Use the table to connect the selection name with the exact pockets the result must match.

12 / 37 pockets

Second dozen / 13–24 returns 3× the stake when it wins. The highlighted pockets are the ones that satisfy this selection.

12/37 × 3 = 97.2973%

Expected total return before whole-chip rounding. A straight win returns 36× including the original stake.

012345678910111213•14•15•16•17•18•19•20•21•22•23•24•252627282930313233343536

Zero changes the denominator.

Red and black cover 36 pockets between them, but the wheel contains 37. A colour selection therefore wins on 18/37 outcomes under the equal-pocket model. Its 2× total return gives an expected table return of 36/37.

The demo API also supports low/high, dozens and columns. A result such as pocket 20 should be checked against the original selection object; the pocket number alone cannot explain whether a particular bet won.

REFERENCE EXAMPLE / NONCE 42

Check the mapping with Python’s standard library

Python · independent specification example
import hashlib
import hmac

server_seed = '5c1f7d3e8a2b4c6d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d'
message = b'galabet:42:0'
# GFS uses the hex STRING, not bytes.fromhex(server_seed).
digest = hmac.new(server_seed.encode(), message, hashlib.sha256).digest()
fraction = int.from_bytes(digest[:4], 'big') / 2**32
pocket = int(fraction * 37)
print(pocket)
EXPECTED OUTPUT
20
Digest also matches the TypeScript reference.

Executed locally against the TypeScript fixture. This is an illustrative port of the calculation, not a packaged Python integration.