Price reconciliation

Four prices exist for every instrument. They disagree by construction. This is the one that matters.

The four sources

Every stock token has four prices, each measuring something different on a different cadence. Comparing them naively is the most reliable way to produce a wrong number on this chain.

FieldTypeDescription
Robinhood /pricesREST, 15s cacheRaw underlying equity bid and ask.NOT multiplier-adjusted. Multiply by the multiplier before comparing to anything onchain.
Chainlink feedonchain, heartbeatToken price via AggregatorV3Interface.ALREADY multiplier-adjusted. Never apply uiMultiplier() to this.
Chainlink Data Streamspull, sub-secondVerified token price over REST and WebSocket.
DEX spotper blockWhat the token actually trades at across venues, from our consolidated tape.

The premium

The spread between the onchain traded price and the underlying equity price is the premium or discount. It is the defining signal on a tokenized-equity chain — it indicates arbitrage opportunity, liquidity stress, and whether the tokenization is holding. No other provider on Robinhood Chain publishes it.

premium_bps =    (dex_mid − underlying_mid × multiplier)  ÷ (underlying_mid × multiplier)  × 10000

As-of semantics

The hard part is not the formula but the timing. Each input carries its own observation time, and the record reports staleness per source rather than pretending the four were sampled simultaneously. A reconciliation built on a stale oracle is flagged, never silently interpolated.

Correctness

Correctness note

Divergence flags exist so you can tell a real signal from a data artefact: STALE_ORACLE, TRADING_HALTED, SESSION_CLOSED, WIDE_SPREAD, CONTRACT_PAUSED, THIN_LIQUIDITY, MULTIPLIER_PENDING. A large premium with SESSION_CLOSED set is usually the underlying being stale, not the token being mispriced.

Related