gitstock
tokens / NVDA

NVDA

NVIDIA • Robinhood Token

$210.78
live · feed 85m ago
Contract
0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC explorer ↗
Price feed
0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15 explorer ↗ · +1 alt proxy
Holders
10,776
Pool TVL
$33,777 across 5 pools · main USDG/NVDA (v3)
Dependents
AEA (v3) Andy (v3) DRYRUN (v2) RVH (v3)
Multiplier
1.000000 (uiMultiplier · price = stock × this)

README

NVDA is the Robinhood Chain stock token tracking NVIDIA. It's an upgradeable BeaconProxy (ERC-20, 18 decimals) sharing a single Stock implementation with every other Robinhood stock token via one beacon/registry.

The price you see is read from a Chainlink EACAggregatorProxy described on-chain as “RHNVDA / USD”. gitstock reads latestRoundData() from that proxy and checks the token's oraclePaused()/tokenPaused() flags and the feed's freshness before trusting the number — see the field notes below for why that order matters.

Because dividends reinvest through the token's uiMultiplier(), NVDA tracks total return. While the multiplier sits at 1.0 the token price ≈ the stock price; expect drift above the headline quote as the multiplier grows.

Read the price

// Read NVDA correctly on Robinhood Chain (chain 4663). ethers v6.import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider(RPC);
const feed = new ethers.Contract(
  "0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15",
  ["function latestRoundData() view returns (uint80,int256,uint256,uint256,uint80)",
   "function decimals() view returns (uint8)"],
  provider
);

// price = stock × uiMultiplier already — do NOT multiply again
const dec = await feed.decimals();
const rd  = await feed.latestRoundData();
const priceUSD = Number(ethers.formatUnits(rd.answer, dec));

// the real guard: reject a stale answer (feed is 24/5, market-aware)
const now = (await provider.getBlock("latest")).timestamp;
const stale = Number(now) - Number(rd.updatedAt) > 6*3600;
// NOTE: do NOT gate on the L2 sequencer feed — it's hardwired to 'down' here.

Field notes — what the docs don't tell you

NVDA exposes two feed proxies

Two EACAggregatorProxy addresses both resolve to the same underlying aggregator and return identical data. gitstock publishes one as feedProxy and keeps the other under feedProxyAlt so you can cross-check. Which one Robinhood considers canonical isn't documented on-chain.

The price feed is not on the token

The Stock token carries no price and no feed pointer on-chain — no latestRoundData(), no priceFeed(). The Chainlink feed is a separate, unlinked contract, and the token→feed mapping isn't published anywhere. gitstock resolves it for you (verified via the token factory's own creation events, not by symbol).

The L2 sequencer gate is hardwired to “down”

Robinhood ships a custom SequencerGate whose source() is currently the zero address — so latestRoundData() returns answer = 1 (down) forever, while the price feeds are healthy. Copy the standard Chainlink pattern require(sequencerUp == 0) and your app will never render a price here. Read the gate for transparency, but don't hard-gate on it yet.

Staleness is the real guard — and it's market-aware

Because the sequencer gate is unusable, freshness on the feed itself is the actual safety check. During US market hours the feed updates every ~17min–1h on deviation; off-hours it slows to a few hours but keeps moving (24/5). A single tight threshold false-flags overnight reads. Weekend-flat is normal, not stale.

Feed price is the TOKEN price, not the stock price

latestRoundData() already returns stock_price × uiMultiplier() — don't apply the multiplier again. Dividends reinvest through the multiplier, so the token tracks total return and drifts above the headline stock price over time. That's why the number here won't match Google Finance.

oraclePaused() is advisory, not enforced

During corporate actions the token oracle is paused. oraclePaused() == true means “price temporarily unavailable”, not zero/error — and it isn't enforced on-chain, so a paused oracle can still return a value. Treat it as a display state; rely on staleness for protection.

Read decimals() on-chain; don't hardcode

Feed answers use the feed's own decimals (8 for these USD feeds). Read decimals() from the proxy every time rather than assuming.

NVDA/stock.json — machine-readable record for this token