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 has absorbed over the last 7 days, relative to its pending balance plus those withdrawals. 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-19, basis: derived):

denom    = max(totalPending + withdrawn_7d, PRESSURE_DENOMINATOR_FLOOR)
pressure = min((withdrawn_7d + gross) / denom / PRESSURE_SATURATION, 1)

totalPending is the reserve's pending balance (bank_total_pending in the constants). gross is the size of the withdrawal being priced. It counts only in the numerator, so a larger withdrawal raises the pressure without changing the denominator. The system-wide reading uses gross = 0.

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. The denominator is the pending (held, not-yet-withdrawn) balance plus those same recent withdrawals, floored at a fixed constant (10,000,000 STANDARD) so the ratio doesn't blow up when the total is small. The result is normalized to run from 0 (no pressure) to 1 (fully saturated).

This is the formula the deployed contract computes; it uses the whitepaper draft's ratio, P_exit = W / max(D+W, min_reserve) (withdrawn over pending plus withdrawn, with a floor), then scales it by a saturation level and caps it at 1. GET /v1/exit-pressure/history rows carry a formula field. History rows don't record which formula version produced them, so a row with a stored formula fee reports formula: "unknown" instead of the current version. A row with no formula fee has formula: null, and rows_without_formula in the response counts those rows. Measured fees (fee_rate) are unaffected.

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.

What a full exit forfeits​

Exiting every branch burns the charter, and two things attached to the charter go with it unless they were claimed first:

  • Charter stimulus. The one-time stimulus needs a live charter to claim. A full exit forfeits whatever is still unclaimed, and a partial exit changes nothing. GET /v1/decisions/exit reports the amount as at_risk_on_full_exit_raw inside parts.stimulus. See Charter stimulus.
  • Launchpad charter drops. A burned charter can only claim a drop if noteOwner(id) was called while it still existed. Without that call the claim reverts permanently. parts.charter_drops on the exit decision shows what closing these branches would release, what is claimable already, and how many claim transactions that takes. It warns when the exit closes the last branch, and when an at_exit drop stays unpaid because the charter keeps a branch. See Launchpad charter drops.

Neither changes the exit quote itself. The quote covers the reserve share and the resolution fee. The stimulus and drop amounts are reported next to it, not netted into it.

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-Bill, what a full exit would forfeit in stimulus, and what the exit releases from charter dropsGET /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.