Sign inSign up

fiftysix/base-reth

By fiftysix

•Updated 15 days ago

Base L2 execution client, built on Base's own official Docker image.

Image
0

126

fiftysix/base-reth repository overview

⁠Fiftysix Base-Reth Docker Image

Maintainer: [email protected]⁠

⁠Overview

This Docker image provides the execution-layer half of a Base node, built on top of Base's own published ghcr.io/base/node image⁠ rather than compiled from source, the same call made for fiftysix/nitro⁠. Base is an Optimistic Rollup Layer 2 built on Ethereum, incubated by Coinbase and built on the OP Stack. The code can be viewed on the Fiftysix Github⁠.

⁠Tags

  • latest: Points to the latest version of base-reth.
  • <version>: Points to a specific Base release, for example 1.4.2.

⁠Why built on the official image, not from source

Base's own source (base/base⁠) builds base-reth-node through a 34-stage Rust Dockerfile. Reproducing that independently buys nothing here: Base is MIT licensed⁠, the official image is already multi-architecture (amd64 + arm64), and it's small (roughly 360MB before any chain data). Building on it directly is simply less to get wrong.

⁠Why this is a separate image from fiftysix/base-consensus

Base's own upstream image ships both the execution client (base-reth-node) and the rollup/consensus client (base-consensus) together in one image, started under supervisord by default. This account splits that into two images - this one, and fiftysix/base-consensus⁠ - so each role can be resourced, restarted, and updated independently, matching this account's existing Ethereum execution/consensus pairing convention (e.g. fiftysix/geth + fiftysix/lighthouse) instead of the upstream image's single-container default.

⁠What is base-reth?

base-reth-node is Base's execution client, a fork of Reth⁠ (Paradigm's Rust Ethereum client). It processes transactions, executes smart contracts, and maintains L2 state, and connects to a paired fiftysix/base-consensus container over the Engine API to receive new blocks from Base's sequencer/rollup layer.

⁠Usage

⁠Prerequisites

An Ethereum L1 is required: fiftysix/base-consensus needs an L1 execution RPC endpoint and an L1 beacon endpoint that can serve blob sidecars (a default beacon client can't, post-Fusaka - see fiftysix/reth⁠'s blob-serving support). A paired fiftysix/base-consensus container is also required to sync.

⁠Basic Usage

To run a base-reth node:

docker pull fiftysix/base-reth
docker run --name base-reth -d \
  -e BASE_NODE_L2_ENGINE_AUTH_RAW=$(openssl rand -hex 32) \
  fiftysix/base-reth

This command will start the base-reth container, exposing the default RPC and P2P ports.

Note: unlike every other client in this account, this image is configured entirely through environment variables, not CLI flags - Base's own upstream execution-entrypoint script never reads its arguments, only environment variables. BASE_NODE_L2_ENGINE_AUTH_RAW is the only one this image requires with no default; give the exact same value to the paired fiftysix/base-consensus container.

⁠Directory Structure

In this Docker image, the following directory is used:

  • Data Directory (/data): This is where base-reth stores chain data and the JWT file it writes from BASE_NODE_L2_ENGINE_AUTH_RAW on every start. Unlike every other client in this account, this path is hardcoded to /data by Base's own upstream entrypoint script rather than /node/<client>/data - reused as-is rather than fighting it.

⁠Mounting Directories

Mounting the Data Directory:

To persist base-reth data across container restarts, mount a host directory to the container's data directory:

docker run --name base-reth -v /path/to/local/data:/data -d \
  -e BASE_NODE_L2_ENGINE_AUTH_RAW=$(openssl rand -hex 32) \
  fiftysix/base-reth

⁠JWT Secret

Unlike every other execution/consensus pairing in this account, the JWT secret here is shared as a value, not a file: give the same BASE_NODE_L2_ENGINE_AUTH_RAW to both fiftysix/base-reth and fiftysix/base-consensus, and each container independently writes its own local copy on startup. No shared volume is needed for the secret itself.

⁠Snapshot Downloading

Base publishes weekly snapshots at chain.base.org/snapshots⁠ (Minimal, Full, Archive, Archive + Proofs). This image includes the real downloader:

docker run --rm -v /path/to/local/data:/data --entrypoint base-reth-node fiftysix/base-reth \
  download --chain base --datadir /data --archive --resumable

Pass --datadir /data explicitly - the downloader's own default is an OS-specific path, not /data.

⁠Logging base-reth

docker logs base-reth --tail 100

⁠Using base-reth

⁠Choosing a network

RETH_CHAIN selects the network: base (mainnet, the default) or base-sepolia (testnet). RETH_SEQUENCER_HTTP (where transactions are forwarded) defaults automatically to Base's own public mainnet or Sepolia sequencer based on RETH_CHAIN, and is not a secret.

docker run --name base-reth -d \
  -p 8545:8545 -p 8546:8546 -p 8551:8551 -p 30303:30303 -p 30303:30303/udp \
  -e RETH_CHAIN=base-sepolia \
  -e BASE_NODE_L2_ENGINE_AUTH_RAW=$(openssl rand -hex 32) \
  fiftysix/base-reth

This command starts base-reth on Base Sepolia with RPC, WS, and Engine API all listening on their default ports.

⁠Exposing Ports

The following ports are commonly used by base-reth and are exposed in this Docker image:

  • 8545: HTTP-RPC server
  • 8546: WebSocket-RPC server
  • 8551: Engine API server (shared JWT with the paired fiftysix/base-consensus container)
  • 6060: Prometheus metrics
  • 30303: P2P communication (TCP and UDP)
  • 9200/udp: discv5 discovery

⁠Support

For support, please contact [email protected]⁠.

⁠About Fiftysix

Fiftysix is committed to making blockchain technology accessible, efficient, and reliable through robust decentralization. Learn more at fiftysix.tech⁠.

Tag summary

Content type

Image

Digest

sha256:db3a9ef54…

Size

171.2 MB

Last updated

15 days ago

docker pull fiftysix/base-reth