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

# Plinko

Drop a chip down an 8-row pin pyramid and watch it bounce into one of nine payout slots. Every bounce is derived from a single Chainlink VRF random word - the path isn't animation, it's math.

***

### How it works

Overtime Plinko is a single-shot game: one bet, one VRF word, one result.

1. You pick a **risk level** - Low, Medium, or High - 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 takes the **low 8 bits** of the random word. Each bit is one row of pins: a `0` bounces the chip left, a `1` bounces it right
4. The final slot is the number of `1` bits (the "popcount") - a value from 0 to 8, giving 9 possible slots
5. Your payout is `bet × paytable[risk][slot]`

Because the slot is the count of right-bounces across 8 independent coin-flips, the outcome follows a **binomial distribution** - the classic Pascal's-triangle bell curve. The center slots are common; the edge slots are rare.

The outcome weights for the 9 slots are `[1, 8, 28, 56, 70, 56, 28, 8, 1]`, summing to 256. The middle slot (slot 4) is 70× more likely than either edge slot (slot 0 or slot 8). This is not a tunable parameter - it's the mathematics of an 8-row board, and it's the same for every player.

***

### Risk levels and payouts

Each risk level has its own paytable. Higher risk concentrates more of the payout at the rare edge slots and pays less in the common center.

Default paytables (multiplier on your bet):

| Slot (right-bounces) | Probability | Low   | Medium | High |
| -------------------- | ----------- | ----- | ------ | ---- |
| 0 (edge)             | 1/256       | 5.6×  | 13×    | 29×  |
| 1                    | 8/256       | 2.05× | 3×     | 4×   |
| 2                    | 28/256      | 1.05× | 1.2×   | 1.4× |
| 3                    | 56/256      | 1.0×  | 0.7×   | 0.3× |
| 4 (center)           | 70/256      | 0.5×  | 0.4×   | 0.2× |
| 5                    | 56/256      | 1.0×  | 0.7×   | 0.3× |
| 6                    | 28/256      | 1.05× | 1.2×   | 1.4× |
| 7                    | 8/256       | 2.05× | 3×     | 4×   |
| 8 (edge)             | 1/256       | 5.6×  | 13×    | 29×  |

The table is symmetric - landing at slot 0 pays the same as slot 8, because both require the same improbable run of identical bounces.

Low risk gives you frequent small returns and a soft landing in the middle. High risk turns the center into a near-total loss (0.2×) in exchange for a 29× payout on the edges.

***

### The house edge is enforced in the contract

Plinko's paytables are bound by a hard rule: the **weighted RTP across the binomial slot distribution can never exceed 98%**, which guarantees a house edge of at least 2%. This is checked in code (`_checkRtp`) every time a paytable is set - including at deployment and on any owner update. A paytable that would push RTP above 98% reverts with `EdgeFloorBreached`.

This is the inverse of a hidden-RTP slot machine. You can read the full paytable for any risk level off-chain (`getPaytable(risk)`), apply the fixed binomial weights, and confirm the exact house edge yourself before you drop a single chip.

***

### Limits

| Parameter              | Value                                             |
| ---------------------- | ------------------------------------------------- |
| Minimum bet            | 3 USD (configurable per game via core)            |
| Rows / slots           | 8 rows, 9 slots                                   |
| House edge floor       | 2% (enforced - RTP capped at 98%)                 |
| Maximum profit per bet | Set in `CasinoCoreV2` (`effectiveMaxProfitUsd`)   |
| Cancellation           | Admin/resolver only (no mid-game state to cancel) |

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

***

### User guide

#### 1. Open Plinko

Select **Plinko** from the casino lobby.

#### 2. Pick your risk

Choose Low, Medium, or High. The board's payout slots update to show that risk level's multipliers.

#### 3. Set your stake

Enter your amount and choose your collateral.

#### 4. Drop

Click **Drop**, sign the transaction. The bet enters pending while the contract waits for the VRF callback.

#### 5. Result

When the random word arrives, the chip's full path is revealed bounce-by-bounce, landing in its final slot. Your payout (if any) is transferred in the same transaction. The slot index, multiplier, and payout are in your bet history and on-chain.

***

### Why this matters

The bounce path in a traditional online Plinko is decided by the operator's server and shown to you as a pre-rendered animation. You see a ball "bounce," but the slot was chosen before the first pin. You have no way to know whether the displayed physics matched the actual probability distribution.

On Overtime, the path is the binary expansion of a verifiable random number. The bell curve isn't a claim - it's the arithmetic of counting bits. The RTP isn't a number on a help page - it's bounded in the contract and computable from the public paytable. There is no server deciding where the chip lands.


---

# 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/plinko.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.
