System Requirements
CPU OS RAM DISK 2TB+ op-erigon
3.5TB+ l2geth (legacy)
Op-erigon reached a size of 1.6TB by Sep 2, 2024
L2-geth is 3.4TB
Optimism 🔵
Before you start, make sure that you have your own synced Ethereum L1 RPC URL (e.g. Erigon) and L1 Consensus Layer Beacon endpoint (e.g. Lighthouse) ready.
To serve pre-bedrock eth_calls, you will also need an l2geth (legacy) node. Instructions for how to set up an l2geth node can be found in
Pre-Requisites
Copy sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove -y
sudo apt install -y git make wget gcc pkg-config libusb-1.0-0-dev libudev-dev jq gcc g++ curl libssl-dev screen apache2-utils build-essential pkg-config
Setting up Firewall
Set explicit default UFW rules
Copy sudo ufw default deny incoming
sudo ufw default allow outgoing
Allow SSH
Copy sudo ufw allow 22/tcp
Allow remote RPC connections with Optimism Node
Copy sudo ufw allow from ${REMOTE.HOST.IP} to any port 8545
Not advised to allow all or unknown IP address to RPC port
Enable Firewall
Download a snapshot
Snapshots URL: https://snapshot.testinprod.io/
Create a directory and start downloading an archive in screen session as it takes ~9 hours
Copy mkdir Optimism && cd Optimism
screen -S archive
aria2c --file-allocation=none -c -x 10 -s 10 "https://datadirs.testinprod.io/op-mainnet-db-120229131.zst"
Copy #to return to previous screen and continue installation press
Ctrl+a+d
Compile Op-node
Required Software Dependencies
Dependency Version Version Check Command
Install go
Copy sudo wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz && sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz && rm go1.21.6.linux-amd64.tar.gz
Install nvm
Copy wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
Download foundry
Copy curl -L https://foundry.paradigm.xyz | bash
Install foundry
Copy foundryup
source /root/.bashrc
Install node and yarn
Copy nvm install 16 && npm install --global yarn && nvm use 16 && npm -g install pnpm
source /root/.bashrc
Check if go and all dependancies are installed
Copy go version
nvm -v
npm -v
yarn -v
pnpm -v
Create directories
Copy mkdir -p /root/github
mkdir -p /root/data/optimism/op-node
mkdir -p /root/data/optimism/op-erigon
Build op-node
Copy cd /root/github/
git clone https://github.com/ethereum-optimism/optimism.git
cd optimism
git checkout v1.7.0
nvm install && npm install --global yarn && nvm use node && npm -g install pnpm
pnpm install
pnpm build
make op-node
#The binary is built at /root/github/optimism/op-node/bin/op-node
Create systemd service
You'll need your own synced Ethereum L1 RPC URL (e.g. Erigon) and L1 Consensus Layer Beacon endpoint (e.g. Lighthouse) in order to run optimism
Copy echo "[Unit]
Description=Optimism OP Node Service
After=network.target
StartLimitIntervalSec=60
StartLimitBurst=3
[Service]
Type=simple
Restart=on-failure
RestartSec=5
TimeoutSec=900
User=root
Nice=0
LimitNOFILE=200000
WorkingDirectory=/root/data/optimism/op-node/
ExecStart=/root/data/github/optimism/op-node/bin/op-node \
--l1=http://<your_l1_eth_rpc> \
--l2=http://0.0.0.0:8551 \
--network=mainnet \
--rpc.addr=0.0.0.0 \
--rpc.port=9545 \
--l2.jwt-secret=/root/data/optimism/erigon/jwt.hex \
--l1.trustrpc \
--l1.rpckind=erigon \
--metrics.enabled \
--l1.beacon=http://<your_l1_beacon_rpc> \
--metrics.addr=0.0.0.0 \
--metrics.port=7300
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/op-node.service
Copy sudo nano /etc/systemd/system/op-node.service #make changes in op-node service file
sudo systemctl daemon-reload #refresh systemd configuration when changes made
sudo systemctl start op-node.service #start op-node
sudo systemctl enable op-node.service #enable op-node service at system startup
sudo journalctl -fu op-node.service #follow logs of op-node service
Compile Erigon
Copy cd /root/github/
git clone https://github.com/testinprod-io/op-erigon
cd op-erigon
git checkout v2.60.0-0.6.1
make
Create JWT secret file and download genesis and rollup .json files
Copy cd /root/data/optimism/erigon
openssl rand -hex 32 > /root/data/optimism/erigon/jwt.txt
Create systemd service
Copy sudo echo "[Unit]
Description=Erigon Optimism Service
After=network.target
StartLimitIntervalSec=60
StartLimitBurst=3
[Service]
Type=simple
Restart=on-failure
RestartSec=5
TimeoutSec=900
User=root
Nice=0
LimitNOFILE=200000
WorkingDirectory=/root/data/optimism/erigon/
ExecStart=/root/data/github/op-erigon/build/bin/erigon \
--datadir=/root/data/optimism/erigon/datadir \
--ethash.dagdir=/root/data/optimism/erigon/datadir/ethash \
--authrpc.jwtsecret=/root/data/optimism/erigon/jwt.hex \
--authrpc.port=8551 \
--http \
--http.addr=0.0.0.0 \
--http.port=9659 \
--http.compression \
--http.vhosts=* \
--http.corsdomain=* \
--http.api=eth,debug,net,trace,web3,erigon \
--private.api.addr=0.0.0.0:9094 \
--ws --ws.compression \
--metrics --metrics.addr=0.0.0.0 --metrics.port=9698 \
--torrent.download.rate 80mb \
--rpc.returndata.limit=1000000 \
--txpool.gossip.disable=true \
--chain=op-mainnet \
--db.size.limit=8TB \
--nodiscover \
--rollup.sequencerhttp=" https://mainnet-sequencer.optimism.io " \
--rollup.historicalrpc=" http:// < your_l2-geth_endpoin t > :9656 "
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/op-erigon.service
Sync using downloaded Snapshot
Copy screen –r archive
ls #to see the name of downloaded archive
zstd --decompress op-mainnet-db-120229131.zst -o mdbx.dat
#Unzipping takes ~3-4 hrs so you can go touch some grass
Consider switching screen by pressingctrl A+D
to allow a process run in the background
Copy mv mdbx.dat /root/data/op-erigon/datadir/chaindata/
Start op-erigon
Copy sudo systemctl daemon-reload #refresh systemd configuration when changes made
sudo systemctl start op-erigon.service #start op-erigon
sudo systemctl enable op-erigon.service #enable op-erigon service at system startup
sudo journalctl -fu op-erigon.service #follow logs of op-erigon service
To check or modify op-erigon.service
parameters simply run
sudo nano /etc/systemd/system/op-erigon.service
Ctrl+X and Y to save changes