Base L2 execution client, built on Base's own official Docker image.
126
Maintainer: [email protected]
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.
latest: Points to the latest version of base-reth.<version>: Points to a specific Base release, for example 1.4.2.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.
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.
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.
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.
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.
In this Docker image, the following directory is used:
/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 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
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.
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.
docker logs base-reth --tail 100
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.
The following ports are commonly used by base-reth and are exposed in this Docker image:
For support, please contact [email protected].
Fiftysix is committed to making blockchain technology accessible, efficient, and reliable through robust decentralization. Learn more at fiftysix.tech.
Content type
Image
Digest
sha256:db3a9ef54…
Size
171.2 MB
Last updated
15 days ago
docker pull fiftysix/base-reth