# GUIDE 0G LABS RUNNIG NODE

By [Quitlantarah](https://paragraph.com/@quitlantarah) · 2024-07-10

---

Installation
------------

Validator Node

This document outlines the steps to deploy your own validator node.

### Step 1: Install required packages

    sudo apt update && \
    sudo apt install curl git jq build-essential gcc unzip wget lz4 -y
    

### Step 2: Install Go

    cd $HOME && \
    ver="1.22.0" && \
    wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \
    sudo rm -rf /usr/local/go && \
    sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \
    rm "go$ver.linux-amd64.tar.gz" && \
    echo "export PATH=\$PATH:/usr/local/go/bin:\$HOME/go/bin" >> ~/.bash_profile && \
    source ~/.bash_profile && \
    go version
    

### Step 3: Build 0gchaind binary

    git clone -b v0.1.0 https://github.com/0glabs/0g-chain.git
    cd 0g-chain
    make install
    0gchaind version
    

### Step 4: Set up variables

    echo 'export MONIKER=""' >> ~/.bash_profile
    echo 'export CHAIN_ID="zgtendermint_16600-1"' >> ~/.bash_profile
    echo 'export WALLET_NAME="wallet"' >> ~/.bash_profile
    echo 'export RPC_PORT="36657"' >> ~/.bash_profile
    source $HOME/.bash_profile
    

### Step 5: Initialize the node

    cd $HOME
    0gchaind init $MONIKER --chain-id $CHAIN_ID
    0gchaind config chain-id $CHAIN_ID
    0gchaind config node tcp://localhost:$RPC_PORT
    0gchaind config keyring-backend os
    

### Step 6: Download genesis.json

    wget https://github.com/0glabs/0g-chain/releases/download/v0.1.0/genesis.json -O $HOME/.0gchain/config/genesis.json
    

### Step 7: Add seeds and peers to the config.toml

    SEEDS="c4d619f6088cb0b24b4ab43a0510bf9251ab5d7f@54.241.167.190:26656,44d11d4ba92a01b520923f51632d2450984d5886@54.176.175.48:26656,f2693dd86766b5bf8fd6ab87e2e970d564d20aff@54.193.250.204:26656,f878d40c538c8c23653a5b70f615f8dccec6fb9f@54.215.187.94:26656"
    sed -i.bak -e "s/^seeds *=.*/seeds = \"${SEEDS}\"/" $HOME/.0gchain/config/config.toml
    

### Step 8: Change ports

    EXTERNAL_IP=$(wget -qO- eth0.me)
    PROXY_APP_PORT=36657
    P2P_PORT=36656
    PPROF_PORT=6062
    API_PORT=1319
    GRPC_PORT=9092
    GRPC_WEB_PORT=9093
    sed -i \
        -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$PROXY_APP_PORT\"/" \
        -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$RPC_PORT\"/" \
        -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$PPROF_PORT\"/" \
        -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$P2P_PORT\"/}" \
        -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$P2P_PORT\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$P2P_PORT\"/}" \
        $HOME/.0gchain/config/config.toml
    sed -i \
        -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$API_PORT\4/}" \
        -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$GRPC_PORT\4/}" \
        -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$GRPC_WEB_PORT\4/}" \
        $HOME/.0gchain/config/app.toml
    

### Step 9: Configure pruning to save storage (Optional)

    sed -i \
        -e "s/^pruning *=.*/pruning = \"custom\"/" \
        -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" \
        -e "s/^pruning-interval *=.*/pruning-interval = \"10\"/" \
        "$HOME/.0gchain/config/app.toml"
    

### Step 10: Set min gas price

    sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0ua0gi\"/" $HOME/.0gchain/config/app.toml
    

### Step 11: Enable indexer (Optional)

    sed -i "s/^indexer *=.*/indexer = \"kv\"/" $HOME/.0gchain/config/config.toml
    

### Step 12: Create a service file

    sudo tee /etc/systemd/system/0gd.service > /dev/null <<EOF
    [Unit]
    Description=0G Node
    After=network.target
    
    [Service]
    User=root
    Type=simple
    ExecStart=$(which 0gchaind) start --home $HOME/.0gchain
    Restart=on-failure
    LimitNOFILE=65535
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

### Step 13: Start the node

    sudo systemctl daemon-reload && \
    sudo systemctl enable 0gd && \
    sudo systemctl restart 0gd && \
    sudo journalctl -u 0gd -f -o cat
    

### Step 14: Create Validator

    0gchaind tx staking create-validator \
      --amount=1000000ua0gi \
      --pubkey=$(0gchaind tendermint show-validator) \
      --moniker="your_moniker" \
      --identity="keybas" \
      --chain-id=zgtendermint_16600-1 \
      --commission-rate="0.10" \
      --commission-max-rate="0.20" \
      --commission-max-change-rate="0.01" \
      --details="the validator" \
      --min-self-delegation="1" \
      --from=<address> \
      --gas=auto \
      --gas-adjustment=1.4
    

### Step 15: Delegate

    0gchaind tx staking delegate \
      $(0gchaind keys show (your_address) --bech val -a) \
      x000000ua0gi \
      --from (your_address) \
      --chain-id zgtendermint_16600-1 \
      --gas=auto \
      --gas-adjustment=1.4
    

[https://x.com/Quitlantarah](https://x.com/Quitlantarah)

[https://mirror.xyz/0x053d1ec37b27325f0ACCbC577de2189da98b9750](https://mirror.xyz/0x053d1ec37b27325f0ACCbC577de2189da98b9750)

[https://linktr.ee/Quitlantarah](https://linktr.ee/Quitlantarah)

[https://discordapp.com/users/846845744631119914/](https://discordapp.com/users/846845744631119914/)

---

*Originally published on [Quitlantarah](https://paragraph.com/@quitlantarah/guide-0g-labs-runnig-node)*
