Blocks stream

Typed blocks with the Arbitrum fields other providers drop.

Standard EVMrhrpc.v1.ChainStream/StreamBlocks

What it carries

Block headers carrying l1BlockNumber, sendCount and sendRoot alongside the standard fields. On Nitro, extraData equals sendRoot and mixHash encodes sendCount and l1BlockNumber — surfacing them properly avoids a class of misinterpretation.

Key fields

FieldTypeDescription
numberuint64Block height.
l1_block_numberuint64First non-Arbitrum ancestor block.
send_countuint256L2-to-L1 messages sent as of this block.
send_roothashMerkle root of outgoing messages.

Delivery semantics

Backfill and live through one stream. Resumable by cursor.

Volume: Roughly ten per second at a 100 ms block time. Every record carries a dedup_key and a monotonic sequence, so at-least-once delivery is deterministic to deduplicate.

Server-side filters

  • block range
  • include_unconfirmed

Filters are evaluated before bytes leave us, so a narrow subscription costs you nothing in bandwidth or parse time.

Subscribe

import { RobinhoodRPC } from "@robinhoodrpc/sdk"; const client = new RobinhoodRPC({ apiKey: process.env.RHRPC_KEY! }); // Backfill then live: omit toBlock to tail indefinitely.for await (const msg of client.blocks.stream({  fromBlock: 4_200_000,})) {  handle(msg);}

Sample message

{  "number": 4512889,  "hash": "0x41bb…",  "timestamp": "2026-08-27T14:22:09.118Z",  "l1_block_number": 21884412,  "send_count": "88214",  "send_root": "0x9ac2…",  "confirmation_state": "CONFIRMATION_STATE_INCLUDED"}

Correctness notes

Prices in this stream are already multiplier-adjusted where the field says so. Robinhood’s own REST endpoint returns raw underlying values and Chainlink’s feed returns multiplier-adjusted ones; mixing them without applying the multiplier — or applying it twice — is the most common source of silent error on this chain.

The full set of rules is published at /docs/equities/correctness-rules.

Related streams