Exits and the resolution fee curve
Exiting retires one or more of a charter's open branches for a pro-rata share of the reserve, paid out as STANDARD you then realize as ETH by selling into the pool. It costs a resolution fee, taken as a percentage of the withdrawal before the remainder is realized.
Exit pressure: the input to the fee
Exit pressure gauges how much withdrawal demand the reserve is absorbing right now, relative to what it's currently holding. The mainnet formula, validated against the Central Bank's own previewResolutionFeeWad view to roughly 1e-17 precision at seven test points (formula_version: mainnet-exit-2026-09-15, basis: derived):
denom = max(bank_total_pending_live, PRESSURE_DENOMINATOR_FLOOR)
pressure = min(withdrawn_7d / denom / PRESSURE_SATURATION, 1)
withdrawn_7d is a trailing 7-day sum of STANDARD actually withdrawn, not a single day's figure, and not reset at a fixed calendar boundary; it's a rolling window. bank_total_pending_live is the reserve's current pending (held, not-yet-withdrawn) balance, floored at a fixed constant so the ratio doesn't blow up when the pending balance is small. The result is normalized to run from 0 (no pressure) to 1 (fully saturated).
This is the formula the deployed contract computes; the whitepaper's own draft, P_exit = W / max(D+W, min_reserve), is not what it runs. GET /v1/exit-pressure/history rows carry their own formula field precisely so a caller can tell which formula produced a given row; rows_without_formula in the response counts rows that predate that field, so they aren't silently misread as validated against it.
The fee: pressure-based and quadratic
fee = FEE_MIN + (FEE_MAX − FEE_MIN) · pressure²
The fee rises with the square of pressure, not linearly: it stays close to the floor for most of the pressure range and accelerates only as pressure approaches saturation. FEE_MIN and FEE_MAX are chain-read constants (GET /v1/constants), and the fee moves with everyone's recent withdrawal behavior, not just yours. The same withdrawal quoted at low system-wide pressure and at high pressure can come back with very different fees.
What each route actually gives you
GET /v1/charters/{id}/exit-quote(1s_std_exit_quote), your specific quote right now: gross, fee, net, andrealizable_eth(an estimate of net ETH from selling into the pool,estimate: true, carryingassumptions[]).GET /v1/exit/fee-curve(1s_std_exit_fee_curve), the fee rate at six points along a withdrawal-size ladder (1%, 5%, 10%, 25%, 50%, 100% of the reserve's pending balance), so you can see how the fee would move at a larger or smaller size than yours.GET /v1/exit/fee-forecast(1s_std_exit_fee_forecast), a no-further-exits projection: how the system-wide fee would drift down if nobody else exits between now and a future point. Labeled as a projection, never a prediction.GET /v1/exit-pressure/currentand/history(1s_std_exit_pressure), the raw pressure snapshot and its trend over time.
realizable_eth and every point on the fee-curve ladder are estimates: a single-range constant-liquidity approximation of the Uniswap v4 swap (it doesn't model the trade crossing into an adjacent initialized tick), plus whichever side of the trade the sell tax applies to. Re-quote right before transacting instead of caching either number. See How to read a TSR response for what assumptions[] covers on estimate fields generally.
Where to look
| Question | Route | MCP tool |
|---|---|---|
| What would I actually net if I exit now? | GET /v1/charters/{id}/exit-quote | 1s_std_exit_quote |
| How does the fee change at other withdrawal sizes? | GET /v1/exit/fee-curve | 1s_std_exit_fee_curve |
| Where is the fee headed if nobody else exits? | GET /v1/exit/fee-forecast | 1s_std_exit_fee_forecast |
| Everything above, bundled into one call | GET /v1/decisions/exit | 1s_std_decision_exit |
See Deciding with the data for the "should I exit now" decision walkthrough, including the launch-tax interaction on realizable_eth.