Skip to content

Install ZetaChain

0.0 System Specs

For full of official document, you can check at here

HardwareRequirement
CPU4 Cores
RAM16 GB
Disk300+ GB Data Disk

1.0 Prepare

OS: Debian/Ubuntu

bash
sudo apt-get update
sudo apt-get install -y git curl build-essential libssl-dev libc6 libc6-dev cmake ca-certificates gnupg pkg-config clang git-lfs \
  snapd protobuf-compiler jq zstd lz4 lzma zip unzip \
  libbz2-dev libreadline-dev liblzma-dev libsqlite3-dev \
  libboost-all-dev libcap-dev \
  screen htop net-tools

sudo tee /usr/bin/checkport > /dev/null <<EOF
#!/bin/sh 
sudo lsof -i -P -n | grep LISTEN
EOF
sudo chmod +x /usr/bin/checkport

1.1 Install Golang

bash
sudo snap install go --classic

if ! grep -q 'export PATH=$PATH:~/go/bin' ~/.bashrc; then
    echo "Adding ~/go/bin to PATH in ~/.bashrc..."
    echo 'export PATH=$PATH:~/go/bin' >> ~/.bashrc
fi
source $HOME/.bashrc

2. zetacored

bash
cd ~

wget https://github.com/zeta-chain/node/releases/download/v27.0.2/zetacored-linux-amd64
sudo chmod +x zetacored-linux-amd64
sudo mv zetacored-linux-amd64 /usr/bin/zetacored

zetacored version
# 27.0.0

3.1 cosmovisor

bash
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@latest

export DAEMON_NAME="zetacored"
export DAEMON_HOME="$HOME/.zetacored"

cosmovisor init $(which zetacored)

3.2 Add upgrade (option)

https://www.zetachain.com/docs/reference/network/proposals

bash
export VERSION="v27"
export BIN_URL="https://github.com/zeta-chain/node/releases/download/$VERSION.0.4/zetacored-linux-amd64"
mkdir -p $HOME/.zetacored/cosmovisor/upgrades/$VERSION/bin
wget -O $HOME/.zetacored/cosmovisor/upgrades/$VERSION/bin/zetacored $BIN_URL
chmod +x $HOME/.zetacored/cosmovisor/upgrades/$VERSION/bin/zetacored

4. Init

Mainnet

bash
# Set node configuration
zetacored config chain-id zetachain_7000-1
zetacored config node tcp://localhost:26657

# Initialize the node
export MONIKER=p10node
zetacored init $MONIKER --chain-id zetachain_7000-1


# Download genesis and configs
wget https://raw.githubusercontent.com/zeta-chain/network-config/main/mainnet/genesis.json -O ~/.zetacored/config/genesis.json
wget https://raw.githubusercontent.com/zeta-chain/network-config/main/mainnet/client.toml -O ~/.zetacored/config/client.toml
wget https://raw.githubusercontent.com/zeta-chain/network-config/main/mainnet/config.toml -O ~/.zetacored/config/config.toml
wget https://raw.githubusercontent.com/zeta-chain/network-config/main/mainnet/app.toml -O ~/.zetacored/config/app.toml

sed -i -e "s|^moniker *=.*|moniker = \"$MONIKER\"|" $HOME/.zetacored/config/config.toml

# Add seeds
seeds="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:27156,[email protected]:1550,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656"
sed -i -e "s|^seeds *=.*|seeds = \"$seeds\"|" $HOME/.zetacored/config/config.toml
sed -i -e "s|^persistent_peers *=.*|persistent_peers = \"$seeds\"|" $HOME/.zetacored/config/config.toml

# 
curl -Ls https://files.p10node.com/zeta/addrbook.json > $HOME/.zetacored/config/addrbook.json


# Set minimum gas price
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"10aNGL\"|" $HOME/.zetacored/config/app.toml

# Set pruning
sed -i \
  -e 's|^pruning *=.*|pruning = "custom"|' \
  -e 's|^pruning-keep-recent *=.*|pruning-keep-recent = "5000"|' \
  -e 's|^pruning-keep-every *=.*|pruning-keep-every = "500"|' \
  -e 's|^pruning-interval *=.*|pruning-interval = "10"|' \
  $HOME/.zetacored/config/app.toml

# disable indexing
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.zetacored/config/config.toml

# Enable Prometheus Metrics
sed -i 's/prometheus = false/prometheus = true/g' ~/.zetacored/config/config.toml

Change File Limits

bash
sudo tee -a /etc/security/limits.conf > /dev/null <<EOF
*       soft    nproc   262144
*       hard    nproc   262144
*       soft    nofile  262144
*       hard    nofile  262144
EOF

sudo tee -a /etc/sysctl.conf > /dev/null <<EOF
fs.file-max=262144
EOF

5. Service

bash
sudo tee /etc/systemd/system/zetacored.service > /dev/null << EOF
[Unit]
Description=zetacored node service
After=network-online.target

[Service]
User=$USER
Environment="DAEMON_NAME=zetacored"
Environment="DAEMON_HOME=$HOME/.zetacored"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="DAEMON_DATA_BACKUP_DIR=$HOME/.zetacored"
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Service Control

bash
# when change service
sudo systemctl daemon-reload
sudo systemctl enable zetacored
sudo systemctl restart zetacored

# check status
sudo systemctl status zetacored

# start service
sudo systemctl start zetacored

# stop service
sudo systemctl stop zetacored

# disable auto launch at boot
sudo systemctl disable zetacored

# check logs
sudo journalctl -u zetacored -f --no-hostname -o cat

Backup

bash
scp -r root@ngl:/root/.zetacored/config/node_key.json node_key.json
scp -r root@ngl:/root/.zetacored/config/priv_validator_key.json priv_validator_key.json

6. Snapshot

bash
# Back up priv_validator_state.json if needed
sudo systemctl stop zetacored

cp $HOME/.zetacored/data/priv_validator_state.json $HOME/.zetacored/priv_validator_state.json.backup

# Clean DB
zetacored tendermint unsafe-reset-all --home $HOME/.zetacored --keep-addr-book

# Download Latest Snapshot
curl -L https://files.p10node.com/zeta/latest.tar.lz4 | tar -Ilz4 -xf - -C $HOME/.zetacored

# Replace with the backed-up priv_validator_state.json
mv $HOME/.zetacored/priv_validator_state.json.backup $HOME/.zetacored/data/priv_validator_state.json

# Restart service
sudo systemctl restart zetacored
sudo journalctl -u zetacored -f --no-hostname -o cat

7. Status

bash
curl http://localhost:26657/status | jq