Skip to main content

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, and realizable_eth (an estimate of net ETH from selling into the pool, estimate: true, carrying assumptions[]).
  • 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 an expiry_schedule: the exact window days still counted in withdrawn_7d, the instant each one ages out, and the fee rate that results, plus next_fee_change_at for the first expiry that actually moves the rate. If a day in the window is missing or unusable, incomplete_days names it and the schedule fields come back null, leaving only the coarser day-offset forecast.
  • GET /v1/exit-pressure/current and /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​

QuestionRouteMCP tool
What would I actually net if I exit now?GET /v1/charters/{id}/exit-quote1s_std_exit_quote
How does the fee change at other withdrawal sizes?GET /v1/exit/fee-curve1s_std_exit_fee_curve
Where is the fee headed if nobody else exits?GET /v1/exit/fee-forecast1s_std_exit_fee_forecast
Everything above, bundled into one call, plus what the net STANDARD would earn staked as an S-BillGET /v1/decisions/exit1s_std_decision_exit

See Deciding with the data for the "should I exit now" decision walkthrough, including the launch-tax interaction on realizable_eth.