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 matches the Central Bank's own previewResolutionFeeWad view to within 5e-17 relative error at every point on the withdrawal-size ladder (formula_version: mainnet-exit-2026-10-02, basis: derived):
denom = max(bank_total_pending_live, PRESSURE_DENOMINATOR_FLOOR)
pressure = min(withdrawn_7d / denom / PRESSURE_SATURATION, 1)
withdrawn_7d is the STANDARD actually withdrawn over the last 7 protocol days, including today. Protocol days are 86400-second buckets counted from the Central Bank's start time, so the window moves forward one whole day at a time: at each day boundary the oldest day drops out at once. 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. It also carries anexpiry_schedule: the exact window days still counted inwithdrawn_7d, the instant each one ages out, and the fee rate that results, plusnext_fee_change_atfor the first expiry that actually moves the rate. If a day in the window is missing or unusable,incomplete_daysnames it and the schedule fields come back null, leaving only the coarser day-offsetforecast.GET /v1/exit-pressure/currentand/history(1s_std_exit_pressure), the raw pressure snapshot and its trend over time.
The fee rate an exit would pay right now comes from the contract itself: previewResolutionFeeWad, read live or from the snapshot's stored preview points (basis: measured). That covers the fee in exit-quote, the live fields in fee-curve, fee_rate_wad in exit-pressure/current, and day 0 of fee-forecast. These are served whatever exit_formula_version says. The formula's own figures sit beside them in fields with formula in the name, such as fee_rate_formula_wad. Those, like every forward-looking point in fee-forecast, are null unless the formula is validated.
realizable_eth is an estimate: 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 it. 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, plus what the net STANDARD would earn staked as an S-Bill | 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.