> For the complete documentation index, see [llms.txt](https://docs-v4.nftx.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-v4.nftx.io/gacha/for-depositors.md).

# For Depositors

Deposit floor NFTs to become the house in a gacha machine, earn the vig on every spin — including after your NFT is won — and the honest risks of doing so.

Depositing into a machine makes you part of the house. You stock it with floor NFTs, and in return you earn a share of the fee on every spin — for as long as your stake lives, and then some. This page covers the lifecycle and, just as importantly, what you're taking on.

{% hint style="warning" %}
**Testnet only.** Gacha is live today only on **Ethereum Sepolia** (chain `11155111`) as a rehearsal — there is no mainnet deployment yet.
{% endhint %}

{% hint style="warning" %}
**Your deposited NFTs are prizes.** Any asset you deposit can be won by a spinner at any time, at roughly floor value. Deposit floor items you're happy to part with — never something you value above its floor.
{% endhint %}

## The deal: the vig is your yield

Every spin is priced at the machine's expected value plus the **vig** (the house edge, default 20%). When a spin is claimed, the protocol takes its fee (default 5%) and the rest streams to the machine's depositors, split by the **live value** of each depositor's stake at the moment of distribution. You are, quite literally, the house — and the house edge is your yield.

There's no lock-up on earning: a unit starts taking pull risk and becomes withdrawable the instant you deposit. It enters the *reward* pool after a short **activation delay** (1 hour) — a guard that stops someone front-running a claim by depositing right before it. After that hour, your units earn.

## Residual yield: you keep earning after a win

This is the part that makes the model work. When a spinner wins one of your NFTs, your *reward stake doesn't shrink* — only your withdrawable claim on the physical NFTs does. The units the machine consumed keep earning spin revenue **for as long as the machine runs**, valued at your collection's live floor at each distribution.

In other words, a pulled asset converts from a claim on an NFT into a claim on a revenue stream. Live units and these *residual* units are indistinguishable to the reward math, so your intrinsic value is continuously re-priced against the market — which cuts both ways: the residual rises when your collection rises and **falls when it falls**.

## The lifecycle

```
deposit(machineId, collection, tokenIds)
        │
        ├─ units are drawable immediately, earn rewards after a 1h activation delay
        │
        ▼
   earn the vig on every spin  ──►  harvest(machineId, you)  ──►  withdraw() your ETH
        │
        ▼
requestWithdrawal(machineId, collection, units)
        │   rewards on those units stop NOW; the NFTs stay winnable during the delay
        ├──(48h withdrawal delay)──►  matured
        │                                 │
        │                                 ├──(execute within 48h)──►  executeWithdrawal(): NFTs out
        │                                 └──(window missed)────────►  expired; request again
```

Deposits and withdrawals both run through the [NFTXGachaVault](/contracts/gacha-vault.md). A withdrawal is a deliberate, four-state process — request, mature, execute, expire — and each step exists for a reason:

* **Rewards stop at request.** The units you're withdrawing earn nothing during the delay. That's the cost of exiting, and it's what makes flash-in/flash-out games unprofitable.
* **Pull risk continues through the delay.** Your NFTs stay in custody and remain winnable right up until you execute. If some are won while you wait, you **get back fewer than you requested** — and the shortfall is re-credited to you as residual units, so you resume earning on exactly what the machine consumed.
* **Token IDs are contract-chosen, not yours to pick.** You withdraw whole units from the tail of the bucket, never hand-selected IDs — this closes off cherry-picking the least-junk items on the way out.
* **Matured requests expire** after their 48-hour execution window. Miss it and you re-request from scratch; a matured request can't be held open as a standing option.

## Getting paid

Rewards are ETH and paid pull-style, in two steps — the same pattern every revenue path in NFTX uses:

```
harvest(machineId, account)   →  credits your escrow balance
withdraw()                    →  sends the ETH to your wallet
```

You can check what's waiting before harvesting with `pendingRewards(machineId, account)`. Fractional withdrawable dust never withdraws as a whole NFT, but it keeps earning.

## The honest risks

The depositor model is a real yield opportunity built on real risk. Read this list as carefully as the yield:

* **Your NFTs are prizes.** Anything you deposit can be won at floor value at any time. Don't deposit above-floor items.
* **Residual yield is not principal.** After a pull you hold a revenue stream, not a claim on any asset. Its value depends entirely on future spin volume — a machine that stops attracting spins stops paying.
* **Residuals track the market both ways.** Your stake is valued at your collection's live floor at each distribution; it falls when your collection falls.
* **You may get back fewer than you requested.** Assets stay winnable during the 48-hour withdrawal delay; shortfalls become residual units.
* **Matured withdrawals expire.** Execute inside the 48-hour window or re-request.
* **You bear your bucket's oracle risk.** If your collection's pool is manipulated below the machine's guard thresholds, your bucket drains first. The machine's fail-closed guards trip for everyone, but the per-bucket exposure is yours — see the [oracle-manipulation surface](/gacha/how-it-works.md#machines-are-quality-bands) and the guard set.
* **Jackpot variance is yours, collectively.** A big-ticket deposit is a gift of variance to every other staker until it's pulled; the weight-share cap bounds it, but doesn't remove it.
* **A machine can drain.** With no restock loop, a machine that stops attracting deposits winds down — that's a product risk, not a solvency bug, but it's real.

{% hint style="info" %}
Spinning your own machine isn't an edge, and it isn't punished either: a depositor who owns a fraction `f` of a machine and spins it recaptures `f` of the revenue while absorbing `f` of the pull — netting roughly `−vig · EV · (1 − f)`. With no protocol fee that reads as "you only pay vig on the share of the house you don't own." A loyalty discount, not a loophole.
{% endhint %}
