Docs Robinhood Chain

Robinhood Chain

Chain 4663, an Arbitrum Orbit rollup where Robinhood issues tokenized stocks and Uniswap v4 holds their liquidity.

Registry · chain 4663

sample values

  • Apple

    Apple

    AAPL

    multiplier
    1.000566
    raw
    1.000000
    shares
    1.000566
    address from registry
  • NVIDIA

    NVIDIA

    NVDA

    multiplier
    1.000000
    raw
    1.000000
    shares
    1.000000
    address from registry
  • CrowdStrike

    CrowdStrike

    CRWD

    multiplier
    4.000000
    raw
    1.000000
    shares
    4.000000
    address from registry

shares = raw × multiplier / 1e18 // holdings.ts rawToShares

Three registry entries and the share maths. Values come from /api/assets when it answers; otherwise the registry snapshot from 2026-09-04. AAPL's multiplier is not 1. NVDA's is.

Network

Robinhood Chain is an Arbitrum Orbit (Nitro) rollup that settles to Ethereum. Gas is paid in ETH. Everything Photoswap does onchain happens here, and lib/chain.ts is the one place the facts live.

Chain id
4663
RPC
https://rpc.mainnet.chain.robinhood.com
Explorer
https://robinhoodchain.blockscout.com
Stack
Arbitrum Orbit, Nitro
Gas
ETH
Stablecoin
USDG (Global Dollar), 6 decimals

The registry

Robinhood publishes its tokenized stock list and prices on two keyless endpoints. lib/robinhood.ts reads both, filters to ASSET_STATUS_ACTIVE assets with a deployment on chain 4663, and joins them into TokenQuote objects. Assets are cached one hour, prices twenty seconds, and a stale cache is served rather than an error.

EndpointFields readCache
https://api.robinhood.com/rhj/assetstokenSymbol tokenName status currentMultiplier logoUrl tokenDecimals deployments[]1h
https://api.robinhood.com/rhj/pricesquotes[].tokenSymbol bid ask isTradingHalt20s

About 194 stocks and ETFs are live: AAPL, TSM, SKHY (SK Hynix), AVGO, QCOM, MU, NVDA, AMD, ASML, TSLA, AMZN, MSFT, GOOGL, META, COST, F, XOM and the rest. The registry name is cleaned of its Robinhood Token suffix before display.

Shares and the multiplier

Every stock is an 18-decimal ERC-20 that also implements ERC-8056, which adds a uiMultiplier. balanceOf returns raw units. The number of shares you actually hold is the raw balance times the multiplier, and the multiplier changes on corporate actions: a 4-for-1 split sets it to 4e18, which is exactly where CRWD sits today.

// shares = raw × uiMultiplier / 1e18 / 1e18
export function rawToShares(raw: bigint, multiplier: string | undefined | null): number {
  const m = parseMultiplier(multiplier);
  return (Number(raw) / 1e18) * (Number(m) / 1e18);
}

Do not skip this

NVDA's multiplier is exactly 1e18 today, so a naive formatUnits(balance, 18) looks right for it and silently wrong for AAPL. Every balance and every expected output in Photoswap goes through rawToShares.

Impersonators

The explorer lists contracts named after real stocks that are not Robinhood's. Photoswap never resolves a stock by name from the explorer. Addresses come from the registry's deployments[].contractAddress for chain 4663 only, and the periphery addresses below are pinned in code.

RPC quirks

The public RPC answers JSON-RPC batches out of order. viem's default transport batches requests, which then mis-assigns results. publicClient is created with batch: false, and anything that needs many reads goes through Multicall3 instead, which is one call from the RPC's point of view.

export const publicClient = createPublicClient({
  chain: robinhoodChain,
  transport: http(ROBINHOOD_RPC, { timeout: 8_000, retryCount: 2, batch: false }),
});

Contracts

Uniswap v4 is where the stocks have liquidity; the v3 stock pools are empty. Pools use no hooks, and native ETH is currency 0x0, which sorts first. The fee tiers Photoswap probes, in order, are 5%, 1%, 0.3%, 0.05%, 0.01%. The 5% tier is the one stock pools use.

NameAddress
Multicall30xcA11bde05977b3631167028862bE2a173976CA11
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
WETH0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3
v4 PoolManager0x8366a39cc670b4001a1121b8f6a443a643e40951
v4 Quoter0x8dc178efb8111bb0973dd9d722ebeff267c98f94
UniversalRouter0x8876789976decbfcbbbe364623c63652db8c0904
v4 StateView0xf3334192d15450cdd385c8b70e03f9a6bd9e673b
v3 QuoterV20x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7
v3 SwapRouter020xcaf681a66d020601342297493863e78c959e5cb2