articlesdocs
Articles · July 14, 2026

How to run a Robinhood Chain node.

Full or archive. By the arrowrpc.com team, an independent community RPC provider, not affiliated with Robinhood. Everything below comes from running our own nodes in production, with real measurements.

Robinhood Chain is an Arbitrum Orbit L2 (chain ID 4663) settling to Ethereum, launched publicly on July 3, 2026. Running your own node gets you an unmetered local RPC, trustless access to chain state, and independence from providers' quotas.

TL;DR

Hardware

ComponentMinimumRecommended
CPU8 cores, strong single-coreModern 8c/16t desktop-class chip, 4.5 GHz+
RAM32 GB workable64 GB
DiskLocally attached NVMe only2+ TB NVMe (plan a year of growth)
Network1 Gbps, ~unmetered1 Gbps, ~unmetered

Network-attached storage (cloud volumes) will throttle your sync badly. The official docs warn about this and we confirm it. Single-core speed matters more than core count: block execution is largely single-threaded.

Prerequisites

1. Ethereum L1 endpoints. You need an execution RPC and a beacon (consensus) endpoint for blob data. Pitfalls we hit so you don't have to:

2. Chain config files. Grab robinhood-chain-info.json and robinhood-genesis.json from the official run-a-node docs.

3. Docker (or extract the nitro binary from the image and run it under systemd; it's the same binary either way, and Offchain Labs only distributes official builds as Docker images).

The flags that matter

flags
--execution.caching.state-scheme=path    # THE flag. 18x faster sync, 3x smaller DB
--execution.caching.archive              # only if you want archive (historical state)
--chain.id=4663
--chain.info-files=/config/robinhood-chain-info.json
--init.genesis-json-file=/config/robinhood-genesis.json
--parent-chain.connection.url=<YOUR_L1_RPC>
--parent-chain.blob-client.beacon-url=<YOUR_L1_BEACON>
--node.feed.input.url=wss://feed.mainnet.chain.robinhood.com   # wss://, not https://
--execution.forwarding-target=https://rpc.mainnet.chain.robinhood.com
--node.staker.enable=false

If you'll serve RPC to anything other than localhost, add:

flags · public rpc
--http.addr=0.0.0.0 --http.port=8547 --http.api=net,web3,eth,arb,debug
--http.vhosts=*                          # or your hostname; default rejects non-localhost Host headers
--http.corsdomain=*                      # if browsers will call you
--ws.addr=0.0.0.0 --ws.port=8548 --ws.api=net,web3,eth --ws.origins=*

Quick start (Docker, full node)

terminal
mkdir -p ~/rh/config ~/rh/data   # put the two config JSONs in ~/rh/config

docker run -d --name rhnode --restart unless-stopped \
  -v ~/rh/data:/home/nitro/.arbitrum \
  -v ~/rh/config:/home/nitro/config \
  -p 8547:8547 -p 8548:8548 \
  offchainlabs/nitro-node:v3.11.2-3599aca \
  --chain.id=4663 \
  --chain.info-files=/home/nitro/config/robinhood-chain-info.json \
  --init.genesis-json-file=/home/nitro/config/robinhood-genesis.json \
  --execution.caching.state-scheme=path \
  --parent-chain.connection.url=<YOUR_L1_RPC> \
  --parent-chain.blob-client.beacon-url=<YOUR_L1_BEACON> \
  --node.feed.input.url=wss://feed.mainnet.chain.robinhood.com \
  --execution.forwarding-target=https://rpc.mainnet.chain.robinhood.com \
  --node.staker.enable=false \
  --http.addr=0.0.0.0 --http.port=8547 --http.api=net,web3,eth

For an archive node add --execution.caching.archive. Mount data on your NVMe; the container writes as the nitro user, so the volume must land at /home/nitro/.arbitrum.

Optional performance env (measured ~5% on block execution): -e GOGC=400 -e GOMEMLIMIT=<half your RAM>GiB.

Sync expectations

This is where most people think something is broken. It isn't:

With the default hash scheme instead of path, the same sync measured ~11 blocks/s sustained: roughly two months. Use the path scheme.

Disk math

Measured at ~8M transactions/day of chain activity (mid-July 2026):

Plan disk for a year, not a month, and remember growth scales with chain activity. Recheck the numbers after launch-hype settles.

Snapshots: skip the sync entirely

Nitro supports initializing from a snapshot: --init.url=<SNAPSHOT_URL> on first start. Robinhood doesn't publish official snapshots yet; we publish periodic pruned snapshots at arrowrpc.com so you can be at tip in roughly the time it takes to download and extract.

Gotchas we hit

Verifying your node

terminal
# at tip?
curl -s -X POST http://localhost:8547 -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
# compare with the public tip at https://rpc.mainnet.chain.robinhood.com

# archive actually serving history? (answer must equal the block you ask at, not the head)
curl -s -X POST http://localhost:8547 -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x0000000000000000000000000000000000000064","data":"0xa3b1b31d"},"0x1e8480"]}'

That second probe calls ArbSys.arbBlockNumber() at block 2,000,000. An archive node returns 0x1e8480; a node silently serving head state returns the current block. Test with a value that must vary by height, not a constant.

Questions, or don't want to run your own? Our free public endpoint: https://rpc.arrowrpc.com (100 req/s per IP) · wss://ws.arrowrpc.com (1 connection per IP).