Skip to content

Module 3 - Setting Up OP Geth Node and Block Explorer

In this module, we’ll set up the OP Geth node and block explorer for your L2. The OP Geth node serves as a non-voting RPC node that enables executing Eth L2 transactions.

Setting up an OP Geth Node requires three services:

  1. OP Geth: Modified to calculate gas based on required Solana compute
  2. Rhea: Picks up Eth transactions from OP Geth mempool and submits them to Solana
  3. Light Client (Proxy): Provides an Ethereum interface to access Solana state

Run the Docker containers in the following order:

First, airdrop SOLs to the Light Client keypair using Solana Faucet. Get the keypair address:

Terminal window
solana address -k keys/proxy-sender.json

Run the Light Client container:

Terminal window
docker compose up -d proxy
docker logs proxy -f

Wait until the logs show “Starting the RPC server at 0.0.0.0:9090”.

If you’re setting up your L2 on your local machine, comment out Geth volumes in rome-setup/docker/docker-compose.yml:

# volumes:
# - /etc/letsencrypt/live/${GETH_HOST}/fullchain.pem:/etc/nginx/ssl/selfsigned.crt
# - /etc/letsencrypt/live/${GETH_HOST}/privkey.pem:/etc/nginx/ssl/selfsigned.key

If you’re setting up on a remote server, keep these volumes uncommented.

Run the Geth container:

Terminal window
docker compose up -d geth
docker logs geth -f

Wait until the logs show “Server listening at http://localhost:3000”.

Airdrop SOLs to the Rhea keypair using Solana Faucet. Get the keypair address:

Terminal window
solana address -k keys/rhea-sender.json

Run the Rhea container:

Terminal window
docker compose up -d rhea
docker logs rhea -f

Wait until the logs show “Polling: http://geth:8545”.

If you’re running your L2 on your local machine, clone the local branch:

Terminal window
git clone --branch local https://github.com/rome-labs/romescout.git

If you’re running on a remote server, clone the testnet branch:

Terminal window
git clone --branch testnet https://github.com/rome-labs/romescout.git
Terminal window
cd romescout/docker-compose

If you’re running on a remote server, replace rollup.testnet.romeprotocol.xyz with your domain in:

  • romescout/docker-compose/services/nginx.yml
  • romescout/docker-compose/envs/common-frontend.env

Update the following environment variables in the configuration:

NEXT_PUBLIC_NETWORK_NAME=Rome
NEXT_PUBLIC_NETWORK_SHORT_NAME=Rome
NEXT_PUBLIC_NETWORK_ID=915817419
NEXT_PUBLIC_NETWORK_CURRENCY_NAME=Rome
NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL=ROME
NEXT_PUBLIC_NETWORK_LOGO=http://rome-public-assets.s3.us-east-1.amazonaws.com/rome-banner.png
NEXT_PUBLIC_NETWORK_ICON=http://rome-public-assets.s3.us-east-1.amazonaws.com/rome-logo.png
NEXT_PUBLIC_HOMEPAGE_PLATE_TEXT_COLOR=white
NEXT_PUBLIC_HOMEPAGE_PLATE_BACKGROUND=#5E0A60

Remove old data (skip if running for the first time):

Terminal window
sudo rm -rf services/blockscout-db-data
sudo rm -rf services/stats-db-data

Build and run the Docker container:

Terminal window
docker-compose up --build -d
# docker compose down

Access the Rome Scout Explorer at: