This repository is no longer the recommended source for running external nodes. Use https://github.com/conduitxyz/conduit-optimism-external-node/ instead.
Dockerfiles that can be used to run a reth node for the Ronin L1 -> L2 migration. This setup runs reth alongside op-node and eigenda-proxy, with make selecting either snapshot bootstrap or migration import bootstrap.
Note that you will need to run a consensus-layer client to power reth, typically op-node. Docs for running op-node are here: https://docs.optimism.io/node-operators/guides/configuration/consensus-clients. We also include an op-node that should be used.
| Component | Version |
|---|---|
| reth (execution) | ghcr.io/conduitxyz/conduit-op-reth:v1.0.0-rc.1 |
| op-node | us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.16.5 |
| eigenda-proxy | ghcr.io/layr-labs/eigenda-proxy:2.7.0 |
The execution client uses Conduit's custom conduit-op-reth build rather than stock upstream op-reth.
For this Docker Compose setup, set DATADIR to the host directory you want Docker to mount into the reth container, for example ./datadir. Inside the container, that directory is mounted at /data, and reth uses /data as its --datadir path.
Bootstrap mode is controlled by SNAPSHOT:
SNAPSHOT=trueuses the snapshot path viadownload-snapshot.shSNAPSHOT=falseuses the migration import path viadownload-migration-files.sh
For snapshot mode, the final datadir layout should contain snapshot files directly under ${DATADIR}.
You will also need to set the NETWORK=[saigon|ronin] environment variable, depending on which network you are running the image for. For Saigon select saigon, for ronin mainnet select ronin.
The rollup sequencer endpoint for testnet will be: https://rpc-saigon-testnet-cc58e966ql.t.conduit.xyz
For Mainnet it will be: https://rpc-ronin-mainnet-bfz9fadqzl.t.conduit.xyz
Other arguments will need to be set as well, below is an example you might set in a k8s yaml file:
env:
- name: DATADIR
value: /path/to/datadir
- name: NETWORK
value: saigon
args:
- --rollup.sequencer https://rpc-saigon-testnet-cc58e966ql.t.conduit.xyz --http --ws --authrpc.port 9551 --authrpc.jwtsecret /path/to/jwt.hex
The rollup.json file with automatically be downloaded, and environmental variable set, so no need to set the --rollup.config flag.
op-node depends on eigenda-proxy for the configured alt-DA path in this setup. make start-op-node auto-starts eigenda-proxy first, and you can still run make start-eigenda-proxy manually for debugging.
In addition the standard parameters, you will need to set the OP_NODE_P2P_STATIC variable.
For Saigon: OP_NODE_P2P_STATIC=/ip4/34.187.134.72/tcp/9222/p2p/16Uiu2HAmFyGhL6G7CRgc77zmEeWAdBJA2vFsY9LSYzJQfnCrpWUW
For Ronin: OP_NODE_P2P_STATIC=/ip4/34.169.70.196/tcp/9222/p2p/16Uiu2HAkxJUuUQFe6eLwhT8pHYRFYTch1MoeuWDoEFKbdAZANbMk
You will also need to set the NETWORK=[saigon|ronin] environment variable, depending on which network you are running the image for. For Saigon select saigon, for ronin mainnet select ronin.
Other arguments will need to be set as well, below is an example you might set in a k8s yaml file:
env:
- name: OP_NODE_P2P_STATIC
value: /ip4/34.187.134.72/tcp/9222/p2p/16Uiu2HAmFyGhL6G7CRgc77zmEeWAdBJA2vFsY9LSYzJQfnCrpWUW
- name: NETWORK
value: saigon
args:
- --l1=<your-ethereum-L1-rpc> --l2=http://localhost:9551 --l2.jwt-secret=/path/to/jwt.hex --rpc.addr=0.0.0.0 --rpc.port=7000 --l1.beacon=<your-beacon-node-http-endpoint>
- Copy env template and fill required L1 endpoints:
Use .env.example directly, or copy it to a local file:
cp .env.example .envSet these in your env file:
DATADIRas a host path, for example./datadir(mounted to/datainside theexecutioncontainer)NETWORK(saigon or ronin)SNAPSHOT=true|falseto select bootstrap modeOP_NODE_L1_ETH_RPCOP_NODE_L1_BEACONEIGENDA_PROXY_STORAGE_BACKENDS_TO_ENABLE=V2EIGENDA_PROXY_STORAGE_DISPERSAL_BACKEND=V2EIGENDA_PROXY_EIGENDA_V2_NETWORK=sepolia_testnet # or mainnetUPDATE_BEDROCK_BLOCK=true(optional, defaultfalse) — overridesbedrockBlockin the downloadedgenesis.jsonto the network-specific migration block:45528550for saigon,55577500for ronin. When enabled, setRETH_HISTORICAL_RPCto an RPC endpoint that can serve pre-bedrock historical data.RETH_HISTORICAL_RPC— RPC URL for pre-bedrock historical block data, used with--rollup.historicalrpc
EIGENDA_PROXY_EIGENDA_V2_CERT_VERIFIER_ROUTER_OR_IMMUTABLE_VERIFIER_ADDREIGENDA_PROXY_EIGENDA_V2_DISPERSER_RPC
If you change NETWORK, rerun make setup to refresh those values and rebuild the images.
- Choose the bootstrap path.
Snapshot mode:
- Use
SNAPSHOT=true makeusesdocker-compose.yml- The execution container runs
download-snapshot.sh - Prepare
DATADIRwith snapshot contents if you are loading them manually
Import mode:
- Use
SNAPSHOT=false makeusesdocker-compose-import.yml- The execution container runs
download-migration-files.sh - Use this path when no snapshot is available and reth must import from migration files
- If you are using snapshot mode, prepare
DATADIRwith the snapshot contents.
If you are preparing the snapshot manually instead of relying on the container entrypoint, use the command for your network:
Saigon:
mkdir -p ./datadir && gsutil cp gs://conduit-networks-snapshots/saigon-testnet-cc58e966ql/latest.tar - | tar -xvf - -C ./datadir --strip-components=1Ronin:
mkdir -p ./datadir && gsutil cp gs://conduit-networks-snapshots/ronin-mainnet-bfz9fadqzl/latest.tar - | tar -xvf - -C ./datadir --strip-components=1- Run preflight and rebuild the images:
make setupmake start-reth uses the compose file selected by SNAPSHOT in .env. In snapshot mode the entrypoint is download-snapshot.sh. In import mode the entrypoint is download-migration-files.sh.
- Start execution (reth) first:
make start-reth- Start op-node (this auto-starts EigenDA proxy first):
make start-op-nodeIf reth or eigenda-proxy is not ready, start-op-node exits with a clear message. You can still run make start-eigenda-proxy manually for debugging.
Set SNAPSHOT in .env before running make. Manual COMPOSE_FILE=... overrides still work if you need to target a specific compose file directly.
make logs-reth
make logs-eigenda-proxy
make logs-op-node
make status
make stop-all
make stop-op-node
make stop-eigenda-proxy
make stop-rethTestnet:
CPU: 2
Memory: 40Gi
Disk: 100Gi
Mainnet:
CPU: 2
Memory: 120Gi
Disk: 800Gi
If you run into issues, try deleting the persistent data in your --datadir directory and restart the reth container image.
If your snapshot or backup extracts into DATADIR/mnt/..., flatten it so the contents of mnt become the direct children of DATADIR. Reth should see DATADIR/db/mdbx.dat, not DATADIR/mnt/db/mdbx.dat.
If you'd like to roll your own images, the appropriate files will be available under:
https://storage.googleapis.com/conduit-networks-snapshots/saigon-testnet-cc58e966ql/latest.tar
https://storage.googleapis.com/conduit-networks-snapshots/ronin-mainnet-bfz9fadqzl/latest.tar
https://api.conduit.xyz/file/v1/optimism/genesis/saigon-testnet-cc58e966ql
https://api.conduit.xyz/file/v1/optimism/genesis/ronin-mainnet-bfz9fadqzl
https://storage.googleapis.com/conduit-public-dls/${NETWORK}-rollup.json
The snapshot and genesis URLs are selected from NETWORK in the entrypoint script. The snapshot archive may extract with a top-level mnt/ directory, but the final runtime layout should be flattened into DATADIR.