The premium board
Chainlink oracles against pool quotes on tokenized stocks: dead pools, sleeping pools, the NYSE phase, and why the bot has not traded any of it.
Robinhood Chain carries 35 tokenized stocks, each with a Chainlink feed publishing the exchange price on chain and a pool quoting whatever the last trade paid. The gap between those two numbers is the premium, and the board on the front page prints it for every ticker it can price honestly. The bot has never traded a single one of them.
That last sentence is why this page exists rather than being folded into the bot. The board is a neighbouring field, kept on the site because you can check it yourself with the same two sources the page uses, and because if the bot ever does walk into it the evidence will appear in the same place.
Two prices, one subtraction
For each ticker the page reads the oracle with a single eth_call to latestRoundData() on the feed address, which returns the answer and the timestamp it was last updated. The feeds report 8 decimals. The pool side comes from Dexscreener's tokens/v1/robinhood endpoint, up to 30 token addresses per call, which returns a USD price, the pool's liquidity and its 24-hour volume.
premium = poolPrice / oraclePrice − 1
Positive means the pool is asking more than the exchange price. Negative means less. The headline figure is the median across the rows that priced, not the mean, because one broken pool quoting triple is enough to drag an average somewhere meaningless and a median shrugs it off.
Where a token has more than one pool, the page keeps the one with the higher 24-hour volume, and only falls back to liquidity when volumes tie. That order is deliberate and it is the opposite of the obvious choice. Liquidity is the number a wash-traded pool inflates most easily; the project's own notes carry a HOOD/WETH pool claiming $67M of liquidity against $231 of daily volume. Volume is harder to fake convincingly for a token nobody is trading.
Dead pools and sleeping ones
Three labels, three different failures, and none of them is hidden by printing a number anyway.
- Dead. A pool with under
$5,000of liquidity, or a gap wider than50%in either direction, is marked dead and listed without a premium figure. Not with a large number, not with a warning icon next to a large number: without one. At that point the quote is not a price, it is an artefact of a pool nobody uses, and printing+340%next to it would be inviting a reader to believe an arbitrage that cannot be executed at size. - Pool asleep. A pool that traded exactly
$0in the last 24 hours is asleep whatever its liquidity claims, and it is dropped from the median. Liquidity with no volume is the phantom-pool shape, and the rule exists because that shape showed up on this chain rather than because it seemed prudent in the abstract. - Oracle asleep. A feed whose
latestRoundDatatimestamp is more than6 hoursold gets the asleep label. The row still prices, because a stale reference is still a reference, but the header counts how many of the priced rows are riding one, and when more than half of them are it says so next to the median.
A visitor whose system clock is skewed forward can make a feed's update look like it happened in the future. The page clamps the age it does staleness maths with to zero and flags the row rather than printing a negative age.
The closed exchange is the interesting state
The stale-oracle rule is not really about broken feeds. It is about Wall Street being shut.
Chainlink's equity feeds update while the underlying market trades. Outside those hours they stop, and every stock feed on the chain goes stale together, in lockstep, exactly as designed. The pools do not stop: they are a DEX on a chain that produces a block every tenth of a second, and they will happily quote a price for Tesla at three in the morning on a Sunday. So overnight and at weekends the whole board prices a live pool against a frozen reference, and the premium column measures how far the market's opinion has drifted from the last closing print.
That is the state worth watching, and it is also the state where a naive reading is most wrong. A row showing a 4% premium at 2 a.m. is not an arbitrage; it is a pool guessing what Monday looks like, against a number from Friday.
To make the distinction legible without pretending to know anything the chain does not tell it, the page carries the NYSE phase in the board's own header: pre-market, open with a countdown to close, closed, weekend, holiday. The calendar is hand-entered for 2026 and 2027, half days close at 13:00 New York time rather than 16:00, and a date in a year with no entered calendar prints NYSE SCHEDULE UNKNOWN instead of guessing. The label names the rule the page applies, computed from your own clock; it is not an observation of anything on chain.
Feeds and tokens are somebody else's work
Nothing on this board was written here. Chainlink publishes the feeds, the pools belong to whoever made them, Dexscreener indexes them, and the site's contribution is one eth_call per feed, one HTTP request per batch of tokens, and a subtraction. The 35 feed and token addresses sit in the page's constants, generated rather than typed, and every row links out to the pool it read.
Which means a row can go wrong in ways the page cannot detect and does not claim to. A feed could be deprecated and keep returning its last answer. A pool could be a honeypot with a real-looking quote. Liquidity numbers come from an indexer, not from the pool contract, so they inherit whatever that indexer got wrong. The thresholds above catch the loud failures. They do not certify the rows that pass.
One adjacent case, since it comes up: $MEVHOOD is paired against HOOD, Ondo's token of Robinhood Markets stock, and HOOD has no Chainlink feed on this chain. It therefore never appears on this board at all. The pair is on the addresses page with the rest.
What the board has to do with your claim
Nothing, directly, and that is the point of saying so here. The premium board does not feed the hourly split, does not enter the income subtraction, and does not affect what a holder can claim. It is a field of gaps the bot could work and has not, published with the same numbers we would have to face if it ever did.