Time is part of the market.
Trading availability depends on expiry, current market status, fresh reference data, and inventory feasibility.
Pool lifecycle
| State | New supply | Swaps | Proportional withdrawal |
|---|---|---|---|
| Funded and active | Available if gates pass | Available if gates pass | Available |
| Risk-paused or stale status | Unavailable | Unavailable | Available |
| At or beyond cutoff | Unavailable | Unavailable | Available |
| Expired | Unavailable | Unavailable | Available |
| Reserve boundary | Unavailable | Unavailable | Available |
A nearly complete withdrawal can leave the remaining normalized reserve outside the numerical curve's supported range because of integer rounding. The pool then reports a reserve-boundary state: actual reserves and withdrawal previews remain readable, while the model marginal price is unavailable. This state takes precedence over the other lifecycle labels.
The cutoff is five minutes before the immutable expiry. It prevents the execution path from evaluating the singular near-expiry limit. Time is measured using the chain's block timestamp. A browser clock does not determine contract availability.
Market status and freshness
Mainnet combines configured stock/USD and USDG/USD feeds with a separately fresh owner-attested equity session. The session keeper is a separately operated service; deploying contracts or serving the website does not start it or publish a session. Before its first valid observation, creation, supply, and swaps remain unavailable.
The adapter uses the actual upstream feed timestamps, each market's configured maximum ages, and a 60-second session validity window. Session publication must carry an observation no older than 30 seconds. Closed sessions, missing or stale data, and pauses block creation, supply, and swaps. Keeper publication does not refresh the timestamp of an old upstream price.
The stock feed is denominated per raw token and already includes the issuer multiplier; it is divided by USDG/USD for the curve reference. Session bid and ask use displayed-share units and are multiplied once for comparison. The adapter checks round validity, price age, a 0.99–1.01 USD USDG band, spread limits, source disagreement, issuer oracle pause, and pending multiplier changes. A displayed-share price must not be used as a raw-token strike.
Reference-price guard
The curve prices inventory without using an oracle to settle a derivative. The operational wrapper still depends on reference data to constrain executable trades. The post-swap marginal price must stay within the configured deviation band of a fresh reference.
A price gap can make many sizes unquotable, and sometimes no feasible inventory state satisfies the guard. This is a trading interruption; it does not authorize an administrator to move LP assets or guarantee an exit sale at the reference price.
What happens at expiry?
The pool stops accepting swaps and new liquidity by timestamp. Finalization records the final state and emits an event; it does not cash-settle, exercise an option, or transfer inventory into another pool. Existing owners continue to redeem the actual two-asset reserve claim.
Rolling into a new horizon requires a new pool and explicit user action. Existing strikes and expiry timestamps are not extended in place. Automatic rollover vaults are outside this release.
Keepers and administrative boundaries
The configured session publisher can attest session data, and authorized administrators can pause new risk. It does not acquire ownership of LP reserves by operating a keeper. Fee collection accesses the accrued protocol liability only. No background process should be needed to keep proportional withdrawals available.