Robinhood Chain vs Ethereum Mainnet: Indexing Requirements
Why indexing Robinhood Chain differs from Ethereum: 100x more blocks, two clocks, staged finality, Nitro receipts and traces, with real index figures.
Crius 9 min read
Indexing Robinhood Chain is less about transaction volume than about block count: it handles a similar number of transactions per day as Ethereum mainnet, but spread over roughly 100 times more blocks, with a second, slower L1 clock inside contracts and three levels of finality. An indexer built for Ethereum’s 12-second blocks works on Robinhood Chain only after you rethink per-block overhead, timestamp ordering, reorg windows and trace costs.
This post compares the two chains from an indexer’s point of view, using numbers from building and running a full Robinhood Chain index from block 0. If you are deciding whether to index the chain yourself or use an API, it should help you size the job; the REST API vs RPC vs indexed data post covers that decision directly.
The two chains side by side
| Ethereum mainnet | Robinhood Chain | |
|---|---|---|
| Role | Layer 1 | Layer 2 on Arbitrum Orbit (Arbitrum Dedicated Blockchains), settles to Ethereum |
| Block interval | 12 s slots | ~105 ms (24-hour average, October 2026) |
| Blocks per day | ~7,200 | ~820,000 |
| Transactions per day | ~2.3–2.9 million (early-2026 figures) | ~2.4 million |
| Transactions per block | hundreds | ~3 on average |
| Chain height | ~26.3 million (whole history since 2015) | ~96.7 million (genesis April 30, 2026) |
| Ordering | Proposer-built blocks, priority fees | First-come, first-served at the sequencer |
| Finality | ~2 epochs (~13 min) | Soft (sequencer) → safe → finalized via Ethereum (~16 min) |
| Gas token | ETH | ETH, plus an L1 data component |
Sources: the Robinhood Chain row uses the chain’s own data (Crius /stats, October 24, 2026) and its documentation; Ethereum transaction counts are from public reporting on early 2026 (Techjury, Bitcoin.com News). The Ethereum chain height is the L1 block number Robinhood Chain itself reports (l1BlockNumber ≈ 26,262,000 on October 24).
The striking line is chain height. Robinhood Chain passed three and a half times Ethereum’s entire block history less than six months after its genesis block, and most of those blocks came after the July 2026 mainnet launch.
1. Per-block overhead dominates
On Ethereum, an indexer’s cost scales mostly with transactions and logs: a block is a large unit of work, and there are only 7,200 a day. On Robinhood Chain, the same daily transactions arrive in about 820,000 blocks with roughly three transactions each. Anything you do per block (an RPC round trip, a database transaction, a checkpoint, a reorg check) is done over a hundred times more often.
In practice that means:
- Fetch receipts per block, in parallel.
eth_getBlockReceiptsreturns every receipt in a block in one call. Against a local Nitro archive node we measured 2,200–2,900 blocks per second with 32 parallel workers, which is about 10 hours for the full history at ~91 million blocks. One call per transaction would be several times slower. - Batch writes across blocks. Committing each block separately would mean ten database transactions a second just to keep up. Our ingester batches decoded events from many blocks per write, and the full replay of 91 million blocks took about five hours (roughly 5,000–6,000 blocks per second with 48 workers against a local archive node).
- Don’t poll for heads. At ~10 blocks per second,
eth_blockNumberpolling either lags or hammers the node. Subscribe to new heads (or the sequencer feed) and fetch in ranges.
2. Two clocks, and timestamps that collide
Robinhood Chain blocks carry a Unix timestamp with one-second resolution, so about ten consecutive blocks share the same timestamp. Here are 12 consecutive blocks from the public RPC:
block timestamp l1BlockNumber txs96726799 1792840989 26262178 1096726800 1792840989 26262178 396726801 1792840989 26262178 396726802 1792840989 26262178 396726803 1792840989 26262178 1396726804 1792840990 26262178 596726805 1792840990 26262178 6…96726810 1792840990 26262178 2Two consequences:
- Order by position, never by time. The canonical order of events is
(block, transaction index, log index). Sorting trades by timestamp scrambles everything inside the same second. Crius trade and event ids are built exactly this way (96726525-1-2), and cursors use block and log positions. - Second-level candles are coarse. A 1-second OHLCV candle on Robinhood Chain aggregates about ten blocks. Sub-second analytics need block numbers, not timestamps.
The second clock is Ethereum’s. Every block also records l1BlockNumber, the latest L1 block the sequencer had seen, and inside contracts block.number returns that L1 number, not the L2 block height. The L1 number above stayed at 26,262,178 across all 12 blocks. That matters for any on-chain logic that counts “blocks”: anti-sniping windows, per-block buy limits and vesting schedules move on Ethereum’s 12-second clock. An indexer that evaluates such rules has to use the right clock. The Uniswap v4 hooks used by launchpads are a common case (Uniswap v4 hooks on Robinhood Chain).
3. Finality comes in three steps
On Ethereum, a block is final after about two epochs, and before that small reorgs are possible but rare. On an Arbitrum-based chain, finality is inherited from Ethereum in stages (Arbitrum docs: finality and reorgs):
- Soft confirmation (
latest). The sequencer has ordered and executed the transaction and published it on its feed. Fast, but a promise from the sequencer, not yet backed by Ethereum. - Safe. The batch containing the block has been posted to Ethereum and that L1 block is safe.
- Finalized. That L1 block is finalized; reverting it would require reverting Ethereum.
Measured on the live chain on October 24, 2026: safe trailed the head by about 5,400 blocks (~9.5 minutes) and finalized by about 9,000 blocks (~16 minutes).
For an indexer, that means keeping two horizons:
- serve data from the soft head immediately (users expect live prices), but keep enough state to roll back soft-confirmed blocks if a reorg appears;
- treat data at or below safe as permanent, and expose the level on every record so consumers can choose.
Crius does both: every response’s meta reports block, safe_block and finalized_block, every trade carries finality (latest, safe or finalized), and the stream sends a reorg message followed by the removed events marked removed: true. In the 24 hours before writing, the chain had zero reorgs, which is typical for a single-sequencer chain, but the code path has to exist (finality concepts).
4. Nitro receipts and gas look different
Robinhood Chain speaks standard Ethereum JSON-RPC, with Arbitrum fields added. A real receipt from the public endpoint:
{ "transactionHash": "0x7deb833a3165851f16932851bbc4e230aaabd121cb4a886c53ad3901d39185fa", "blockNumber": "0x5bf0464", "from": "0xabb2acd3be814a80e502575d6c1dc5f789e9cd10", "to": "0xca11bde05977b3631167028862be2a173976ca11", "gasUsed": "0x74ff1", "gasUsedForL1": "0x0", "effectiveGasPrice": "0x13449e0", "l1BlockNumber": "0x190af99", "status": "0x1", "type": "0x2"}Two things an Ethereum indexer won’t expect:
- The fee has two parts.
gasUsedForL1is the share of gas paying for posting the transaction’s data to Ethereum; the rest is L2 execution. A trade’s true cost is both. Crius reports gas per trade asl2_eth,l1_ethand USD. - The sender is often not the trader. This transaction was sent by an executor to Multicall3 (
0xca11…ca11) on behalf of a different wallet, which was the one that actually sold. On a chain with this many bots, routers, solvers and ERC-4337 bundlers (first-class on Robinhood Chain), attributing trades byfromis wrong a large share of the time. You have to follow the token transfers inside the transaction (trader attribution).
5. Archive size and tracing
Despite its much larger block count, the chain’s archive is in the same range as a modern Ethereum archive:
| Size | |
|---|---|
| Robinhood Chain Nitro archive node, block ~96.7M | ~2.8 TB (measured) |
| Ethereum archive, Erigon or Reth | ~2–3.5 TB (published estimates) |
| Ethereum archive, Geth hash-based | ~12–20 TB (published estimates) |
Ethereum estimates vary by source; see Dwellir’s archive node cost analysis and Cherry Servers’ hardware requirements.
Tracing is the expensive part. Internal ETH transfers (a contract paying out ETH, a router forwarding it) don’t emit logs; you only see them in call traces. Tracing every block with debug_traceBlockByNumber and the call tracer ran at 227–388 blocks per second against a local node, about 88 hours for the full history, versus about 10 hours for receipts. Hosted support varies: QuickNode lists debug and trace APIs for the chain, while Alchemy lists them as not currently supported (Alchemy network page, QuickNode chain page). Plan for traces as a separate, slower pipeline that runs behind the main one.
6. Many tokens, many pools, many addresses
Robinhood Chain’s launchpads create thousands of tokens a day, and most get a pool. At time of writing the index holds about 2.4 million tokens, 3.1 million pools and well over 26 million addresses. The decoded data comes to about 12 billion rows and 190 GB compressed in ClickHouse (about 990 GB uncompressed), including 1.8 billion token transfers, 450 million trades and 670 million internal ETH transfers.
Three design points follow:
- State that must be in memory has to be compact. Pool reserves, current prices and holder counts are read on every trade. Interning addresses as integer ids keeps tens of millions of them in a few gigabytes.
- Uniswap v4 changes pool discovery. All v4 pools live inside one
PoolManagercontract and are identified by a 32-byte id, not an address. “Watch the factory for new pair contracts” doesn’t apply; you decodeInitializeevents and keep per-pool state keyed by id, including hook addresses. - Prices need a graph. Tokens are quoted in ETH, WETH, USDG or other tokens, including tokenized stocks. Pricing everything in USD means picking each token’s best market and hopping through quote prices, block by block.
7. What carries over from Ethereum
Plenty does. Robinhood Chain is EVM-equivalent: standard ABIs, ERC-20 events, Uniswap v2, v3 and v4 contracts, eth_getLogs filters and the usual libraries (ethers.js, viem, web3.py) all work unchanged. Robinhood’s public RPC even accepts eth_getLogs over up to 10 million blocks per request. The differences are in scale and timing, not in the data formats.
A checklist for indexing Robinhood Chain
- Budget for ~820,000 blocks a day and design per-block work to be tiny or batched.
- Order everything by (block, tx index, log index); treat timestamps as one-second labels.
- Use
l1BlockNumberwherever on-chain logic depends onblock.number. - Keep a rollback window for soft-confirmed blocks; track
safeandfinalizedand expose them. - Split gas into L2 and L1 parts.
- Attribute trades through routers, executors and bundlers, not by
from. - Run traces as a separate, slower pipeline, and check that your RPC provider supports them.
- Key Uniswap v4 state by pool id, and price tokens through a quote graph.
FAQ
How many blocks does Robinhood Chain produce per day? About 820,000 at the current ~105 ms average block time, versus about 7,200 on Ethereum mainnet.
Is a Robinhood Chain archive node bigger than an Ethereum archive node? Not much. A Nitro archive was about 2.8 TB at block ~96.7 million, comparable to an Ethereum archive on Erigon or Reth and far smaller than Geth’s hash-based archive.
Why does block.number in a Robinhood Chain contract not match the block height?
On Arbitrum-based chains, block.number inside contracts returns the Ethereum L1 block number. The L2 height is the block number you see in RPC responses and explorers.
How long until a Robinhood Chain transaction is final? It’s soft-confirmed by the sequencer immediately, safe once its batch is posted and safe on Ethereum (about 9–10 minutes behind the head when we measured), and finalized about 16 minutes behind the head.
Can I index Robinhood Chain with a hosted RPC provider instead of my own node? Yes for logs and receipts, but full backfills make millions of calls, so rate limits and per-call pricing add up. Traces may not be available on every provider.
Related reading
Build with Crius
Robinhood Chain data in one API
Free plan with 1M credits a month. Your key in under a minute.
Related APIs
More from the blog
- ComparisonRPC
Robinhood Chain REST API vs RPC vs Indexed Data API
One Robinhood Chain question answered three ways: raw JSON-RPC, a REST wrapper and an indexed data API, with tested code, timings and when to use each.
- Historical dataWebSocket
Robinhood Chain Historical Data: Indexing, Retention and Reorgs
How Crius indexes Robinhood Chain from block 0, what history is retained, how latest, safe and finalized data differ, and how to handle reorgs in REST and WebSocket.
- PricesRobinhood Chain
How Robinhood Chain Stock Token Multipliers Affect Price Data
Robinhood stock tokens use an ERC-8056 uiMultiplier for splits and dividends. What it does to prices, balances and charts, and how to convert correctly.