August 8, 2024
0g Full Node Setup Guide
Update Server
sudo apt update sudo apt install curl git jq build-essential gcc unzip wget lz4 -y
Install Gode
cd $HOME && \ ver="1.21.3" && \ 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" >> $HOME/.bash_profile && \ source $HOME/.bash_profile
Install evmosd binary
git clone -b v0.1.0 https://github.com/0glabs/0g-chain.git ./0g-chain/networks/testnet/install.sh source .profile
Set Variables (don't forget to personalize them)
echo 'export MONIKER="Your Moniker Name"' >> ~/.bash_profile echo 'export CHAIN_ID="zgtendermint_16600-1"' >> ~/.bash_profile echo 'export WALLET_NAME="wallet"' >> ~/.bash_profile echo 'export RPC_PORT="26657"' >> ~/.bash_profile source $HOME/.bash_profile
Initialize the Node
cd $HOME 0gchaind config chain-id $CHAIN_ID 0gchaind init $MONIKER --chain-id $CHAIN_ID 0gchaind config node tcp://localhost:$RPC_PORT 0gchaind config keyring-backend os
Install Current Release
wget -P ~/.0gchain/config https://github.com/0glabs/0g-chain/releases/download/v0.1.0/genesis.json
Configure config.toml
file
PEERS="" && \ 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 -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.0gchain/config/config.toml
Set the config
EXTERNAL_IP=$(wget -qO- eth0.me) \ PROXY_APP_PORT=26658 \ P2P_PORT=26656 \ PPROF_PORT=6060 \ API_PORT=1317 \ GRPC_PORT=9090 \ GRPC_WEB_PORT=9091
Set the Port Pruning & Price
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
sed -i.bak -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.0gchain/config/app.toml sed -i.bak -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.0gchain/config/app.toml sed -i.bak -e "s/^pruning-interval *=.*/pruning-interval = \"10\"/" $HOME/.0gchain/config/app.toml
sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0ua0gi\"/" $HOME/.0gchain/config/app.toml
sed -i "s/^indexer *=.*/indexer = \"kv\"/" $HOME/.0gchain/config/config.toml
Create a Service File
sudo tee /etc/systemd/system/ogd.service > /dev/null <<EOF [Unit] Description=OG Node After=network.target [Service] User=$USER Type=simple ExecStart=$(which 0gchaind) start --home $HOME/.0gchain Restart=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Start Node
sudo systemctl daemon-reload && \ sudo systemctl enable ogd && \ sudo systemctl restart ogd && sudo journalctl -u ogd -f -o cat
Wait a bit until you get the logs. To get out of them press Ctrl+C
.
Install Addrbook
curl -Ls https://snapshots.liveraven.net/snapshots/testnet/zero-gravity/addrbook.json > $HOME/.0gchain/config/addrbook.json
Update Peers
PEERS=$(curl -s --max-time 3 --retry 2 --retry-connrefused "https://snapshots.liveraven.net/snapshots/testnet/zero-gravity/peers.txt") if [ -z "$PEERS" ]; then echo "No peers were retrieved from the URL." else echo -e "\nPEERS: "$PEERS"" sed -i "s/^persistent_peers *=.*/persistent_peers = "$PEERS"/" "$HOME/.0gchain/config/config.toml" echo -e "\nConfiguration file updated successfully.\n" fi
Install Snapshot
sudo systemctl stop ogd cp $HOME/.0gchain/data/priv_validator_state.json $HOME/.0gchain/priv_validator_state.json.backup rm -rf $HOME/.0gchain/data curl -L http://snapshots.liveraven.net/snapshots/testnet/zero-gravity/zgtendermint_16600-1_latest.tar.lz4 | tar -Ilz4 -xf - -C $HOME/.0gchain mv $HOME/.0gchain/priv_validator_state.json.backup $HOME/.0gchain/data/priv_validator_state.json sudo systemctl restart ogd && sudo journalctl -u ogd -f -o cat
Check Node Synchronization
0gchaind status | jq .sync_info
If you get false
, you can install the validator. If it is true
, you have to wait. You can also compare the height of your node with explorer.
Create the Validator
Create a wallet for our validator:
0gchaind keys add $WALLET_NAME --eth # You may also import an existing wallet 0gchaind keys add --recover $WALLET_NAME --eth
Request private key of the EVM address
0gchaind keys unsafe-export-eth-key $WALLET_NAME
Copy address and import in Metamask
Request Tokens
Now, we go to the faucet and request test tokens
Checking the balance in the terminal
0gchaind q bank balances $(0gchaind keys show $WALLET_NAME -a)
To join an active set, you need at least 10000000000000000000aevmos
Create the validator
0gchaind tx staking create-validator \ --amount=1000000ua0gi \ --pubkey=$(0gchaind tendermint show-validator) \ --moniker="$MONIKER" \ --chain-id=zgtendermint_16600-1 \ --commission-rate="0.10" \ --commission-max-rate="0.20" \ --commission-max-change-rate="0.01" \ --details="Your Details" \ --min-self-delegation="1" \ --from=$WALLET_NAME \ --website="link-to-your-website" \ --identity="Your Identity" \ --gas=auto \ --gas-adjustment=1.4
Delegate tokens
0gchaind q staking validator $(0gchaind keys show $WALLET_NAME --bech val -a)
Delegating to another validator
0gchaind tx staking delegate <validator address> --from <wallet> <amount>ua0gi --gas=auto --gas-adjustment=1.4 -y