Storage node

0G Storage is the storage layer for the ZeroGravity data availability (DA) system. The 0G Storage layer holds three important features:

  • Buit-in - It is natively built into the ZeroGravity DA system for data storage and retrieval.

  • General purpose - It is designed to support atomic transactions, mutable kv stores as well as archive log systems to enable wide range of applications with various data types.

  • Incentive - Instead of being just a decentralized database, 0G Storage introduces PoRA mining algorithm to incentivize storage network participants.

Requirements

The minimum hardware requirements for running an Initia node are:

Install Tools

sudo apt-get update
sudo apt-get install clang cmake build-essential curl git jq lz4 aria2 unzip wget

sudo curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.0.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/gobinpath.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | sudo tee /etc/profile.d/gopath.sh)

Clone and Build Storage Node

TAG=v0.3.2
BASE_DIR=/data

cd $BASE_DIR
git clone -b v0.3.2 https://github.com/0glabs/0g-storage-node.git
cd $BASE_DIR/0g-storage-node

git submodule update --init
cargo build --release

Basic Config Setup

BASE_DIR=/data/0g-storage-node
LOG_DIR="$BASE_DIR/run/log"
LOG_CONFIG_FILE="$BASE_DIR/run/log_config"
LOG_SYNC_BLOCK=802
MINE_CONTRACT="0x85F6722319538A805ED5733c5F4882d96F1C7384"
LOG_CONTRACT_ADDRESS="0x8873cc79c5b3b5666535C825205C9a128B1D75F1"
WATCH_LOOP_WAIT_TIME_MS=10000
PUBLIC_IP=   # wget -qO- eth0.me

sed -i '
s|# network_dir = "network"|network_dir = "network"|g
s|# network_enr_tcp_port = 1234|network_enr_tcp_port = 1234|g
s|# network_enr_udp_port = 1234|network_enr_udp_port = 1234|g
s|# network_libp2p_port = 1234|network_libp2p_port = 1234|g
s|# network_discovery_port = 1234|network_discovery_port = 1234|g
s|# rpc_enabled = true|rpc_enabled = true|g
s|# db_dir = "db"|db_dir = "db"|g
s|# log_config_file = "log_config"|log_config_file = "log_config"|g
s|# log_directory = "log"|log_directory = "log"|g
s|network_enr_address = ""|network_enr_address = "'"$PUBLIC_IP"'"|g
s|^log_sync_start_block_number = .*|log_sync_start_block_number = '"$LOG_SYNC_BLOCK"'|g
s|^log_config_file = .*|log_config_file = "'"$LOG_CONFIG_FILE"'"|g
s|^log_directory = .*|log_directory = "'"$LOG_DIR"'"|g
s|^mine_contract_address = .*|mine_contract_address = "'"$MINE_CONTRACT"'"|g
s|^log_contract_address = .*|log_contract_address = "'"$LOG_CONTRACT_ADDRESS"'"|g
s|^watch_loop_wait_time_ms = .*|watch_loop_wait_time_ms = '"$WATCH_LOOP_WAIT_TIME_MS"'|g
' $BASE_DIR/run/config.toml

# change blockchain_rpc_endpoint

BLOCKCHAIN_RPC_ENDPOINT="https://storage.0gnode.xyz/"
sed -i 's|^blockchain_rpc_endpoint = ".*"|blockchain_rpc_endpoint = "'"$BLOCKCHAIN_RPC_ENDPOINT"'"|' $BASE_DIR/run/config.toml

Setup Service

BASE_DIR=/data/0g-storage-node

sudo tee /etc/systemd/system/0gstorage.service > /dev/null << EOF
[Unit]
Description=0g storage service
After=network-online.target

[Service]
User=$USER
Type=simple
ExecStart=$BASE_DIR/target/release/zgs_node --config $BASE_DIR/run/config.toml
Restart=on-failure
WorkingDirectory=$BASE_DIR
SyslogIdentifier=0gstorage
LimitNOFILE=65545

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable 0gstorage.service
sudo systemctl start 0gstorage.service
sudo journalctl -u 0gstorage.service -f -o cat

Last updated