Storage Node

1. Install dependencies for building from source

sudo apt-get updatesudo apt-get install clang cmake build-essential openssl pkg-config libssl-dev

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

3. install rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. "$HOME/.cargo/env"

4. Download and install binary

Note

Upgrade new version without remove node. Please check page below!Upgrade node

If you want remove the node and install from scratch:

cd $HOMErm -rf 0g-storage-nodegit clone https://github.com/0glabs/0g-storage-node.gitcd 0g-storage-nodegit checkout v0.8.4git submodule update --init

Build:

cargo build --release

5. Config:

You can download my sample config

https://josephtran.co/config-testnet-turbo.toml

#download configwget -O $HOME/0g-storage-node/run/config-testnet-turbo.toml https://josephtran.co/config-testnet-turbo.toml

6. Set your miner key:

  • Define varible

# The input will be hidden from the screen for securityprintf '\033[34mEnter your private key: \033[0m' && read -s PRIVATE_KEY
  • Set miner_key:

sed -i 's|^\s*#\?\s*miner_key\s*=.*|miner_key = "'"$PRIVATE_KEY"'"|' $HOME/0g-storage-node/run/config-testnet-turbo.toml && echo -e "\033[32mPrivate key has been successfully added to the config file.\033[0m"

7. Verifying Configuration Changes

To check if the configuration has been updated correctly

grep -E "^(network_dir|network_enr_address|network_enr_tcp_port|network_enr_udp_port|network_libp2p_port|network_discovery_port|rpc_listen_address|rpc_enabled|db_dir|log_config_file|log_contract_address|mine_contract_address|reward_contract_address|log_sync_start_block_number|blockchain_rpc_endpoint|auto_sync_enabled|find_peer_timeout)" $HOME/0g-storage-node/run/config-testnet-turbo.toml

8. create service

sudo tee /etc/systemd/system/zgs.service > /dev/null <<EOF[Unit]Description=ZGS NodeAfter=network.target
[Service]User=$USERWorkingDirectory=$HOME/0g-storage-node/runExecStart=$HOME/0g-storage-node/target/release/zgs_node --config $HOME/0g-storage-node/run/config-testnet-turbo.tomlRestart=on-failureRestartSec=10LimitNOFILE=65535
[Install]WantedBy=multi-user.targetEOF

9. Start node

sudo systemctl daemon-reload && \sudo systemctl enable zgs && \sudo systemctl restart zgs && \sudo systemctl status zgs

10. Check log

  • Full log:

tail -f ~/0g-storage-node/run/log/zgs.log.$(TZ=UTC date +%Y-%m-%d)
  • tx_seq log:

tail -f ~/0g-storage-node/run/log/zgs.log.$(TZ=UTC date +%Y-%m-%d) | grep tx_seq
  • Monitoring 0g-storage-node Logs without Network and Peer Messages:

tail -f ~/0g-storage-node/run/log/zgs.log.$(date +%Y-%m-%d) | grep -v "discv5\|network\|router\|Peer"
  • logSync & Peers through RPC:

while true; do    response=$(curl -s -X POST http://localhost:5678 -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"zgs_getStatus","params":[],"id":1}')    logSyncHeight=$(echo $response | jq '.result.logSyncHeight')    connectedPeers=$(echo $response | jq '.result.connectedPeers')    echo -e "logSyncHeight: \033[32m$logSyncHeight\033[0m, connectedPeers: \033[34m$connectedPeers\033[0m"    sleep 5;done

# Use snapshot:

You can use my snapshot to sync faster

Fresh snapshot link

# Stop & Delete node

sudo systemctl stop zgs
sudo systemctl disable zgssudo rm /etc/systemd/system/zgs.servicerm -rf $HOME/0g-storage-node

Last updated