Baremetal
Authors: [payne | stakesquid]
Last updated
Was this helpful?
Authors: [payne | stakesquid]
Last updated
Was this helpful?
8+ cores CPU
Debian 12/Ubuntu 22.04
=> 16 GB RAM
2TB+ op-erigon 3.5TB+ l2geth (legacy)
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
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
Set explicit default UFW rules
sudo ufw default deny incoming
sudo ufw default allow outgoing
Allow SSH
sudo ufw allow 22/tcp
Allow remote RPC connections with Optimism Node
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
sudo ufw enable
Snapshots URL: https://snapshot.testinprod.io/
Create a directory and start downloading an archive in screen session as it takes ~9 hours
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"
#to return to previous screen and continue installation press
Ctrl+a+d
go
^1.21
go version
node
^20
node --version
pnpm
^8
pnpm --version
foundry
^0.2.0
forge --version
make
^4
make --version
yarn
1.22.21
yarn --version
nvm
0.39.3
nvm --verison
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
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
curl -L https://foundry.paradigm.xyz | bash
foundryup
source /root/.bashrc
nvm install 16 && npm install --global yarn && nvm use 16 && npm -g install pnpm
source /root/.bashrc
go version
nvm -v
npm -v
yarn -v
pnpm -v
mkdir -p /root/github
mkdir -p /root/data/optimism/op-node
mkdir -p /root/data/optimism/op-erigon
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
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
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
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
cd /root/github/
git clone https://github.com/testinprod-io/op-erigon
cd op-erigon
git checkout v2.60.0-0.6.1
make
cd /root/data/optimism/erigon
openssl rand -hex 32 > /root/data/optimism/erigon/jwt.txt
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_endpoint>:9656"
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/op-erigon.service
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
mv mdbx.dat /root/data/op-erigon/datadir/chaindata/
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