> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voiz.digital/llms.txt
> Use this file to discover all available pages before exploring further.

# How liquidity provision works

> You are the book. One OutcomeAmm, ERC-20 pool shares, trading stops at resolve.

On VOIZ, LPs **are** the market. You are not picking Yes or No. You deposit collateral into the market's OutcomeAmm so the community can trade through you.

You hold a mix of outcome tokens (the book). Protocol / creator / referrer fees are **cash out of the trade**. The LP cut (default 0.8%) stays in the pool as extra complete sets. Your P\&L is inventory marked at AMM (or 0/1) prices versus cost — not `deposit × odds × win/lose`. Worked numbers (100 collateral, 70/30, buy 40): [LP calculator](/guides/lp-calculator).

Not financial advice. Size only what you can lose.

## What you actually mint

`credits` (or `seedWei` on first LP) is one collateral number. The AMM pulls it, splits a complete set, keeps a slice of each slot as inventory, and mints ERC-20 pool shares to you.

```
credits C
└── addFunding(C, hint)
    ├── AMM keeps outcome tokens (the book)
    ├── leftover tokens of lighter slots return to you
    └── you receive pool shares (vAMM)
```

|               | Seed (`market.seed`)            | Later LP (`market.addLiquidity`) |
| ------------- | ------------------------------- | -------------------------------- |
| Contract      | `addFunding`                    | `addFunding`                     |
| Hint          | Named-outcome odds, Invalid = 0 | Empty — join current proportions |
| Shares minted | `C`                             | `C * supply / max(reserves)`     |

Invalid is part of the complete set and sits in the AMM. It is not tradable and always prices at 0.

On a skewed book, later LP binds on the heaviest reserve. Lighter slots send leftover outcome tokens back to the funder.

## What you earn

| Source                                                | Who gets it                          |
| ----------------------------------------------------- | ------------------------------------ |
| Protocol 1% + creator 0.5% + referrer 0.2% (defaults) | Treasury / creator / referrer (cash) |
| LP 0.8% (default)                                     | Pool inventory (complete sets)       |
| Mark vs cost                                          | LP share lot                         |

Cost on add is `max(amountsAdded)` (`addedFunds`). Indexer remove proceeds are the **named** basket at 1e18 prices, or 0/1 if resolved. Send-back tokens are a **share position**, not this LP lot.

```
P&L  ≈  realized on burns  +  mark(remaining shares)  −  remaining cost
mark = shares / supply × Σ_named (reserve_i × priceCt_i)
```

A book that resolves quickly can show almost no trading and a large inventory term. The halt at resolve protects remaining inventory from 0/1 arb.

## Risks

### Trading stops when the market resolves — otherwise LPs get arbitraged

After payouts are set, every named share is worth **exactly `1` or `0` collateral**. If swaps kept running:

* **Winner still priced below 1** — buy it from the AMM, redeem at 1.
* **Loser still priced above 0** — sell worthless shares into the AMM, take collateral out.

`buy` / `sell` therefore revert `Resolved` once Conditional Tokens has a payout denominator. Fee income from traders stops with them.

Fee income for the protocol only exists **between seed and resolve**. A market that resolves quickly can pay almost no volume relative to the inventory you posted — but leaving the AMM open would be worse: the inventory itself would be picked off.

### Inventory while the market is open

Across-outcome LP is how you market-make the whole book without picking Yes or No. It is **not delta-neutral**. As implied probability moves, you hold more of the outcome the market is dumping. You are the other side of every trader.

### Even join vs live odds

Later `addLiquidity` joins **current** reserve proportions. It does not re-apply your original seed odds.

### Idle Invalid

The complete-set mint always prints Invalid. It never trades. Unwinding a full set later means you need the named outcomes back (from `removeFunding`, from trading, or from leftover send-backs).

### Operational

Approvals, factory version, and AMM clone all have to match. Tiny `credits` revert (`mintAmount == 0` or dust). Contracts, oracles, and resolution can fail.

This is not financial advice. Size only what you can lose.

## How to exit

1. `client.user(owner).lpPositions({ market })` — find the pool-share lot.
2. Open: `market.removeFunding({ shares, owner })` — basket of every slot, then `merge` complete sets if you want collateral.
3. Resolved: `market.redeemLp({ shares, owner })` — burn shares, redeem the basket to collateral (same redeem fee).
4. Send-back / leftover named tokens: `market.redeem` as share positions.

`redeemLp` only works after resolve. While open there is no 1:1 payout on a single outcome.

## In the SDK

```ts theme={null}
await market.seed({ seedWei, oddsBps, owner })
await market.addLiquidity({ credits, owner })
```

See [Provide liquidity](/guides/provide-lp) for the later-LP call shape.
