Skip to content

Install


Chain IDLatest Version TagWasm

Setup validator name

Terminal window
MONIKER="YOUR_MONIKER_GOES_HERE"

Install dependencies

Update system and install build tools
Terminal window
sudo apt -q update
sudo apt -qy install curl git jq lz4 build-essential
sudo apt -qy upgrade
Install file2ban

more here and here

Terminal window
# set and copy the config that will have higher priority
sudo apt install fail2ban -y && \
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \
sudo nano /etc/fail2ban/jail.local
# uncomment and add your IP: ignoreip = 127.0.0.1.1/8 ::1 [ip]
sudo systemctl restart fail2ban
# check status
sudo systemctl status fail2ban
# check which jails are active (by default only sshd)
sudo fail2ban-client status
# check sshd statistics
sudo fail2ban-client status sshd
# look at the logs
sudo tail /var/log/fail2ban.log
# stop work and remove from autoloading
\#sudo systemctl stop fail2ban && sudo systemctl disable fail2ban
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)

Download and build binaries

Terminal window
# Clone project repository
cd $HOME
rm -rf _repo_name_
git clone _repo_path_
cd _repo_name_
git checkout _project_version_
# Build binaries
make build
# Prepare binaries for Cosmovisor
mkdir -p $HOME/._project_name_/cosmovisor/genesis/bin
mv build/_project_bin_ $HOME/._project_name_/cosmovisor/genesis/bin/
rm -rf build
Terminal window
# Create application symlinks
sudo ln -s $HOME/._project_name_/cosmovisor/genesis $HOME/._project_name_/cosmovisor/current -f
sudo ln -s $HOME/._project_name_/cosmovisor/current/bin/_project_bin_ /usr/local/bin/_project_bin_ -f

Install Cosmovisor and create a service

Terminal window
# Download and install Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0
Terminal window
# Create service
sudo tee /etc/systemd/system/_project_name_.service > /dev/null << EOF
[Unit]
Description=_project_name_ node service
After=network-online.target
[Service]
User=$USER
WorkingDirectory=$HOME/._project_name_/
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/._project_name_"
Environment="DAEMON_NAME=_project_bin_"
Environment="UNSAFE_SKIP_BACKUP=true"
Environment="DAEMON_RESTART_AFTER_UPGRADE=true"
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$HOME/._project_name_/cosmovisor/current/bin"
[Install]
WantedBy=multi-user.target
EOF
Terminal window
sudo systemctl daemon-reload && sudo systemctl enable _project_name_.service

Initialize the node

Terminal window
# Set node configuration
_project_bin_ config chain-id _chain_id_
_project_bin_ config keyring-backend file
_project_bin_ config node tcp://localhost:26657
# Initialize the node
_project_bin_ init $MONIKER --chain-id _chain_id_
# Download genesis and addrbook
curl -Ls _url_genesis_ > $HOME/._project_name_/config/genesis.json
curl -Ls _url_adrbook_ > $HOME/._project_name_/config/addrbook.json
# Add peers
sed -i 's/persistent_peers = ""/persistent_peers = "ffc1e151f71699f6fa77e71a7f22e6f10e2d9ad6@154.38.163.210:19156,6448335ccd15c8a620d9f1f51d24d15712c62c86@194.163.183.68:13356,052d1e10f9b7fdc66faec173e50583c6d3b23789@88.99.68.249:19956,92fa5081f7114a0e5bd355acb5ba9822d7175de0@93.159.130.42:30656,e726816f42831689eab9378d5d577f1d06d25716@169.155.171.209:26656,ebacd3e666003397fb685cd44956d33419219950@141.95.11.196:26656,ebc272824924ea1a27ea3183dd0b9ba713494f83@185.16.39.158:27066,94bc6b515853489f13f8e497b5a8652e22d49f73@193.34.213.153:56656,6a9a65d92b4820a5d198dd95743aa3059d0d3d4c@165.154.224.92:26656,b241eb864ad3ccbd2da7e4e2b045af5b82e7f939@15.235.218.17:56656,d3a676010a7b0f74b3964786c754809ffef97219@64.20.41.34:56656,5d6720f10d07b1e794a77ccba46c192dbb0da988@65.109.111.38:36656,1824eaefd008e559eef27ced79e238bd991dc060@65.108.234.137:19956,24dcc54774d47b6f0c001bf8ba4da84e367087ab@86.111.48.76:26656,301407730c435ea5d613fd0111fd757d691b5a76@65.109.115.172:19956,69dda98c1b9407e720650099426349aeda2babd3@15.235.14.52:56656,2aa5bcf252d9bc64ac0a95d1dbb8ab0dac003c1a@172.245.232.6:20656,064546c2f88975ce5ba457535eb3634bb5795264@5.9.95.101:29156,1105d3a3384edaa450f4f63c2b1ff08d366ee256@159.203.86.102:26656,32acafd43b44015cd9cecdac15dcead023893c70@67.220.85.202:13656,023496104b7468f0e5605446f70695cb5b113ee1@167.235.102.45:19656,bffdd10c2b1b3cfd92a5d94ee70af68371fefd1e@37.142.120.100:26656,2b0daf7ab2976dc5bf2702c0fd3fffad6f62d5e2@65.109.93.17:37656,49a4a4ec3a483678516584f3e045f65f617bd735@185.230.138.107:14456,7dc0849e5c23cb645a27c1524ba50d7c1c69b87f@82.208.21.51:19156,8a60591f74bb0ec214b09e734c4f99083f62f6ff@116.202.156.139:26726,159febd5beb4be2bbd5cd754dfeeaa0167fe8a71@173.234.17.129:26656,3690cf931dd6b2c49e49f781e5163e3acf7f4767@88.198.27.51:61156,4e7287edbe645693f8c8e17cddd7ccc0ee28b50d@65.108.225.207:49656,8d28c38d956384510558664f5897a383b7529699@136.243.95.31:29156,85f7b157f6bdf0f6f6cc8b40c135eb52f1d7b252@93.190.142.237:26656,a5e5e2971721803e2297c870adacb234a724fc87@193.34.212.100:8256,6cb93b4e1f02b0b88105bf496b872169f6888953@169.155.168.77:26656,2192db23b36a36f4f2984892bce8a1d500667089@189.1.170.86:55676,dad9949b995903d394ca19ede3c1ec5c9b5a7a4b@194.233.72.43:40004,ab7e3d7dfb5f5e62a4dfc4e99a041658b1971aa6@168.119.15.219:12556,19822a55dcd3b5a4e8a4d4911d0b78e001b93cf7@142.132.253.112:28656"/' config.toml
# Set minimum gas price
sed -i -e "s|^minimum-gas-prices _=._|minimum-gas-prices = \"_min_gas__utoken_\"|" $HOME/._project_name_/config/app.toml
# Set pruning
sed -i \
-e 's|^pruning _=._|pruning = "custom"|' \
-e 's|^pruning-keep-recent _=._|pruning-keep-recent = "1000"|' \
-e 's|^pruning-keep-every _=._|pruning-keep-every = "0"|' \
-e 's|^pruning-interval _=._|pruning-interval = "10"|' \
$HOME/._project_name_/config/app.toml
# Set custom ports
sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:14258\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:14257\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:14260\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:14256\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":14266\"%" $HOME/._project_name_/config/config.toml
sed -i -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:14217\"%; s%^address = \":8080\"%address = \":14280\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:14290\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:14291\"%; s%:8545%:14245%; s%:8546%:14246%; s%:6065%:14265%" $HOME/._project_name_/config/app.toml
sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 50/g' $HOME/._project_name_/config/config.toml
sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 50/g' $HOME/._project_name_/config/config.toml

Start service and check the logs

Terminal window
sudo systemctl start _project_name_.service && sudo journalctl -u _project_name_.service -f --no-hostname -o cat