Sign inSign up

fiftysix/nitro

By fiftysix

•Updated 5 days ago

Arbitrum Nitro node, built on Offchain Labs' own official image.

Image
0

274

fiftysix/nitro repository overview

⁠Fiftysix Nitro Docker Image

Maintainer: [email protected]⁠

⁠Overview

This Docker image provides Arbitrum Nitro, built on top of Offchain Labs' own published offchainlabs/nitro-node image⁠ rather than compiled from source, the one exception to how every other image on this account is built. Nitro is the node software that powers Arbitrum One and other Arbitrum chains. The code can be viewed on the Fiftysix Github⁠.

⁠Tags

  • latest: Points to the latest version of Nitro.
  • <version>: Points to a specific Offchain Labs release, tagged as they tag it (version plus commit), for example 3.11.4-7d5ac27.

⁠Why built on the official image, not from source

Nitro's own build is a 20+ stage Go/Rust/WASM toolchain that ends by downloading dozens of historical "consensus machine" WASM binaries, each pinned to an on-chain module-root hash, and validating the freshly-compiled prover against them - these are what the network's fraud-proof system checks a validator's computation against. Offchain Labs' own official Dockerfile builds from a past official release image to source machine files for older consensus versions it can no longer regenerate standalone. Reproducing that independently risks a validator/prover mismatch that would be invisible until it mattered. Building on their published, multi-arch image guarantees the module roots match what the network expects.

⁠License

Nitro is licensed under the Business Source License 1.1⁠, not a permissive open-source license. Its Additional Use Grant appears to cover running a node against Arbitrum's own chains. Review the license yourself before relying on this image for your use case.

⁠What is Nitro?

"Arbitrum Nitro is the software that powers Arbitrum chains... it combines the security benefits of Ethereum's Geth client with the speed and cost efficiency of Optimistic Rollups." Unlike an Ethereum execution or consensus client, Nitro is a single monolithic process - there is no separate execution/consensus split and no JWT secret of its own. It reads execution data from an Ethereum L1 over plain JSON-RPC, and blob data from an L1 beacon node's REST API.

⁠Usage

⁠Prerequisites

Nitro needs an Ethereum L1 execution RPC endpoint and an L1 consensus (beacon) endpoint that can serve blob sidecars. Since the Fusaka upgrade, a default L1 beacon node cannot serve blobs at all - see Fiftysix's Ethereum image⁠ and its --blob-serving support if you are pairing this with a Fiftysix-built L1.

⁠Basic Usage
docker pull fiftysix/nitro
docker run --name nitro -d fiftysix/nitro \
  --chain.id 42161 \
  --parent-chain.id 1 \
  --parent-chain.connection.url <your-l1-execution-rpc-url> \
  --parent-chain.blob-client.beacon-url <your-l1-beacon-url>

This starts a mainnet Arbitrum One node. For Arbitrum Sepolia, use --chain.id 421614 --parent-chain.id 11155111 against a Sepolia L1.

Note: without a real snapshot or an existing database, this syncs from genesis, which is impractically slow. See Snapshot Downloading below.

⁠Directory Structure

In this Docker image, the following directories are used:

  • Data Directory (/node/nitro/data): Where Nitro stores its L2 chain data. This directory is specified in the Dockerfile and should be mounted if you want to persist data across container restarts.
  • Scripts Directory (/node/nitro/scripts): Contains the entrypoint script (nitro-entrypoint.sh).

The base image's own non-root user (user, uid 1000) is reused as-is.

⁠Mounting Directories

Mounting the Data Directory:

docker run --name nitro -v /path/to/local/data:/node/nitro/data -d fiftysix/nitro \
  --chain.id 42161 --parent-chain.id 1 \
  --parent-chain.connection.url <your-l1-execution-rpc-url> \
  --parent-chain.blob-client.beacon-url <your-l1-beacon-url>

⁠Snapshot Downloading

Official Arbitrum snapshots are published at snapshot.arbitrum.foundation⁠. Rather than downloading and extracting manually, let Nitro do it:

docker run --name nitro -v /path/to/local/data:/node/nitro/data fiftysix/nitro \
  --chain.id 42161 --parent-chain.id 1 \
  --parent-chain.connection.url <your-l1-execution-rpc-url> \
  --parent-chain.blob-client.beacon-url <your-l1-beacon-url> \
  --init.latest pruned --init.then-quit

This downloads, verifies and initialises the latest pruned snapshot, then exits. Remove --init.latest/--init.then-quit for subsequent runs so the node starts normally against the initialised database. --init.latest also accepts archive and genesis.

⁠Logging Nitro

docker logs nitro --tail 100

⁠Exposing Ports

  • 8547: HTTP-RPC server (Nitro's own default; distinct from the 8545 every Ethereum L1 execution client in this account uses)
  • 8548: WebSocket-RPC server
  • 9642: Sequencer feed relay

⁠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:79273c990…

Size

1.3 GB

Last updated

5 days ago

docker pull fiftysix/nitro