Skip to content

Install Storage Node


Chain IDLatest Version TagWasm

Recomended hardware requirements:

Node TypeCPURAMStorageBandwich

Install dependencies

Update system and install build tools
Terminal window
sudo apt-get update
sudo apt-get install clang cmake build-essential
Install GO
Terminal window
cd $HOME
ver="1.22.5"
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go$ver.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
eval $(echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee /etc/profile.d/golang.sh)
eval $(echo 'export PATH=$PATH:$HOME/go/bin' | tee -a $HOME/.profile)
Install Rust
Terminal window
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Download and build binaries

Terminal window
# Clone project repository
cd $HOME
git clone _storage_repo_path_
cd $HOME/_storage_repo_name_
git fetch --all --tags
git checkout _storage_version_
git submodule update --init
# Build binaries
sudo apt install cargo
cargo build --release

Wallet setup

obtain yout wallet’s private key by using this command:

Terminal window
_project_bin_ keys unsafe-export-eth-key [WALLET_NAME]

store your private key in variable:

Terminal window
read -sp "Enter your private key: " PRIVATE_KEY && echo
Terminal window
sudo systemctl daemon-reload && sudo systemctl enable _storage_name_
Update node configuration (use your own JSON RPC endpoint)
Terminal window
sed -i 's|miner_key = ""|miner_key = "'"$PRIVATE_KEY"'"|' $HOME/_storage_repo_name_/run/config.toml
Set environement
Terminal window
# define the current IP address
EXTERNAL_ADDRESS=$(wget -qO- eth0.me)
# other
NETWORK_DIR=$HOME/_storage_repo_name_/run/network
LOG_CONFIG_FILE=$HOME/_storage_repo_name_/run/log_config
DB_DIR=$HOME/_storage_repo_name_/run/db
LOG_DIR=$HOME/_storage_repo_name_/run/log
Terminal window
sed -i 's|# network_dir = "network"|network_dir = "'"$NETWORK_DIR"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_enr_address = ""|network_enr_address = "'"$EXTERNAL_ADDRESS"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_enr_tcp_port = 1234|network_enr_tcp_port = 1234|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_enr_udp_port = 1234|network_enr_udp_port = 1234|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_libp2p_port = 1234|network_libp2p_port = 1234|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_discovery_port = 1234|network_discovery_port = 1234|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_target_peers = 10|network_targer_peers = 50|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# network_boot_nodes = []|network_boot_nodes = _storage_network_boot_nodes_|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# blockchain_rpc_endpoint = "https://rpc-testnet.0g.ai"|blockchain_rpc_endpoint = "'"$EXTERNAL_ADDRESS"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# log_contract_address = ".*"|log_contract_address = "_storage_log_contract_address_"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# log_sync_start_block_number = 806|log_sync_start_block_number = _storage_sync_start_block_number_|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# confirmation_block_count = 0|confirmation_block_count = _storage_confirmation_block_count_|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# rpc_enabled = false|rpc_enabled = true|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# rpc_listen_address = "0.0.0.0:5678"|rpc_listen_address = "0.0.0.0:5678"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# db_dir = "db"|db_dir = "'"$DB_DIR"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# log_config_file = "log_config"|log_config_file = "'"$LOG_CONFIG_FILE"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|# log_directory = "log"|log_directory = "'"$LOG_DIR"'"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|mine_contract_address = ".*"|mine_contract_address = "_storage_mine_contract_address_"|' $HOME/_storage_repo_name_/run/config.toml
sed -i 's|reward_contract_address = ".*"|reward_contract_address = "_storage_reward_contract_address_"|' $HOME/_storage_repo_name_/run/config.toml

Create service

Terminal window
sudo tee /etc/systemd/system/_storage_name_.service > /dev/null <<EOF
[Unit]
Description=_storage_name_
After=network.target
[Service]
User=$USER
WorkingDirectory=$HOME/_storage_repo_name_/run
ExecStart=$HOME/_storage_repo_name_/target/release/zgs_node \
--config $HOME/_storage_repo_name_/run/config.toml
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF

Start node

Terminal window
sudo systemctl daemon-reload && \
sudo systemctl enable _storage_name_ && \
sudo systemctl restart _storage_name_ && \
sudo systemctl status _storage_name_

Check logs

Terminal window
# check your log list
ls ~/_storage_repo_name_/run/log/
# check your last log
tail -f ~/_storage_repo_name_/run/log/zgs.log.$(date +%Y-%m-%d)