Install Storage Node
Chain ID | Latest Version Tag | Wasm |
---|---|---|
Recomended hardware requirements:
Node Type | CPU | RAM | Storage | Bandwich |
---|---|---|---|---|
Install dependencies
Update system and install build tools
sudo apt-get updatesudo apt-get install clang cmake build-essential
Install GO
cd $HOMEver="1.22.5"sudo rm -rf /usr/local/gocurl -Ls https://go.dev/dl/go$ver.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/localeval $(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
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Download and build binaries
# Clone project repositorycd $HOMEgit clone _storage_repo_path_cd $HOME/_storage_repo_name_git fetch --all --tagsgit checkout _storage_version_git submodule update --init
# Build binariessudo apt install cargocargo build --release
Wallet setup
obtain yout wallet’s private key by using this command:
_project_bin_ keys unsafe-export-eth-key [WALLET_NAME]
store your private key in variable:
read -sp "Enter your private key: " PRIVATE_KEY && echo
sudo systemctl daemon-reload && sudo systemctl enable _storage_name_
Update node configuration (use your own JSON RPC endpoint)
sed -i 's|miner_key = ""|miner_key = "'"$PRIVATE_KEY"'"|' $HOME/_storage_repo_name_/run/config.toml
Set environement
# define the current IP address
EXTERNAL_ADDRESS=$(wget -qO- eth0.me)
# other
NETWORK_DIR=$HOME/_storage_repo_name_/run/networkLOG_CONFIG_FILE=$HOME/_storage_repo_name_/run/log_configDB_DIR=$HOME/_storage_repo_name_/run/dbLOG_DIR=$HOME/_storage_repo_name_/run/log
sed -i 's|# network_dir = "network"|network_dir = "'"$NETWORK_DIR"'"|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_enr_address = ""|network_enr_address = "'"$EXTERNAL_ADDRESS"'"|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_enr_tcp_port = 1234|network_enr_tcp_port = 1234|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_enr_udp_port = 1234|network_enr_udp_port = 1234|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_libp2p_port = 1234|network_libp2p_port = 1234|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_discovery_port = 1234|network_discovery_port = 1234|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# network_target_peers = 10|network_targer_peers = 50|' $HOME/_storage_repo_name_/run/config.tomlsed -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.tomlsed -i 's|# log_contract_address = ".*"|log_contract_address = "_storage_log_contract_address_"|' $HOME/_storage_repo_name_/run/config.tomlsed -i 's|# log_sync_start_block_number = 806|log_sync_start_block_number = _storage_sync_start_block_number_|' $HOME/_storage_repo_name_/run/config.tomlsed -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.tomlsed -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.tomlsed -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.tomlsed -i 's|reward_contract_address = ".*"|reward_contract_address = "_storage_reward_contract_address_"|' $HOME/_storage_repo_name_/run/config.toml
Create service
sudo tee /etc/systemd/system/_storage_name_.service > /dev/null <<EOF[Unit]Description=_storage_name_After=network.target
[Service]User=$USERWorkingDirectory=$HOME/_storage_repo_name_/runExecStart=$HOME/_storage_repo_name_/target/release/zgs_node \ --config $HOME/_storage_repo_name_/run/config.tomlRestart=on-failureRestartSec=10LimitNOFILE=65535
[Install]WantedBy=multi-user.targetEOF
Start node
sudo systemctl daemon-reload && \sudo systemctl enable _storage_name_ && \sudo systemctl restart _storage_name_ && \sudo systemctl status _storage_name_
Check logs
# check your log listls ~/_storage_repo_name_/run/log/
# check your last logtail -f ~/_storage_repo_name_/run/log/zgs.log.$(date +%Y-%m-%d)