Getting started
Robinhood Chain is an Ethereum L2 built on the Arbitrum stack, with 100ms block times and 24/7 tokenized-asset markets. RobinhoodRPC gives you low-latency endpoints for it. Here's everything you need for your first request. For chain-level reference, see the official Robinhood Chain docs.
Networks
| Network | Chain ID | HTTPS endpoint | WebSocket endpoint |
|---|---|---|---|
| Mainnet | 4663 (0x1237) | https://rpc.robinhoodrpc.com | wss://rpc.robinhoodrpc.com |
Your first request
The endpoints speak standard Ethereum JSON-RPC. Confirm you're talking to the right chain:
curl https://rpc.robinhoodrpc.com \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId"}'
# → {"jsonrpc":"2.0","id":1,"result":"0x1237"}Add the network to a wallet
Use these parameters in MetaMask, Rabby, or any EVM wallet:
| Field | Value |
|---|---|
| Network name | Robinhood Chain |
| RPC URL | https://rpc.robinhoodrpc.com |
| Chain ID | 4663 |
| Currency symbol | ETH |
| Block explorer | robinhoodchain.blockscout.com |
Rate limits
Limits are per plan and published up front: Starter gets 25 requests per second, Builder 250, and Scale is custom. When you approach your limit, responses include standard 429 status codes with a Retry-After header; nothing is silently dropped.
JSON-RPC methods
RobinhoodRPC endpoints expose the standard Ethereum JSON-RPC surface. Anything built for Ethereum (viem, ethers, wagmi, foundry) works unmodified.
Reads & state
| Method | Notes |
|---|---|
eth_chainId, net_version | Returns 0x1237 (4663) on mainnet |
eth_blockNumber, eth_getBlockByNumber, eth_getBlockByHash | Blocks arrive every ~100ms |
eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCount | Historical block tags need archive access (Builder plan and up) |
eth_call, eth_estimateGas | Gas estimates include the L1 data-posting component, so expect higher totals than the pure L2 execution cost |
eth_getLogs | Max 10,000-block range per request on shared plans |
Transactions
| Method | Notes |
|---|---|
eth_sendRawTransaction | Forwarded straight to the sequencer |
eth_getTransactionByHash, eth_getTransactionReceipt | Receipts include Arbitrum-style L1/L2 gas breakdown fields |
eth_gasPrice, eth_maxPriorityFeePerGas | Priority fees are typically zero, since the sequencer is first-come-first-served |
WebSocket subscriptions
Connect to wss://rpc.robinhoodrpc.com and use eth_subscribe with:
newHeads: a new header every ~100mslogs: filtered contract events as they landnewPendingTransactions: sequencer-accepted transactions
wscat -c wss://rpc.robinhoodrpc.com
> {"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}
< {"jsonrpc":"2.0","id":1,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}Debug, trace & chain-specific notes
debug_traceTransaction,debug_traceCall, anddebug_traceBlockByNumberare available on Builder and Scale plans, backed by archive nodes.- Robinhood Chain settles to Ethereum; finality follows the Arbitrum model: soft confirmation from the sequencer feed is near-instant, and L1 finality follows batch posting.
- Fees have two parts: L2 execution plus L1 data. Use
eth_estimateGasrather than hand-computing gas. - Some precompiles from Arbitrum (e.g.
ArbSysat0x64) are available for L1↔L2 messaging.
Run your own node
Robinhood Chain runs on Arbitrum Nitro, and anyone can run a full node that follows the chain. A node is a Nitro instance configured for chain ID 4663: it receives blocks from the sequencer feed, verifies them against batches posted to Ethereum L1, and serves standard JSON-RPC locally once synced.
Hardware requirements
| Component | Requirement |
|---|---|
| CPU | Modern multi-core (8+) with strong single-core performance |
| RAM | 64 GB minimum, 128 GB recommended |
| Storage | Locally attached NVMe SSD with (2 × current chain size) + 20% buffer; expect several TB. Network-attached storage will throttle sync badly. |
| Clock | Accurate system time via ntp or chrony, since a drifting clock breaks feed validation |
You'll also need Docker, an Ethereum L1 execution RPC endpoint, an L1 beacon endpoint for blob data, and the chain config files (robinhood-chain-info.json plus the genesis file) from the official docs in a local ./config directory.
Start a mainnet full node
docker run --rm -it \
-v $(pwd)/data:/home/nitro/.arbitrum \
-v $(pwd)/config:/home/nitro/config \
-p 8547:8547 -p 8548:8548 \
offchainlabs/nitro-node:v3.11.2-3599aca \
--parent-chain.connection.url=<YOUR_L1_RPC_URL> \
--parent-chain.blob-client.beacon-url=<YOUR_L1_BEACON_URL> \
--chain.id=4663 \
--chain.name="Robinhood Chain" \
--chain.info-files=/home/nitro/config/robinhood-chain-info.json \
--init.genesis-json-file=/home/nitro/config/robinhood-genesis.json \
--node.feed.input.url=wss://feed.mainnet.chain.robinhood.com \
--http.addr=0.0.0.0 \
--http.port=8547 \
--http.api=net,web3,ethPort 8547 serves HTTP JSON-RPC and 8548 serves WebSockets. To sync much faster than from genesis, pass --init.url=<SNAPSHOT_URL> with a recent database snapshot on first start. For the Sepolia-settled testnet, swap in --chain.id=46630, the testnet info file, and the testnet feed (wss://feed.testnet.chain.robinhood.com), use Sepolia L1 endpoints, and drop the genesis-file flag (testnet doesn't use one).
Verify it's working
curl http://localhost:8547 \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId"}'
# → {"jsonrpc":"2.0","id":1,"result":"0x1237"}Compare eth_blockNumberagainst the public explorer; you're synced when they match. Initial sync from genesis can take a long time; a recent database snapshot gets you there much faster. Running an RPC node is permissionless; becoming a validator additionally requires allowlist inclusion and a 1 WETH bond.