Skip to content

0G validator node

0G banner”

# Hardware requirements

We recommend the following hardware specifications:

CharacteristicSpecification
Operating SystemUbuntu 18.04 or later LTS
Number of CPUs8
RAM64GB
Storage1TB NVMe SSD
Bandwidth100mps for Download / Upload
System updates
Terminal window
sudo apt update
sudo apt install curl git make jq build-essential gcc unzip wget lz4 aria2 -y
Download Galileo folder
Terminal window
wget https://github.com/0glabs/0gchain-ng/releases/download/v1.0.1/galileo-v1.0.1.tar.gz
Unzip
Terminal window
tar -xzvf galileo-v1.0.1.tar.gz -C $HOME
Copy home directory and set permission
Terminal window
sudo chmod 777 $HOME/galileo/bin/geth
sudo chmod 777 $HOME/galileo/bin/0gchaind
cp $HOME/galileo/bin/geth $HOME/go/bin/geth
cp $HOME/galileo/bin/0gchaind $HOME/go/bin/0gchaind
Terminal window
source $HOME/.bash_profile
geth version
0gchaind version
Variable settings
Terminal window
echo "export WALLET='josephtran'" >> $HOME/.bash_profile
echo "export MONIKER='JosephTran'" >> $HOME/.bash_profile
echo "export OG_PORT='26'" >> $HOME/.bash_profile
source $HOME/.bash_profile
Node init
Terminal window
#Create and copy directory
mkdir -p $HOME/.0gchaind
cp -r $HOME/galileo/0g-home $HOME/.0gchaind
Terminal window
#Init Geth
geth init --datadir $HOME/.0gchaind/0g-home/geth-home $HOME/galileo/genesis.json
Terminal window
#Init 0gchaind
0gchaind init "JosephTran" --home $HOME/.0gchaind/tmp
Terminal window
# Copy node files to 0gchaind home
cp $HOME/.0gchaind/tmp/data/priv_validator_state.json $HOME/.0gchaind/0g-home/0gchaind-home/data/
cp $HOME/.0gchaind/tmp/config/node_key.json $HOME/.0gchaind/0g-home/0gchaind-home/config/
cp $HOME/.0gchaind/tmp/config/priv_validator_key.json $HOME/.0gchaind/0g-home/0gchaind-home/config/
#delete tmp folder
rm -rf $HOME/.0gchaind/tmp
Custom port setting (Optional)
Terminal window
sed -i -e "
s%:26658%:${OG_PORT}658%g;
s%:26657%:${OG_PORT}657%g;
s%:6060%:${OG_PORT}060%g;
s%:26656%:${OG_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${OG_PORT}656\"%;
s%:26660%:${OG_PORT}660%g
" $HOME/.0gchaind/0g-home/0gchaind-home/config/config.toml
Terminal window
sed -i -e "s|^node *=.*|node = \"tcp://localhost:${OG_PORT}657\"|" $HOME/.0gchaind/0g-home/0gchaind-home/config/client.toml
sed -i -e "s|^keyring-backend *=.*|keyring-backend = \"os\"|" $HOME/.0gchaind/0g-home/0gchaind-home/config/client.toml
Config pruning, set gas price, enable prometheus, disable indexer
Terminal window
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"50\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/app.toml
Terminal window
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.0gchaind/0g-home/0gchaind-home/config/config.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.0gchaind/0g-home/0gchaind-home/config/config.toml
Create 0gchaind service file
Terminal window
cat > /etc/systemd/system/0gchaind.service << EOF
[Unit]
Description=0G Chain Daemon
After=network-online.target
[Service]
User=root
ExecStart=$(which 0gchaind) start \\
--rpc.laddr tcp://0.0.0.0:26657 \\
--beacon-kit.kzg.trusted-setup-path=$HOME/galileo/kzg-trusted-setup.json \\
--beacon-kit.engine.jwt-secret-path=$HOME/galileo/jwt-secret.hex \\
--beacon-kit.kzg.implementation=crate-crypto/go-kzg-4844 \\
--beacon-kit.block-store-service.enabled \\
--beacon-kit.node-api.enabled \\
--beacon-kit.node-api.logging \\
--beacon-kit.node-api.address 0.0.0.0:3500 \\
--pruning=custom \\
--home $HOME/.0gchaind/0g-home/0gchaind-home \\
--p2p.seeds b30fb241f3c5aee0839c0ea55bd7ca18e5c855c1@8.218.94.246:26656 \\
--p2p.external_address $(curl -s http://ipv4.icanhazip.com):${OG_PORT}656
Environment=CHAIN_SPEC=devnet
WorkingDirectory=$HOME/galileo
Restart=always
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Create Geth service file
Terminal window
cat > /etc/systemd/system/geth.service << EOF
[Unit]
Description=Go Ethereum Client
After=network-online.target
Wants=network-online.target
[Service]
User=root
ExecStart=$HOME/go/bin/geth \\
--config $HOME/galileo/geth-config.toml \\
--datadir $HOME/.0gchaind/0g-home/geth-home \\
--networkid 80087 \\
--port 30303 \\
--http.port 8645 \\
--authrpc.port 8551
Restart=always
WorkingDirectory=$HOME/galileo
RestartSec=3
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Reload daemon
Terminal window
sudo systemctl daemon-reload && \
sudo systemctl enable 0gchaind
sudo systemctl enable geth.service
Start node
Terminal window
sudo systemctl start 0gchaind
sudo systemctl start geth
  • Check status:
Terminal window
sudo systemctl status 0gchaind
Terminal window
sudo systemctl status geth
  • Check log:
Terminal window
sudo journalctl -fu 0gchaind -o cat
sudo journalctl -fu geth -o cat
Check Latest Block Height
Terminal window
0gchaind status | jq '{ latest_block_height: .sync_info.latest_block_height, catching_up: .sync_info.catching_up }'
Block sync status
Terminal window
while true; do
PORT=$(grep -A 3 '^\[rpc\]' $HOME/.0gchaind/0g-home/0gchaind-home/config/config.toml | grep -oP 'laddr = "tcp://[0-9.:]+:\K\d+')
local=$(curl -s localhost:$PORT/status | jq -r '.result.sync_info.latest_block_height//0')
network=$(curl -s http://8.218.94.246:26657/status | jq -r '.result.sync_info.latest_block_height//0')
left=$((network - local))
echo -e "Local: \033[1;34m$local\033[0m | Network: \033[1;36m$network\033[0m | Left: \033[1;31m$left\033[0m"
sleep 5
done
Remove node:
Terminal window
cd $HOME
sudo systemctl stop 0gchaind geth
sudo systemctl disable 0gchaind geth
sudo rm /etc/systemd/system/0gchaind.service
sudo rm /etc/systemd/system/geth.service
sudo systemctl daemon-reload
sudo rm -f $(which 0gchaind)
sudo rm -rf $HOME/.0gchaind