The round

Settlement and payouts

After 06:00 UTC the keeper reads HyperCore's settlement, calls settle() with it, and pushes every payout with claimFor().

Reading the result

POST https://api.hyperliquid.xyz/info
{"type": "settledOutcome", "outcome": 19873}

{ "spec": { "outcome": 19873, "name": "Recurring",
    "description": "class:priceBinary|underlying:BTC|expiry:20261030-0600|targetPrice:80207|period:1d" },
  "settleFraction": "0.0", "details": "price:78521.4" }

settleFraction is 1.0 when Yes wins and 0.0 when No wins. details carries the BTC mark HyperCore settled at. The keeper passes both to settle(day, settleFraction × 10^18, mark × 10^6, 1), and the contract emits them in RoundSettled.

The formula

Pot PYes Y + No NFee = 3% of Pfor the $RISE burnNet = P − FeeYes poolNet × settleFractionNo poolNet − Yes pooleach side getsits pool × stake / side total
Integer arithmetic on USDG base units, rounded down; at most one base unit per side stays in the contract.

If nobody took one of the two sides, there is no one to pay from the other: every side is refunded in full and no fee is taken. The contract emits RoundRefunded instead of RoundSettled.

The fallback

If HyperCore's outcome cannot be read, the round settles to HyperCore's BTC mark price instead. This applies when no recurring BTC outcome was readable when the round opened, or when settledOutcome has no answer 30 minutes after 06:00 UTC. The price used is the open of HyperCore's BTC 1-minute candle at 06:00 UTC, compared with the round's target, which is the previous 06:00 UTC settlement. Up or level is Yes, down is No. The settlement carries source 2 (MARK) instead of 1 (HIP4), so the source is never hidden.

Payouts

StepOn chain
Settlesettle(day, fractionWad, markPrice, source), keeper only, after 06:00 UTC. Sends the fee and emits RoundSettled (or RoundRefunded).
Each payoutclaimFor(day, wallet): the keeper pushes it for every wallet owed something. The USDG always goes to the wallet that took the side, never to the caller. Emits Claimed.
Pullclaim(day) from your own wallet does the same, if you would rather not wait.
Safetycancel(day): anyone, 3 days after 06:00 UTC on a round still open. Every side gets its full stake back.

A wallet can be paid once per round; a second claim reverts. A settlement interrupted halfway resumes on the next tick without paying anyone twice.