Authors: [man4ela | catapulta.eth]
System Requirements
The Blast archive node has a size of 3.9TB on January 10th, 2025
Blast
Blast is a fork of Optimism’s open-source OP Stack . In this guide, Blast forked Optimism's op-geth
and op-node
binaries are built from source to facilitate the node's installation.
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.
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 Blast 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
Allow P2P Connections
Copy sudo ufw allow 30304/tcp
sudo ufw allow 30304/udp
Enable Firewall
To check the status of UFW and see the current rules
Copy sudo ufw status verbose
Install dependencies
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
# Verify the installation
/usr/local/go/bin/go version
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 18.12.0 && npm install --global yarn && nvm use 18.12.0 && npm -g install pnpm
source /root/.bashrc
Check if go and all dependencies are installed
Copy go version
nvm -v
npm -v
yarn -v
pnpm -v
Create directories
Copy mkdir -p /root/data/blast/geth/blast-geth
mkdir -p /root/data/blast/geth/blast-optimism
Compile Blast-geth
Copy git clone https://github.com/blast-io/blast.git
cd blast/blast-geth
git checkout tags/v1.1.0 -b v1.1.0
make
#The binary is built at /root/blast/blast-geth/build/bin/geth
Create JWT secret file and download genesis and rollup .json files
Copy cd /root/data/blast/geth/blast-geth
openssl rand -hex 32 | tr -d "\n" > /root/data/blast/geth/blast-geth/jwt.hex
cd /root/blast
git clone https://github.com/blast-io/deployment.git #contains genesis and rollup configs
Create systemd service
Copy sudo echo "[Unit]
Description=Blast-geth Service
After=network.target
StartLimitIntervalSec=200
StartLimitBurst=5
[Service]
Type=simple
Restart=on-failure
RestartSec=5
TimeoutSec=900
User=root
Nice=0
LimitNOFILE=200000
WorkingDirectory=/root/blast/blast-geth/build/bin/
ExecStart=/root/blast/blast-geth/build/bin/geth \
--datadir=/root/data/blast/geth/blast-geth/ \
--http \
--http.corsdomain=* \
--http.vhosts=* \
--http.addr=0.0.0.0 \
--http.port=8545 \
--http.api=web3,debug,eth,txpool,net,engine \
--ws \
--ws.addr=0.0.0.0 \
--ws.port=8546 \
--ws.origins=* \
--ws.api=debug,eth,txpool,net,engine \
--authrpc.addr=0.0.0.0 \
--authrpc.port=8551 \
--authrpc.vhosts=* \
--authrpc.jwtsecret=/root/data/blast/geth/blast-geth/jwt.hex \
--syncmode=full \
--gcmode=archive \
--networkid=81457 \
--nodiscover \
--maxpeers=0 \
--rollup.disabletxpoolgossip=true \
--override.canyon=0 \
--override.ecotone=1716843599 \
--rollup.sequencerhttp=https://sequencer.blast.io
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/blast-geth.service
Bootstrap the node by running
/root/blast/blast-geth/build/bin/geth --datadir /root/data/blast/geth/blast-geth/ init /root/blast/deployment/mainnet/genesis.json
Start blast-geth
Copy sudo systemctl daemon-reload #refresh systemd configuration when changes made
sudo systemctl start blast-geth.service #start blast-geth
sudo systemctl enable blast-geth.service #enable blast-geth service at system startup
sudo journalctl -fu blast-geth.service #follow logs of blast-geth service
To check or modify blast-geth.service
parameters simply run
sudo nano /etc/systemd/system/blast-geth.service
Ctrl+X and Y to save changes
You can run curl
command in the terminal to check the status of your node
Copy curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
-H "Content-Type: application/json" http://localhost:8545
Compile Op-node (Blast-optimism)
Copy cd blast/blast-optimism
make op-node
Create systemd service
Make sure to replace --l1
and --l1.beacon
flags with your own synced Ethereum L1 RPC URL (e.g. Erigon) and L1 Consensus Layer Beacon endpoint (e.g. Lighthouse)
Copy echo "[Unit]
Description=Blast-optimism 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/blast/blast-optimism/op-node/bin/
ExecStart=/root/blast/blast-optimism/op-node/bin/op-node \
--l1={L1 RPC URL} \
--l1.rpckind=any \
--l1.beacon={L1 BEACON RPC URL} \
--l2=http://0.0.0.0:8551 \
--l2.jwt-secret=/root/data/blast/blast-geth/jwt.hex \
--rollup.config=/root/blast/deployment/mainnet/rollup.json \
--p2p.listen.tcp=30304 \
--p2p.listen.udp=30304 \
--p2p.bootnodes=enr:-J64QGwHl9uYLfC_cnmxSA6wQH811nkOWJDWjzxqkEUlJoZHWvI66u-BXgVcPCeMUmg0dBpFQAPotFchG67FHJMZ9OSGAY3d6wevgmlkgnY0gmlwhANizeSHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaECg4pk0cskPAyJ7pOmo9E6RqGBwV-Lex4VS9a3MQvu7PWDdGNwgnZhg3VkcIJ2YQ,enr:-J64QDge2jYBQtcNEpRqmKfci5E5BHAhNBjgv4WSdwH1_wPqbueq2bDj38-TSW8asjy5lJj1Xftui6Or8lnaYFCqCI-GAY3d6wf3gmlkgnY0gmlwhCO2D9yHb3BzdGFja4Sx_AQAiXNlY3AyNTZrMaEDo4aCTq7pCEN8om9U5n_VyWdambGnQhwHNwKc8o-OicaDdGNwgnZhg3VkcIJ2YQ \
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/blast-optimism.service
Start blast-optimism
Copy sudo nano /etc/systemd/system/blast-optimism.service #make changes in blast-optimism service file
sudo systemctl daemon-reload #refresh systemd configuration when changes made
sudo systemctl enable blast-optimism.service #enable blast-optimism service at system startup
sudo systemctl start blast-optimism.service #start blast-optimism
Monitor the logs for errors
Copy sudo journalctl -fu blast-optimism.service #follow logs of blast-optimism service
sudo journalctl -fu blast-geth.service #follow logs of blast-geth service
Run curl
command in the terminal to check the status of your node
Copy curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
-H "Content-Type: application/json" http://localhost:8545
References