Docs
Deep notes on Robinhood Chain nodes — what the public docs say, what we ran for dogecoin but on robinhood / rhDOGE, and how the pieces fit together. Source of truth for operators: Run a Robinhood Chain full node.
What Robinhood Chain is
Robinhood Chain is an Arbitrum Chain running Arbitrum Nitro. It currently runs ArbOS 61. Like other Nitro-based L2s, it posts its data to Ethereum L1 — so a Robinhood Chain node is not a standalone L1; it depends on a healthy Ethereum view (execution + beacon) to finish syncing and stay honest about blobs.
If you only need JSON-RPC and do not want to operate infrastructure, Robinhood documents public endpoints (and provider options like Alchemy). We still spun our own full node so rhDOGE could live on rails we control.
- Public Mainnet RPC:
https://rpc.mainnet.chain.robinhood.com - Alchemy pattern:
https://robinhood-mainnet.g.alchemy.com/v2/{API_KEY}
Why run your own node (and what we did)
The official docs are blunt: running a node is time consuming, resource intensive, and potentially costly. If you do not already know why you need one, you probably do not.
Our reason was product-shaped: Robinhood Chain lets creators run nodes and build. We used that permission to put Dogecoin on Robinhood Chain — high throughput, near-zero user cost on our explorer story — as the punchline to Vlad Tenev’s 2022 “currency of the internet” thread.
Architecture overview
A useful mental model:
- Ethereum L1 execution RPC — parent-chain connection for L1 state / posting surface
- Ethereum L1 beacon (consensus) — required to read blob data (common sync failure point)
- Nitro node —
offchainlabs/nitro-nodewith Robinhood chain-info (+ mainnet genesis) - Optional sequencer feed — websocket for low-latency updates from Robinhood’s feed
- Local RPC — HTTP
8547, WS8548when mapped
Data directory must land on /home/nitro/.arbitrum inside the container (the image runs as the
nitro user). Config mounts at /home/nitro/config.
Hardware requirements
From Robinhood’s published table (full node). Archive needs substantially more disk.
| Component | Requirement |
|---|---|
| CPU | Modern multi-core (8+) with strong single-core performance |
| RAM | 64 GB (128 GB recommended) |
| Storage | Locally attached NVMe SSD; (2 × current chain size) + 20% buffer — several TBs |
| Node type | Full node (archive = much more disk) |
Networked storage will throttle sync. Local NVMe is not a suggestion; it is the difference between “syncing” and “still syncing next week.”
Prerequisites
- Docker installed and running
- L1 execution RPC endpoint (your own synced node or a provider)
- L1 beacon URL for blob client access
- If you run your own L1, it must be fully synced before L2 can finish
Config files & genesis
Download Robinhood’s chain info (and mainnet genesis) from their docs site:
- Mainnet:
robinhood-chain-info.json+robinhood-genesis.json - Testnet:
robinhood-chain-testnet-info.json(no custom genesis — omit--init.genesis-json-file)
Place them in something like $HOME/rh/config and mount that path into the container.
Mainnet start commands pass both --chain.info-files and --init.genesis-json-file.
Running a mainnet node
Below is the public mainnet shape from Robinhood’s docs — the command pattern we followed.
Substitute your own L1 execution and beacon URLs. Image pin from the docs:
offchainlabs/nitro-node:v3.11.2-3599aca.
DATA_DIR="$HOME/rh/robinhood-nitro-data"
docker run --rm -it \
-v "$DATA_DIR":/home/nitro/.arbitrum \
-v "$HOME/rh/config":/home/nitro/config \
-p 8547:8547 -p 8548:8548 \
offchainlabs/nitro-node:v3.11.2-3599aca \
--chain.info-files=/home/nitro/config/robinhood-chain-info.json \
--parent-chain.connection.url=... \
--parent-chain.blob-client.beacon-url=... \
--init.genesis-json-file=/home/nitro/config/robinhood-genesis.json \
--http.addr=0.0.0.0 --http.port=8547 \
--http.api=net,web3,eth
Confirm ArbOS / Nitro versions before upgrades. On ArbOS upgrades, un-upgraded nodes stop cleanly and resume after updating — no data loss, per Robinhood’s notes.
Sequencer feed
For low-latency updates, subscribe to the sequencer feed. The URL must be wss://, not https://.
--node.feed.input.url=wss://feed.mainnet.chain.robinhood.com
Testnet feed (if you are on testnet): wss://feed.testnet.chain.robinhood.com.
RPC endpoints & ports
- Public Mainnet:
https://rpc.mainnet.chain.robinhood.com - Local HTTP (when running the container as above):
http://localhost:8547 - Local WS: port
8548(mapped in the docker command) - Expose externally only if you set
--http.addr=0.0.0.0and understand the risk
Health checks
Is the node answering?
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
-H "Content-Type: application/json" http://localhost:8547
Sync status — a fully synced node returns false:
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_syncing","params":[]}' \
-H "Content-Type: application/json" http://localhost:8547
Sending transactions before sync completes can surface nonce has already been used — wait.
Watch docker logs for block production messages while you wait.
Syncing & snapshots
Initial sync can take a long time and burns L1 request quota. Monitor your provider.
Optional faster path on first start: initialize from a snapshot with
--init.url=<SNAPSHOT_URL> (documented by Robinhood as optional).
Validators, BoLD, bonds
Robinhood Chain uses BoLD for dispute resolution through a permissioned validator set. Operating a validator means being on the allowlist and staking a 1 WETH bond (defensive validators encouraged). Reach out to Robinhood to join the set — this is separate from running a read/sync full node for building.
Troubleshooting
General
docker logs -f <container>for errors / restart loops- Confirm host can reach L1 execution and beacon endpoints
- Unsynced L1 stalls L2 sync
Sync issues
- Most failures: unreachable beacon URL
- Keep system clock accurate (
ntp/chrony) - Slow sync: check disk I/O; avoid networked volumes
Connectivity
- Map
8547(HTTP) and8548(WS) - Ensure
--http.addr=0.0.0.0if you need external RPC
How this ties to rhDOGE
dogecoin but on robinhood is the product story on top of that node: Dogecoin aesthetic, Robinhood Chain rails, and an inverted fee model on our Explorer (users pay $0; we pay memecoin rewards for usage). The node is the credibility layer — Nitro, ArbOS 61, real ports, real feed URL — even when the front-of-house is meme-forward.
Canonical operator docs remain with Robinhood: docs.robinhood.com/chain/run-a-full-node.