DOCS
On this page5 sections

Play

ODD · EVEN: future price parity

How future Binance Mark Price records become an onchain ODD or EVEN outcome.

Manual Parity Functional Testnet PASS · Mystery scenario not run · Formal certification deferred

The rule

The complete future Mark Price is converted with decimal ROUND_HALF_UP to integer cents. The last digit of that complete integer determines ODD or EVEN: 205.31 becomes 20,531 cents and ODD; 205.42 becomes 20,542 cents and EVEN.

Every Ticket freezes its Market Catalog version and hash. That frozen Catalog defines symbol, precision, tick normalization, direction, multiplier, Reporter Set, report deadline, and timeout/VOID policy; a frontend label or later Catalog version cannot rewrite those fields.

Manual and Mystery

ModeUser choosesAll-inPayoutRandomness
ManualMarket, ODD/EVEN, reward, horizon1–2002x principalNo VRF for price outcome
MysteryHorizon and amount only1–102.5x principalProvider 4 VRF selects market, side, reward; report still decides outcome

Parity Mystery acceptance freezes the ordered market/reward Catalog identities but leaves the concrete market, side, and reward unassigned. The verified Provider 4 selection callback freezes all three and moves JIT capacity to the selected reward before the Ticket enters AwaitingReport. That uniform side selection does not make the later Binance price outcome empirically 50/50; the frozen future-price report still decides win or loss.

Functional horizons: 10s · 1m · 1h · 1d · custom

Functional runtime policy
10s / 1m / 1h / 1d / custom
Markets
NVDA / AAPL / TSLA / AMZN / META
Source
binance-public-mark-price
Reporter Set / threshold
1 / 2
10s · Trusted FLASH
A trusted, best-effort capture reads Binance USD-M premiumIndex.markPrice and selects the first eligible Mark Price at or after the exact target inside a 30-second window. Binance provides no replayable historical 10-second Mark Price Kline; missing the window means VOID.
1m / 1h / 1d · requested duration
The contract first records requestedTargetAt = acceptedAt + duration, then rounds targetAt upward to the first whole-minute UTC boundary. The effective wait can therefore exceed the label by 0–59 seconds.
Custom range
Submit a UTC target at least two minutes and at most seven days after acceptance. The final targetAt is the first whole-minute boundary at or after that requested time, so requestedTargetAt and targetAt can differ by up to 59 seconds.
Stable Kline record
For 1m, 1h, 1d, and custom, the decisive value is array index 4 (close) from the exact Binance USD-M markPriceKlines one-minute record ending at targetAt−1ms. Its first read is no earlier than targetAt+15s, followed by a matching second read at least 15 seconds later.

Wallets and integrations must show both the requested time and the final rounded target whenever they differ. Both stable reads must match all source fields. A changed record restarts the stability interval. Missing or unstable evidence cannot move the target or silently switch source.

Signed report boundary

Binance does not sign FLIP Tickets. A versioned threshold Reporter Set signs an EIP-712 PriceReport that binds chain, Game, Ticket, market, rule, target, timestamps, price cents, raw response hash, and evidence hash. The signer set is an explicit trust boundary, backed by a separate Reporter Bond namespace.

  • Wrong domain, source, symbol, target, hash, signer threshold, timing, or expiry fails closed.
  • A Ticket freezes its Reporter Set; rotating the active set cannot rewrite an existing Ticket.
  • FLASH timeout and report timeout can VOID according to the frozen responsibility stage: the Game returns B + F, and the responsible Bond separately pays additionalReserveRaw = prizeNotionalRaw - B.

Manual and Mystery state machines

Parity Manual
Accepted → AwaitingReport → ReportReady → Settled(Win | Loss)
                         ↘ Voided (strictly after the inclusive report deadline)
Parity Mystery
Accepted → AwaitingRandomness → AwaitingReport → ReportReady → Settled(Win | Loss)
                ↘ Voided              ↘ Voided

ReportReady is a real onchain state, not a UI convenience: a threshold-verified report is first frozen into the Ticket, then settlement reads that frozen report. A report may be submitted through the inclusive deadline; voidExpired becomes legal only after it and only while the Ticket is still awaiting randomness or a report. Settlement or VOID is terminal.

Authority sources

These repository paths were used to derive this page. They link only when an explicitly configured public repository and immutable Source A commit are both available; otherwise they remain plain paths. Release addresses and live status still require an accepted manifest and finalized evidence.

  • docs/PRICE_PARITY_MVP.md
  • src/v3/parity/PriceParityGameV3.sol
  • src/v3/parity/PriceParityMysteryGameV3.sol
  • src/v3/parity/ParityReportVerifierV3.sol