hello@robinhoodrpc.com

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

NetworkChain IDHTTPS endpointWebSocket endpoint
Mainnet4663 (0x1237)https://rpc.robinhoodrpc.comwss://rpc.robinhoodrpc.com

Your first request

The endpoints speak standard Ethereum JSON-RPC. Confirm you're talking to the right chain:

curl
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:

FieldValue
Network nameRobinhood Chain
RPC URLhttps://rpc.robinhoodrpc.com
Chain ID4663
Currency symbolETH
Block explorerrobinhoodchain.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

MethodNotes
eth_chainId, net_versionReturns 0x1237 (4663) on mainnet
eth_blockNumber, eth_getBlockByNumber, eth_getBlockByHashBlocks arrive every ~100ms
eth_getBalance, eth_getCode, eth_getStorageAt, eth_getTransactionCountHistorical block tags need archive access (Builder plan and up)
eth_call, eth_estimateGasGas estimates include the L1 data-posting component, so expect higher totals than the pure L2 execution cost
eth_getLogsMax 10,000-block range per request on shared plans

Transactions

MethodNotes
eth_sendRawTransactionForwarded straight to the sequencer
eth_getTransactionByHash, eth_getTransactionReceiptReceipts include Arbitrum-style L1/L2 gas breakdown fields
eth_gasPrice, eth_maxPriorityFeePerGasPriority 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 ~100ms
  • logs: filtered contract events as they land
  • newPendingTransactions: sequencer-accepted transactions
wscat
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, and debug_traceBlockByNumber are 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_estimateGas rather than hand-computing gas.
  • Some precompiles from Arbitrum (e.g. ArbSys at 0x64) are available for L1↔L2 messaging.
Missing a method you need? Tell us at hello@robinhoodrpc.com. If Nitro supports it, we can usually enable it.

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

ComponentRequirement
CPUModern multi-core (8+) with strong single-core performance
RAM64 GB minimum, 128 GB recommended
StorageLocally attached NVMe SSD with (2 × current chain size) + 20% buffer; expect several TB. Network-attached storage will throttle sync badly.
ClockAccurate 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

shell
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,eth

Port 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
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.

Or don't. Running 64 GB+ NVMe boxes with perfect clocks is literally our job. Grab an endpoint and ship your app instead. You can always bring the infrastructure in-house later.