The weekly cycle
Deploying, settling and rolling to the next week are automated. The current market is always
latest() on the on-chain MarketRegistry, or GET /api/v2/markets/latest.
Ranges
Each market splits a price span into 26 equal-width ranges. The width is chosen each week from Bitcoin’s recent realized volatility, measured on the Chainlink feed itself: each range is at least about a quarter of a weekly standard deviation wide, so the whole grid spans at least seven. Widths are round numbers (for example $1,000 or $2,500), every edge is a multiple of the width, and the opening price sits near the middle. The first and last ranges are open-ended: a settlement below the grid counts as the lowest range, and above it counts as the highest.Prices are probabilities
A share in a range pays 1 tUSDC if Bitcoin settles inside that range, and nothing otherwise. Its price is therefore the market’s probability for that range, and the 26 prices always add up to 1. Prices come from a standard multi-outcome LMSR (logarithmic market scoring rule) with a fixed liquidity parameter b = 800: where is the number of shares outstanding in range . Buying shares in a range raises its price and lowers the others. The market maker is always willing to trade, and its worst-case loss is bounded by tUSDC, which is the subsidy each market starts with.Fees
The fee sits outside the cost function, so it never distorts prices. Always quote with
quoteBuy or the API’s order endpoint rather than assuming the base rate; currentFeeBps() on the market returns the live fee.
Settlement
The market settles on the time-weighted average of the Chainlink BTC/USD feed over the final two hours before close, not on a single print. Averaging makes the outcome far more expensive to manipulate than one round would be. Settlement is permissionless: anyone can call it once Chainlink has published a round after close, and the contracts check that round’s position in the feed history themselves.Near a range boundary, the two-hour average can land in a different range from the price at exactly 23:59. The average is what counts.
Payouts
Redeem from the Trade page or by calling
redeem() (or redeemVoided()) on the market contract. Claims are not automatic yet.