Keno: how ten numbers are drawn from forty
How a Stake-scheme Keno draw picks 10 of 40 numbers using floats and selection without replacement, and why payout tables are operator-specific.
Disclosure: VerifyRoll is sponsored by Craze, a competitor of the operators whose published RTP appears below. Figures here are computed or taken from what operators publish, dated; nothing is estimated.
How the result is derived
Under the Stake scheme every result starts from HMAC-SHA256(server seed, “clientSeed:nonce:cursor”), read four bytes at a time into floats in [0, 1). Keno consumes ten floats.
- Start with 40 positions numbered 0 to 39 (shown to players as 1 to 40).
- For each of the 10 draws, take the next float and compute floor(float × positions remaining). Remove the chosen position.
- Ten floats fit in two HMAC rounds: eight from cursor 0, two from cursor 1.
for i in 1 … 10: idx = floor(float_i × |remaining|); drawn_i = remaining[idx] + 1; remaining.splice(idx, 1)
Payout rule and where the edge comes from
You choose 1 to 10 numbers and a risk level; the payout depends on how many of yours are drawn. The fairness package carries no Keno payout table because each operator publishes its own, per risk level.
Check the payout table in the game's own rules panel. The RTP figures below are the operator's published number for the game as a whole.
Source of the edge. The draw is uniform over all 10-of-40 combinations (there are 847,660,528 of them). The edge is in the payout table, which is set by the operator and differs by risk level.
Worked example
Computed on the server by the same functions the verifier runs, from the example values the verifier's “Load example values” button uses. These are not seeds from a real round.
- server seed
- 2b4d2f1a7c9e0f3b8a6d5c4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a
- client seed
- verifyroll
- nonce
- 7
- HMAC-SHA256(server seed, “verifyroll:7:0”)81727d41db6b44706ddfd681ab9cd0124cc482392adbbdda8ac8ac626566bf1a
- HMAC-SHA256(server seed, “verifyroll:7:1”)c2c07f6bc3f0feddd98e7bd8b9e1bb233dfcbb5b6f96e9deb6d585c6cf3f461f
- Floats (10): 0.50565322 0.85710552 0.42919675 0.67036152 0.29987348 0.16741549 0.54212453 0.39609904 0.76074978 0.76539605
- pick 1: floor(0.50565322 × 40) = 20 → tile 20
- pick 2: floor(0.85710552 × 39) = 33 → tile 34
- pick 3: floor(0.42919675 × 38) = 16 → tile 16
- pick 4: floor(0.67036152 × 37) = 24 → tile 26
- pick 5: floor(0.29987348 × 36) = 10 → tile 10
- pick 6: floor(0.16741549 × 35) = 5 → tile 5
- pick 7: floor(0.54212453 × 34) = 18 → tile 22
- pick 8: floor(0.39609904 × 33) = 13 → tile 15
- pick 9: floor(0.76074978 × 32) = 24 → tile 31
- pick 10: floor(0.76539605 × 31) = 23 → tile 30
Published RTP by operator
| Stake | Shuffle | BC.Game | Craze |
|---|---|---|---|
| 99% | 99% | 99% | — |
Checked 2026-09-23. “—” means not offered or not published. The figure in your game's info panel wins.
Questions
- Are the drawn numbers sorted in the game?
- The game shows them sorted; the verifier shows the draw order first because that is what the floats produce, then the sorted set.
- Why is there no Keno calculator here?
- The hit probabilities are plain hypergeometric arithmetic, but without a payout table there is nothing honest to compute an RTP from. When operators publish tables in a stable form we will add one.
Next
- Verify a Keno bet of your own, or by operator: Stake Keno verifier · Shuffle Keno verifier
- House edge for every game and operator
last reviewed 2026-09-23 · derivation as implemented in @craze/fairness