> For the complete documentation index, see [llms.txt](https://docs.overtime.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.overtime.io/overtime-casino/games/quick-games/keno.md).

# Keno

Pick up to 10 numbers from a pool of 80, watch 20 get drawn, and get paid on how many you matched. An ancient lottery game with a fully onchain, verifiable draw.

***

### How it works

1. You pick between **1 and 10 numbers** from the pool of 80, and place your bet
2. The contract reserves the worst-case payout and requests one random word from Chainlink VRF
3. On fulfillment, the contract draws **20 unique numbers** from the 80 using a partial Fisher-Yates shuffle seeded entirely by that one random word
4. Your payout is `bet × paytable[picks][hits]`, where `hits` is how many of your picked numbers appeared in the 20 drawn

A single 256-bit random word carries enough entropy to perform all 20 draws — the contract slices the word into chunks (16 bits per swap) and re-hashes once partway through to complete the shuffle. The draw is uniform and unbiased; the bias on any individual swap is under 0.04%.

Your picks and the drawn numbers are both stored as compact bitmasks, so the entire game state — what you picked, what came up, how many you hit - is on-chain and verifiable.

***

### Payouts

Keno's payout depends on **how many numbers you picked** and **how many you hit**. More picks means each individual hit is rarer, so the multipliers climb steeply. Each pick count has its own paytable.

Default top-end payouts (multiplier on bet) by pick count:

| Picks | Hit all? | Top multiplier | Approx. RTP |
| ----- | -------- | -------------- | ----------- |
| 1     | 1/1      | 3.92×          | 98.0%       |
| 2     | 2/2      | 10×            | 98.1%       |
| 3     | 3/3      | 50×            | 97.1%       |
| 4     | 4/4      | 80×            | 97.7%       |
| 5     | 5/5      | 80×            | 97.3%       |
| 6     | 6/6      | 100×           | 97.9%       |
| 7     | 7/7      | 250×           | \~97%       |
| 8     | 8/8      | 300×           | \~97.8%     |
| 9     | 9/9      | 300×           | \~97.6%     |
| 10    | 10/10    | 300×           | \~97%       |

Lower hit counts on higher pick selections pay smaller multiples, and the very lowest hit counts pay nothing - the paytables are calibrated so most of the return comes from the middle of the range (3–6 hits), where the probability actually lives.

All multipliers are hard-capped at **300×**. Hitting all 10 of a Pick-10 is astronomically rare (probability ≈ 1.12 × 10⁻⁷), so the cap barely affects the real RTP - the bulk of expected value sits in the common outcomes.

Every paytable is calibrated to a house edge in the **1.9% to 3.1%** range per pick count, and you can read each one off-chain (`getPaytable(picks)`) to verify it yourself.

***

### Limits

| Parameter          | Value                                  |
| ------------------ | -------------------------------------- |
| Minimum bet        | 3 USD (configurable per game via core) |
| Pool size          | 80 numbers                             |
| Numbers drawn      | 20                                     |
| Picks per bet      | 1 to 10                                |
| Maximum multiplier | 300× (hard cap)                        |
| House edge         | \~1.9%–3.1% per pick count             |
| Cancellation       | Admin/resolver only                    |

Supported collaterals: **USDC**, **WETH**, **$OVER**. Free bets supported via the `isFreeBet` flag on `placeBet`.

***

### User guide

#### 1. Open Keno

Select **Keno** from the casino lobby. You'll see the 80-number grid.

#### 2. Pick your numbers

Tap between 1 and 10 numbers. The interface shows the live paytable for your current pick count, so you can see exactly what each hit count pays before you commit.

#### 3. Set your stake and play

Enter your stake, choose your collateral, and confirm. The bet enters pending while the draw is generated.

#### 4. The draw

When the VRF callback arrives, 20 numbers light up across the grid. Your matched numbers are highlighted, and your hit count and payout are computed instantly.

#### 5. Payout

Winnings are transferred in the same transaction that resolves the draw. The full result — your picks, the 20 drawn numbers, your hit count, and the multiplier — is recorded on-chain.

***

### Why this matters

Keno is the highest-house-edge game in most physical casinos, often running 25–35% against the player - precisely because the draw is opaque and the paytables are tuned in the operator's favor without disclosure. Overtime inverts both problems. The 20-number draw comes from a single verifiable Chainlink VRF word using a transparent shuffle, and the paytables are published on-chain and capped to a house edge under \~3%. You can compute the exact expected value of any pick count from public data. A Keno game you can actually verify is, historically, a genuinely unusual thing.
