> For the complete documentation index, see [llms.txt](https://docs.takara.gg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.takara.gg/using-takara/odds-and-rtp.md).

# Odds and RTP

Every number on this page is read from the deployed contract and can be verified by anyone. Call `tier(i)` on the Machine and check for yourself.

## The prize table

| Tier        |     Chance |       Face value | $10 pack | $100 pack | $1000 pack | Contribution to RTP |
| ----------- | ---------: | ---------------: | -------: | --------: | ---------: | ------------------: |
| Common      | **70.87%** |            0.70× |    $7.00 |       $70 |       $700 |              49.61% |
| Common+     | **21.98%** |            0.88× |    $8.80 |       $88 |       $880 |              19.34% |
| Rare        |  **5.00%** |            1.88× |   $18.80 |      $188 |     $1,880 |               9.40% |
| Epic        |  **1.50%** |            3.88× |   $38.80 |      $388 |     $3,880 |               5.82% |
| Legendary   |  **0.60%** |            8.88× |   $88.80 |      $888 |     $8,880 |               5.33% |
| **Jackpot** |  **0.05%** | the growing card |        — |         — |          — |                   — |

**Rack RTP: 89.50%** — on every pack.

Face value is a multiple of the pack price, so the odds and the RTP are identical on every pack size. Bigger packs are bigger stakes, not better odds.

The jackpot feed (0.5% of every spin) and the Golden Chest feed (1%) are also player money, they leave the machine and return to players as rarer, larger prizes. Counting the jackpot flow, effective return to players is around **90%**.

## Which stock you get

The tier decides **how much**, not **which company**.

Prize stocks are SPY, TSLA, NVDA, MSFT and SPCX, and every one is permitted on every non-jackpot tier. What you actually draw is uniform across the cards physically on that pack-and-tier shelf so if a shelf holds 5 NVDA and 1 TSLA, you draw NVDA five times out of six.

That means a "common" card and a "legendary" card can hold the same asset in different sizes. On the $100 pack a common NVDA card holds $70 of NVDA; a legendary NVDA card holds $888 of it.

**Which stocks get racked on which pack is a liquidity decision.** A card is a real market buy at restock time, and a legendary on the $1000 pack is an $8,880 order so the restocker shelves each pack with stocks whose USDG pool is deep enough to fill without moving the price. The shelves are public — `rack(packId, tier)` — so you can see exactly what each pack can hand you before you spin.

## The jackpot

One card. It never gets drawn from a rack, it grows.

0.5% of every spin feeds a fund. Periodically that fund is swapped into the jackpot stock (**SPCX**) and **topped up into a single certificate**, so the prize compounds continuously. Hit the 0.05% tier and the whole card is yours, plus any fund not yet swapped in.

Jackpot odds are hard-capped at **0.20%** by the contract. The operator cannot raise them past that, and `setTable` reverts if they try.

## The Golden Chest

1% of every spin feeds the chest. When cumulative spin volume in the current window crosses **$10,000**, the chest cracks on the next settlement and the entire fund is credited to **one randomly chosen spinner from that window**.

Not the spinner who cracked it only a random one. Every spin in the window has an equal chance, so the person who happened to push volume over the line has no advantage. The window then resets.

The winner is picked from the same VRF word using a separate hash lane, so it cannot be predicted or steered.

## Verifying a spin yourself

Every spin emits `SpinRequested(spinId, player, packId, price, requestId)` and later `SpinSettled(spinId, player, tierIndex, certId, payoutUsd, jackpotWon, fallbackPaid)`.

The `requestId` is the house VRF request. From the adapter's logs, read the per-request `seed` (the `Requested` event) and the revealed `preimage` (the `Revealed` event), then compute:

```solidity
word = uint256(keccak256(abi.encode(preimage, seed, 0)))
```

`word % 10000` gives the tier — walk the table and check it matches `tierIndex`. You can also confirm `keccak256(preimage)` equals the commitment that stood on-chain *before* the reveal, which proves the operator was pinned to this word before your spin existed and could not have chosen it.


---

# 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.takara.gg/using-takara/odds-and-rtp.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.
