Rome Docs
  • Getting Started
  • Overview of Rome
    • Rome Scales Bitcoin
      • How Rome Scales Bitcoin
    • Rome Scales Ethereum
      • How Rome Scales Ethereum
    • Rome Scales Rollups
      • How Rome Scales Rollups
    • Rome Provides Interop with Cosmos
      • How Rome Provides Interop with Cosmos
  • Rome L2 Setup
    • Setup your L2
      • Choose your Chain ID
      • Download Rome Repos
      • Register your L2
      • Initialize your L2
      • Setup OP Geth Node
      • Run Block Explorer
      • Run on Remote Server
        • Setup Remote Server
        • Setup Certificate
    • Test your L2
      • Setup Metamask
      • Fund your Wallet
      • Check Wallet Balance
      • Do Simple Transfer
      • Run Uniswap (Optional)
  • Rome Interop
    • Rome SDK
    • Rome SDK Setup
      • Prepare Environment
      • Set Configuration
      • Run Rhea Example
      • Run Remus Example
      • Run Romulus Example
    • Remus: Cross-Rollup Atomicity
    • Romulus: Cross-Chain Atomicity
  • Rome EVM
    • How to use Rome EVM
    • RPC Information
    • Tutorial to deploy a smart contract on Rome EVM
  • Nexus: Rome's Based Sequencer
    • How Nexus Works
    • Transaction Flow
  • Shared Sequencer
    • Atomicity
    • Rome Transactions
    • Rhea
    • Hercules
    • Data Availability
    • Settlement
Powered by GitBook
On this page
  • Machine specs
  • Run Docker containers sequentially in the order below
  • Restart services if needed
  • Docker container overview

Was this helpful?

  1. Rome L2 Setup
  2. Setup your L2

Setup OP Geth Node

This is a non-voting RPC node that users interact with for L2 transactions.

This OP Geth node serves as a non-voting RPC node that enables executing Eth L2 transactions.

  • Setting up an OP Geth Node needs OP Geth, Rhea, Hercules, Light Client (AKA Proxy), and Postgres.

  • OP Geth has been modified to calculate gas based on the required Solana compute. It retrieves the required gas value by querying Light Client.

  • Rhea picks up L2 transactions from OP Geth mempool, composes them into Solana transactions, and submits them to Solana for sequencing.

  • Solana's consensus voting nodes execute and vote on the ordering of these transactions. Hercules reads state from Solana nodes and confirms L2 transactions and ordering on OP Geth.

Machine specs

We recommend using an Ubuntu machine with:

4 cores, 8GB RAM, 1TB storage, 8MBit/sec network bandwidth

E.g. AWS c5a.2xlarge, Ubuntu, x86_64, EBS 1 TB GP3

8 cores, 16GB RAM, 16 cores, 1 TB SSD, 25 MBit/sec network bandwidth

E.g. AWS c5a.4xlarge, Ubuntu, x86_64, EBS 1 TB GP3

Run Docker containers sequentially in the order below

1

Postgres

docker-compose up -d postgres_rome
docker logs postgres_rome -f

Wait for the logs print out "database system is ready to accept connections".

2

Apply Migrations

docker-compose up apply_migrations
3

Light Client

Light Client provides an Ethereum interface to access Solana state.

This includes providing gas estimates to Geth.

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

Wait for the logs print out "Starting the RPC server at 0.0.0.0:9090".

4

Geth

Geth is the rollup client that accepts and executes Eth L2 transactions, and provides transaction results to the user. It is a non-voting RPC node.

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

Wait for the logs print out "HTTP server started".

5

Rhea

Rhea takes rollup transactions from Geth, packages them as Rome Solana transactions, and submits them to Solana for sequencing.

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

Wait for the logs to print out "Polling: http://geth:8545".

6

Hercules

docker-compose up -d hercules
docker logs hercules -f

Wait for the logs to print out "SolanaBlockLoader is in sync with Solana validator".

7

Nginx

If you are setting up your L2 on a remote machine, then run the nginx container.

Modify romenginx volumes in rome-setup/docker/docker-compose.yml to use the location of your SSL cert & private key (replace caesar.devnet.romeprotocol.xyz with your domain below):

volumes:
  - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  - /etc/letsencrypt/live/caesar.devnet.romeprotocol.xyz/fullchain.pem:/etc/nginx/ssl/selfsigned.crt:ro
  - /etc/letsencrypt/live/caesar.devnet.romeprotocol.xyz/privkey.pem:/etc/nginx/ssl/selfsigned.key:ro
docker-compose up -d romenginx
docker logs romenginx -f

Wait for the logs to print out "Configuration complete; ready for start up".

Restart services if needed

docker stop romenginx && docker rm romenginx
docker stop hercules && docker rm hercules
docker stop rhea && docker rm rhea
docker stop geth && docker rm geth
docker stop proxy && docker rm proxy
docker stop postgres_rome && docker rm postgres_rome
docker-compose up -d postgres_rome
docker-compose up -d proxy
docker-compose up -d geth
docker-compose up -d rhea
docker-compose up -d hercules
docker-compose up -d romenginx

Docker container overview

The docker containers started above are listed below:

Docker Container
Purpose

proxy

Light Client App

geth

OP Geth App

rhea

Rhea App

hercules

Hercules App

postgres

Postgres database

apply_migrations

Postgres migrations

romenginx

Nginx Proxy

PreviousInitialize your L2NextRun Block Explorer

Last updated 2 days ago

Was this helpful?