Stochastic Finance logo Docs

Last updated 6 October 2026

Providing liquidity

A liquidity provider seeds one option pool with USDC and option tokens, and earns every swap fee paid by everyone who trades that leg. The dApp page is /add_liquidity.

This is the role the protocol's economics are built around. Options are hard to make markets in — that is exactly why the fee that pays you for it starts at 2% rather than 30 basis points, and rises from there. Simulated against the deployed curve, that design puts the median liquidity provider at around 10% a year.

What you need first

A pool always receives two assets, for the same option leg:

  • USDC — ordinary balance
  • Option tokens of the leg you want to make a market in

You can bring the option tokens yourself — mint them first: post collateral, receive both legs, then put one leg into a pool. Or start from USDC only and let the dApp mint them in the same flow (see USDC only below).

The pool is always two-sided

The contract has no single-asset deposit. A pool is a pair, and seeding it means supplying both sides in the ratio the pool is already at (or, if you are first, in whatever ratio you choose — which sets the opening price). The dApp's USDC only mode does not change that: it mints the options for you, then deposits them with USDC.

Adding liquidity in the dApp

The page header shows the selected pair, as on /swaps; Change pair opens the list. Below it:

Block What it shows
Pool Pool price, theoretical (model) price, USDC reserve, option reserve, LP supply
Your position Your LP tokens, pool share, what they hold, their value at the pool price — and your share and value after this deposit
Pool activity Swaps and volume over 7 days, and the latest liquidity events

The ticket on the right has two modes.

USDC + option

Deposit USDC and options you already hold, in the pool's ratio.

  1. Enter the USDC to deposit or the Options to deposit. The other field fills in at the pool ratio.
  2. Check You deposit, LP tokens and Your pool share after.
  3. Click Provide liquidity. The first time, the wallet asks for USDC and option approvals for the router; then it asks for the deposit.

/add_liquidity in USDC + option mode

USDC only

You enter a number of options. The dApp mints them (1 USDC of collateral each, as on Issue options) and deposits them with USDC at the pool price.

  1. Switch to USDC only and enter Options to mint.
  2. Check Options minted, You spend (collateral plus the USDC side of the deposit) and LP tokens.
  3. Click Mint and provide liquidity. The wallet asks for up to five signatures: two USDC approvals, the mint, the option approval, the deposit. The page shows which step is running.

/add_liquidity in USDC only mode

Two things to know:

  • The other leg stays in your wallet. Minting always gives both legs. Mint for a Call 2,527 Long pool and you also get the same number of Call 2,527 Short. You can sell it, put it in its own pool, or hold it.
  • It needs an existing pool. The mint amount is sized from the pool price, so on a new pool this mode is off. Open the pool with USDC + option first.

Slippage (1% by default, the gear button) sets how far the pool ratio may move before the deposit reverts. "Pool read 14s ago" shows how old the reserves are; the round arrow reads them again.

Adding liquidity on-chain

addLiquidity(
    tradeToken,          // SF Options address
    tokenId,             // the leg
    amountStableDesired, // USDC you'd like to add
    amountTradeDesired,  // option units you'd like to add
    amountStableMin,     // slippage guards against a ratio shift
    amountTradeMin,
    to,                  // who receives the LP shares
    deadline
) returns (amountStable, amountTrade, liquidity)

If a pool for that leg doesn't exist yet, the router creates it. The pair address is deterministic, derived from (option contract, tokenId), so it can be computed before it exists.

You receive LP shares — an ERC-20 token (SFSwap V0 / SFS-V0) specific to that one pool. They are transferable: whoever holds them can withdraw the underlying, which means LP positions can be moved or sold without touching the pool.

Opening a new pool

The first deposit sets the price. Shares minted are the geometric mean of the two amounts:

$$s_{minted} = \sqrt{x_{USDC} \cdot y_{option}}$$

Two consequences for the first provider:

  • You are choosing the opening price. Deposit at a ratio far from the model price and the first arbitrageur will correct it at your expense. Price your opening deposit off getOptionPrice.
  • A fixed 1,000,000 share units — 1 LP token — are permanently locked. They are minted to address(1) and can never be redeemed. This is a standard anti-donation measure — it stops an attacker inflating the value of a single share unit to make the pool unusable for small providers. It costs you 1 / s_minted of the deposit: about 11% on 8.61 USDC + 10 options, under 0.1% once $\sqrt{x \cdot y}$ passes 1,000. It only ever applies to the first deposit.

On a new pool /add_liquidity says so: the Pool block reads "New pool, no liquidity yet", the theoretical price is shown so you can match it, and a warning gives the locked amount for your deposit in USDC.

/add_liquidity opening a new pool: first-LP warning with the locked amount

Subsequent deposits mint shares pro-rata to the reserves and don't touch this.

How you earn

Every swap against your pool pays a fee in USDC, and 100% of it stays with you. Nothing is split with the protocol, nothing is routed to a treasury, and there is nothing to claim — the fee simply increases the reserves your shares are a claim on, so each share is worth more when you withdraw.

The fee starts at a 2% floor and rises with the gap between the pool price and the model price, to a 100% cap. That is far above what a spot AMM charges, and deliberately so: an option's fair value moves continuously as spot moves and as time decays, so a pool that isn't traded constantly is always somewhat stale. A 30bp fee would hand that staleness to arbitrageurs for free. Here, they pay you for it. See Dynamic swap fee.

What liquidity providers earn

Simulated against the deployed fee curve, the median liquidity provider earns around 10% a year, and the fee income comfortably outruns the cost of rebalancing.

What was simulated

A weekly cycle, repeated across hundreds of price paths, with the underlying following geometric Brownian motion at 65% annual volatility. Within each week:

  • Both legs of an at-the-money weekly option are seeded at fair value, so the LP starts market-neutral.
  • The week is divided into 24 sub-steps. At each one, arbitrage pushes each pool back to the edge of the no-arbitrage band — the band being exactly as wide as the dynamic fee makes it — and then one organic trade arrives.
  • Organic trades are sized by a slippage budget rather than a fixed notional, so a trader cannot farm fees off their own price impact.

Weekly results are compounded to an annual figure. The model tracks four flows separately — arbitrage fees earned, organic fees earned, adverse selection paid, and the net — so the result can be decomposed rather than taken on faith.

The results

LP annualised return distribution under the deployed fee curve

With a plausible 20% of organic flow informed, the annualised return has a median of +9.6%, a 95th percentile of +17.2%, and a distribution that clusters tightly in the 5–15% band.

The engine behind it is turnover: annual swap volume runs at roughly 6× the pooled capital. At a 2% floor and considerably more whenever the pool drifts, that volume generates fee income that outweighs the cost of being rebalanced by arbitrageurs.

Where the return comes from

Practical guidance

  • Weekly options need weekly attention. Positions do not roll themselves. Each Friday's expiry is a decision point.

Next

© Stochastic Finance Protocol — All Rights Reserved