Market Durations#
Seesaw runs continuous prediction markets that open and resolve on a fixed cadence. Each market has a duration — how long it trades before it resolves — and that duration is configurable per market, with a default of 15 minutes (900 seconds).
Fixed epochs, not arbitrary timers#
Markets do not start at arbitrary moments. For a given asset and duration, time is divided into back-to-back epochs, and each epoch is one market:
market_id = floor(unix_timestamp / duration_seconds)
With the 15-minute default, that produces 96 markets per day on clean quarter-hour boundaries:
Deriving market boundaries from an id is symmetric. The getMarketId and getMarketTimes TypeScript helpers, with worked examples, are in Reference: Constants — Market Timing.
Fixed epochs mean any participant can compute, deploy, and crank markets without coordination: the schedule is implicit in the clock, market creation is permissionless, and everyone agrees on when a market starts and ends.
Why 15 minutes is the default#
The default balances several competing pressures:
- Meaningful price movement. Liquid crypto assets typically move enough in 15 minutes for the UP/DOWN outcome to reflect signal rather than pure noise.
- Engagement. Four resolutions per hour is fast enough to stay interesting without overwhelming traders.
- Liquidity concentration. A 15-minute window gives orders time to accumulate, producing better depth than minute-scale markets that fragment liquidity across many short epochs.
- Operational cost. ~96 market creations and settlements per asset per day is manageable, and the economics of cranking work at that cadence.
- Oracle resilience. A 15-minute window comfortably spans multiple Pyth updates, leaving room to capture snapshots even if some updates are delayed.
Shorter epochs (e.g. one minute) are dominated by noise and strain infrastructure; much longer epochs (an hour or more) slow feedback and hurt capital efficiency. Fifteen minutes sits in the middle and aligns with familiar quarter-hour boundaries.
Configurable durations#
The default is a default, not a hard rule. Markets accept a configurable
duration between 60 seconds (MIN_MARKET_DURATION) and 7 days / 604,800
seconds (MAX_MARKET_DURATION). Because a market's on-chain address is
derived from its feed, its duration, its market id, and its creator, multiple
durations can run concurrently for the same asset without colliding — a
one-minute SOL/USD market and an hourly SOL/USD market are distinct markets.
Admins can update the allowed duration range post-deploy via
UpdateOperationalParams (0x2F) (rate-limited, 1-hour cooldown).
The trade-off of fixed epochs is that a market cannot adapt its length to volatility mid-flight, and markets keep running on the same cadence regardless of whether traditional markets are open. Clients surface activity and implied volatility so traders can focus on the markets worth trading.
For the market lifecycle from creation through settlement, see How It Works. For oracle sampling at market boundaries, see Design → Price Oracle. For where collateral lives across a market's lifetime, see How It Works → Flow of Funds.