Installation
Docker (recommended)
The simplest way to run Arbitrum Reth is with Docker Compose, which starts both the execution client and the Nitro consensus node.
git clone https://github.com/0xBloctopus/arbitrum-reth.git
cd arbitrum-reth
cp .env.example .envEdit .env to set your L1 RPC endpoints:
PARENT_CHAIN_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY
PARENT_CHAIN_BEACON_URL=https://eth-sepoliabeacon.g.alchemy.com/v2/YOUR_KEYStart the stack:
docker compose up -dArbitrum Reth will start syncing Arbitrum Sepolia. The Nitro consensus node waits for Arbitrum Reth to pass its healthcheck before starting.
Verify sync progress
curl -s -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'View logs
docker compose logs -f arbitrum-reth # execution client
docker compose logs -f nitro # consensus nodeStop
docker compose downData is persisted in Docker named volumes (arbitrum-reth-data, nitro-data) and survives restarts.
Build from Source
Requirements
- Rust 1.93 or later
- clang and libclang-dev (for C dependencies)
- cmake (for cryptographic library builds)
Build
git clone https://github.com/0xBloctopus/arbitrum-reth.git
cd arbitrum-reth
cargo build --release -p arb-rethThe binary is at ./target/release/arb-reth.
Run
Arbitrum Reth requires a JWT secret for the Engine API connection with the Nitro consensus node:
openssl rand -hex 32 > /path/to/jwt.hexStart the node:
./target/release/arb-reth node \
--chain=genesis/arbitrum-sepolia.json \
--datadir=/path/to/data \
--http \
--http.addr=0.0.0.0 \
--http.api=eth,web3,net,debug \
--authrpc.addr=0.0.0.0 \
--authrpc.jwtsecret=/path/to/jwt.hexPorts
| Port | Service | Auth |
|---|---|---|
| 8545 | JSON-RPC (HTTP) | None |
| 8551 | Engine API | JWT |
The Nitro consensus node connects to port 8551 using the shared JWT secret.
Running the Consensus Node
Arbitrum Reth is an execution client only. It needs the Nitro consensus node to receive L1 messages and drive block production. You can run Nitro separately:
docker run offchainlabs/nitro-node:v3.10.0-rc.2-746bda2 \
--init.empty=true \
--init.validate-genesis-assertion=false \
--parent-chain.connection.url=YOUR_L1_RPC \
--parent-chain.blob-client.beacon-url=YOUR_BEACON_URL \
--chain.id=421614 \
--node.execution-rpc-client.url=http://HOST:8551 \
--node.execution-rpc-client.jwtsecret=/path/to/jwt.hex \
--node.sequencer=false \
--node.feed.input.url=wss://sepolia-rollup.arbitrum.io/feedThe docker-compose.yml in the repository handles this setup automatically.
