Withdrawing & rolling
Liquidity comes back out through removeLiquidity, and unlike swapping and adding, withdrawal has no maturity cutoff. That asymmetry is deliberate and it shapes how you manage a position. The dApp page is /remove_liquidity.
Removing liquidity
removeLiquidity(
tradeToken, // SF Options address
tokenId, // the leg
liquidity, // LP shares to burn
amountStableMin, // slippage guards
amountTradeMin,
to, // who receives the USDC + option tokens
deadline
) returns (amountStable, amountTrade)
You burn shares and receive your proportional slice of both reserves: USDC and option tokens. There is no option to take the exit in one asset — you get the pool's current composition, whatever it happens to be.

The router pulls LP shares from whoever calls it and sends the proceeds to the to address you name, which is standard Uniswap V2 behaviour and means LP shares can be held, transferred or sold without any risk of a forced exit.
Option amounts round down to whole cents
The option side of the withdrawal is truncated to a multiple of one cent. On a normal-sized position this is dust; on a position of a few cents it can round the option leg to zero, in which case the withdrawal reverts rather than silently paying you nothing.
The maturity cutoff
Three operations behave differently once an option reaches its maturity timestamp:
| Operation | Before maturity | At or after maturity |
|---|---|---|
swapStableOnTrade / swapTradeOnStable |
Allowed | Reverts — ROUTER: INCORRECT_MATURITY |
addLiquidity |
Allowed | Reverts — ROUTER: INCORRECT_MATURITY |
removeLiquidity |
Allowed | Allowed |
Trading runs right up to expiry, which mirrors how real options markets work — market makers quote until the bell. But once the bell rings, the pool is frozen as a trading venue while remaining fully open as a withdrawal venue.
Liquidity left in an expired pool is not lost
After maturity you can still withdraw, and you should. What you get back is USDC plus expired option tokens — and those option tokens are only worth something once you exercise them.
Rolling a position
There is no roll function. Moving liquidity from this week's expiry to next week's is three explicit steps:
- Remove liquidity from the expiring pool. You receive USDC and option tokens.
- Exercise the option tokens you got back, if they are in the money — or simply exercise them regardless, since even out-of-the-money legs carry the zero-shift floor of 10% of collateral. This converts them to USDC.
- Redeploy into the next maturity: mint fresh options if you need inventory, then add liquidity to the new pool.
expiring pool ──removeLiquidity──▶ USDC + expired legs
│
exercise
▼
USDC ──mint──▶ new legs ──addLiquidity──▶ next pool
Exiting a trading position
If you hold option legs rather than LP shares, you have two exits and they are not equivalent:
- Sell on the AMM before maturity. Available any time up to expiry, priced by the pool, and it costs the dynamic fee.
- Hold and exercise after maturity. Priced by the settlement formula rather than by a pool, and it costs the 0.5% exercise fee on your payout.
Selling exits at the market's opinion of the option's value; exercising exits at its realised value. Which is better depends entirely on where the pool price sits relative to the model price — and the point of the dynamic fee is that a pool far from fair value is expensive to trade against, which often makes waiting the cheaper option.
Next
- Exercise & settlement — the second step of the roll, in detail
- Providing liquidity — the third
- Fees — comparing the cost of the two exits