MARKFair value · 24/7
Robinhood Chain

Docs. How the mark is made.

MARK is a fair-value oracle for tokenized stocks on Robinhood Chain. It publishes, for each name, a mark and a confidence band every four seconds, 24/7, signed with a persistent ed25519 key, and it exposes an on-chain contract for staked publishers to push the same numbers.

1. Regimes

The NYSE calendar (America/New_York, full closures and 13:00 half days included) decides the regime for every instant:

RegimeWhenWhat the mark is
OPEN09:30–16:00 weekdaysThe official tape. Pools and xStocks only tighten or widen the band.
PRE / POST04:00–09:30 · 16:00–20:00Extended-hours prints, Robinhood Chain pools, xStocks, futures proxy.
CLOSEDNights, weekends, holidaysPools + xStocks + futures proxy. The official close decays over 72 hours.

2. Sources

Base weights

RegimeTapeExtPoolsxStockProxy

3. Blend

A preliminary weighted median is taken across all sources. Any source more than 800 bps from it is rejected and listed under rejected in the feed. The mark is the weighted median of the survivors, so one manipulated pool cannot drag it. Confidence in bps is max(floor, 1.5 × weighted mean absolute deviation) + min(150, 3 × hours since the official close), with floors of 5 (open), 15 (pre/post) and 25 (closed) bps. basis.pool reports where Robinhood Chain pools sit against the mark; a persistently rich basis is a real arbitrage signal, not an oracle error.

4. API

EndpointReturns
GET /api/boardEvery feed: mark, conf, session, official print and age, basis, seq.
GET /api/streamServer-sent events, the board every 4s.
GET /api/feed/:SYMFull detail: sources with weights and deviations, rejected sources, β, futures, history, underlyings.
GET /api/feed/:SYM/signedThe signed payload, signature, signer.
GET /api/verify?payload&sig[&pub]{valid} against the server signer or a supplied key.
GET /api/signerThe ed25519 public key and payload format.
GET /api/history/:SYM[[ts, mark, conf, session]], 20s cadence.
GET /api/configBoard, chain, parameters, token mint, oracle address.

Signed payload

MARK|TSLA|35837818547|255764158|1788415417|CLOSED|101
      sym   mark·1e8     conf·1e8   unix s     session seq
sig  = ed25519(payload)      pub = 32-byte raw key (hex)

Fixed-point integers so that Solidity, Rust and JS rebuild the exact bytes. mark·1e8 and conf·1e8 are the same int64 / uint64 the contract stores.

5. Contract

MarkOracle.sol on Robinhood Chain (chainId 4663). Feed ids are keccak256("MARK:" ‖ SYMBOL).

Addresses are published at /api/config.

6. $MARK

Utility token on Robinhood Chain. Publishers stake it, on-chain reads pay in it, slashes are paid out in it. It does not entitle holders to anything else and it is not a claim on the protocol.

7. Trading · MarkPerps.sol

MarkPerps.sol is the venue. USDG collateral (6 decimals), one liquidity pool as counterparty, up to 10×, 8 bp fee per side to the pool, 5% maintenance, 20% of remaining margin as liquidator bounty, open interest capped at 4× the pool. Every open, close and liquidate takes a Px struct: the symbol, mark·1e8, conf·1e8, timestamp, session and the oracle's secp256k1 signature (r, s) over sha256("MARKv1" ‖ sym ‖ price ‖ conf ‖ ts ‖ session). Fetch it from /api/feed/:SYM/evm; it is valid for 90 seconds. Fills are mark ± conf/2. PnL = size × (exit − entry) / entry, paid from and to the pool. The practice desk at /desk runs the same rules on paper balances for anyone who wants to learn the venue first.

8. Disclaimers

MARK is price infrastructure. It takes no custody and holds no user funds. A mark is an estimate with a stated confidence band, not a promise that any venue will trade there. Nothing here is investment advice. Integrators should check session and conf before trusting a number, exactly as they should with any oracle.