> 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/slots.md).

# Slots

### How it works

The Overtime Slots contract implements a 3-reel slot machine. When you spin:

1. You stake an amount in your chosen collateral
2. The contract requests a random word from Chainlink VRF
3. From the random word, three reels are sampled independently using the configured `symbolWeights`
4. The result is checked against the pay table:
   * **Triple** (all three reels match) → pays the symbol's `triplePayout` multiplier
   * **Adjacent pair** (reels 1+2 match, or reels 2+3 match) → pays the symbol's `pairPayout` multiplier
   * Otherwise → no payout
5. If you won, the payout is transferred immediately

Every component of this is configurable per deployment, and every component is **public state**.

***

### What's onchain

| Parameter             | What it is                                                                                  |
| --------------------- | ------------------------------------------------------------------------------------------- |
| `symbolCount`         | Number of distinct symbols on the reels                                                     |
| `symbolWeights[i]`    | Weight of symbol `i` in the reel sampling distribution                                      |
| `symbolWeightsTotal`  | Cached sum of weights (probability of symbol `i` = `symbolWeights[i] / symbolWeightsTotal`) |
| `triplePayout[i]`     | Payout multiplier for three of symbol `i`                                                   |
| `pairPayout[i]`       | Payout multiplier for an adjacent pair of symbol `i`                                        |
| `maxPayoutMultiplier` | Cap used to size the bankroll reservation                                                   |
| `houseEdge`           | Public state variable, capped at `MAX_HOUSE_EDGE = 5%`                                      |

You can read every one of these directly from the contract. The probability of any outcome is a pure function of these public variables, meaning the **expected return-to-player (RTP) of the slot is something you can calculate yourself before staking a single token**.

***

### Why this is unusual

Most online slots ask you to trust an RTP figure printed in the game info modal. There is no way to verify it. Even regulated jurisdictions only require periodic audits, not real-time verifiability.

Overtime Slots is the inverse:

* **The RTP is computable from public state.** Anyone can sum `weight × payout` across all winning combinations and compare to the stake.
* **The house edge is hard-capped at 5%.** The contract structurally cannot be configured to extract more.
* **Any payout-table change emits an event.** Every spin from that block onward uses the new table, and every spinner can read it before they spin.

***

### Limits

| Parameter               | Value                                         |
| ----------------------- | --------------------------------------------- |
| Minimum bet             | 3 USD                                         |
| House edge              | Configurable, capped at 5% (`MAX_HOUSE_EDGE`) |
| Maximum profit per spin | Set per deployment (`maxProfitUsd`)           |
| Cancel timeout          | 30 seconds minimum                            |

Supported collaterals: **USDC**, **WETH**, **$OVER**.

***

### User guide

#### 1. Open the Slots machine

Select **Slots** from the casino lobby. The pay table is visible in the interface and matches the on-chain configuration exactly.

> *\[Screenshot — Slots interface with visible pay table]*

#### 2. Set your stake and collateral

Choose your collateral, enter your stake amount.

> *\[Screenshot — stake entry]*

#### 3. Spin

Click **Spin** and sign the transaction. The spin enters `PENDING` while waiting for the VRF callback.

> *\[Screenshot — pending spin]*

#### 4. Result

When the random word arrives, all three reels resolve at once. The contract checks for a triple match, then for adjacent pairs, and pays out accordingly.

> *\[Screenshot — resolved spin with reel result]*

#### 5. Payout

Winning spins transfer the payout to your wallet in the same transaction. The result, the random word and the payout are all in your bet history and on a block explorer.

> *\[Screenshot — winning spin with payout]*

***

### How to verify RTP yourself

Want to confirm the slot's RTP before you stake? At a high level:

1. Read `symbolCount`, `symbolWeights[]`, `triplePayout[]`, `pairPayout[]` from the contract
2. Compute the probability of each outcome:
   * Triple of symbol `i`: `(weight[i] / total)^3`
   * Adjacent pair of `i` (positions 1+2 or 2+3, third reel anything else): `2 × (weight[i] / total)^2 × ((total - weight[i]) / total)`
3. Multiply each probability by the corresponding payout multiplier
4. Sum across all symbols → that's the expected return per unit staked

The complement of that sum is the effective house edge.

You don't have to take Overtime's word for it. You don't have to trust an audit firm. You can read the chain.

***

### Free bets

Slots supports `placeBetWithFreeBet` for users with an Overtime free-bet balance. Mechanics are identical, and free-bet wins are settled through the existing Overtime free-bets infrastructure.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.overtime.io/overtime-casino/games/quick-games/slots.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
