The Price Oracle For Robinhood Stock Tokens.
Every stock token on Robinhood Chain trades in several Uniswap v3 pools at once, against USDG and against WETH, at different fee tiers. This page reads all of them in one call and gives each stock one consensus price: the mid of its live pools, weighted by depth. Next to it: a 30 minute TWAP of the deepest pool, how far apart the pools sit, and how deep they are. Any contract or script can read the same pools.
01Consensus Prices
reading| Reading every pool in one call | |||||||
Consensus is the depth-weighted mid of a stock's live pools (both sides above $200). TWAP is the 30 minute time-weighted price of its deepest pool, from the pool's own oracle; when that pool cannot look back 30 minutes the column says how far it could, or spot. Dispersion is the highest pool price over the lowest, minus one, in basis points. Open means at least one route clears its pool fees at mid.
02Pools Vs Consensus
each cell: pool price minus the stock's consensus, in bps| Stock |
|---|
| reading |
03How To Read It
One number per stock
Each live pool votes with its depth: the smaller of its two sides in dollars. A deep USDG pool moves the consensus; a thin 1% WETH pool barely does. WETH pools are priced in dollars through the WETH/USDG 0.01% pool.
Harder to push
The TWAP averages the deepest pool's tick over 30 minutes, so one large swap barely moves it. When the TWAP and the consensus disagree, a pool was pushed recently. That is usually the moment a cycle pays.
Gap is not profit
A wide dispersion is a signal, not a trade. A route has to clear the fee of every pool it touches, and thin pools lose the edge to price impact. The app quotes the exact cycle before anyone signs.
04Read It Yourself
// every Uniswap v3 pool answers these views; batch them through Multicall3
function slot0() returns (uint160 sqrtPriceX96, int24 tick, ...) // spot price
function liquidity() returns (uint128) // in-range liquidity
function observe(uint32[]) returns (int56[] tickCumulatives, ...) // TWAP: observe([1800, 0])
function balanceOf(pool) returns (uint256) // on each token: the depth
// the same read this page runs, from the site's own module
import { readUniverse, twapsUsd } from '/js/chain.js';
const u = await readUniverse(); // 49 stocks, every pool, one eth_call
const t = await twapsUsd(u.stocks, 1800); // deepest pool per stock, one eth_call
Prices here are what the pools say, not a feed with an owner. They move when someone trades. When the chain cannot be read, the page shows the last scan with its date.
When a pool drifts from the consensus, a flash cycle closes the gap and pays whoever runs it. No capital, one transaction. Launch App