Manual Installation
# install dependencies, if needed
sudo apt update && sudo apt upgrade -y
sudo apt install curl git wget htop tmux build-essential jq make lz4 gcc unzip -y
# install go, if needed
cd $HOME
VER="1.22.2"
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"
[ ! -f ~/.bash_profile ] && touch ~/.bash_profile
echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile
source $HOME/.bash_profile
[ ! -d ~/go/bin ] && mkdir -p ~/go/bin
# set vars
echo "export WALLET="wallet"" >> $HOME/.bash_profile
echo "export MONIKER="test"" >> $HOME/.bash_profile
echo "export INITIA_CHAIN_ID="initiation-2"" >> $HOME/.bash_profile
echo "export INITIA_PORT="51"" >> $HOME/.bash_profile
source $HOME/.bash_profile
# download binary
cd $HOME
rm -rf initia
git clone https://github.com/initia-labs/initia.git
cd initia
git checkout v1.1.2
make install
# config and init app
initiad init $MONIKER
initiad config set client chain-id initiation-2
initiad config set client node tcp://localhost:${INITIA_PORT}657
sed -i -e "s|^node *=.*|node = \"tcp://localhost:${INITIA_PORT}657\"|" $HOME/.initia/config/client.toml
# download genesis and addrbook
wget -O $HOME/.initia/config/genesis.json https://server-1.itrocket.net/testnet/initia/genesis.json
wget -O $HOME/.initia/config/addrbook.json https://server-1.itrocket.net/testnet/initia/addrbook.json
# set seeds and peers
SEEDS="cd69bcb00a6ecc1ba2b4a3465de4d4dd3e0a3db1@initia-testnet-seed.itrocket.net:51656"
PEERS="67b58592de11a6885d71d3ea436dc284b816caa3@initia-testnet-peer.itrocket.net:51656,015978fcab6f546fff3c8af6eb965722699390ca@35.198.209.157:26656,13a78fa3ed19a85a258cc8cca2505004d661d309@84.32.71.25:26656,c558a01b9fc349a07f748b50953360b5e71feae4@207.244.229.222:26656,8eaa6a0d98810570798e10d54cf1da75fe7c0abb@72.251.3.24:56116,d05f09bce4bec336548f87ce3a6ff133b9dc99d0@193.84.3.28:25756,df43fc76e4332f6b37ff6b714924ae1cc87191fa@164.68.115.64:26656,535d7e5ab93c2b3c52f7874782cd824ea703f89f@37.120.245.142:26023,9c3d502c91f7834dac035ae7ea3f6dd6fde00769@63.177.102.188:26656,016489c0258f38fe68f71c0d657325568197ef5a@34.87.185.37:26656,3eb8e8bc841752248a6e894a6fce3f79eaf77646@34.126.140.245:26656"
sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" \
-e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" \
$HOME/.initia/config/config.toml
# set custom ports in app.toml
sed -i.bak -e "s%:1317%:${INITIA_PORT}317%g;
s%:8080%:${INITIA_PORT}080%g;
s%:9090%:${INITIA_PORT}090%g;
s%:9091%:${INITIA_PORT}091%g;
s%:8545%:${INITIA_PORT}545%g;
s%:8546%:${INITIA_PORT}546%g;
s%:6065%:${INITIA_PORT}065%g" $HOME/.initia/config/app.toml
# set custom ports in config.toml file
sed -i.bak -e "s%:26658%:${INITIA_PORT}658%g;
s%:26657%:${INITIA_PORT}657%g;
s%:6060%:${INITIA_PORT}060%g;
s%:26656%:${INITIA_PORT}656%g;
s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${INITIA_PORT}656\"%;
s%:26660%:${INITIA_PORT}660%g" $HOME/.initia/config/config.toml
# config pruning
sed -i -e "s/^pruning *=.*/pruning = \"custom\"/" $HOME/.initia/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" $HOME/.initia/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"50\"/" $HOME/.initia/config/app.toml
# set minimum gas price, enable prometheus and disable indexing
sed -i 's|minimum-gas-prices =.*|minimum-gas-prices = "0.015uinit"|g' $HOME/.initia/config/app.toml
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.initia/config/config.toml
sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.initia/config/config.toml
# create service file
sudo tee /etc/systemd/system/initiad.service > /dev/null <<EOF
[Unit]
Description=Initia node
After=network-online.target
[Service]
User=$USER
WorkingDirectory=$HOME/.initia
ExecStart=$(which initiad) start --home $HOME/.initia
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# reset and download snapshot
initiad tendermint unsafe-reset-all --home $HOME/.initia
if curl -s --head curl https://server-1.itrocket.net/testnet/initia/initia_2025-06-12_10049296_snap.tar.lz4 | head -n 1 | grep "200" > /dev/null; then
curl https://server-1.itrocket.net/testnet/initia/initia_2025-06-12_10049296_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.initia
else
echo "no snapshot found"
fi
# enable and start service
sudo systemctl daemon-reload
sudo systemctl enable initiad
sudo systemctl restart initiad && sudo journalctl -u initiad -f
Automatic Installation
pruning: custom: 100/0/19 | indexer: nullsource <(curl -s https://itrocket.net/api/testnet/initia/autoinstall/)
Create wallet
Before creating a validator, you need to fund your wallet and check balance. Initia faucet: https://faucet.testnet.initia.xyz/ (opens in a new tab)
initiad query bank balances $WALLET_ADDRESS
# to create a new wallet, use the following command. don’t forget to save the mnemonic
initiad keys add $WALLET
# to restore exexuting wallet, use the following command
initiad keys add $WALLET --recover
# save wallet and validator address
WALLET_ADDRESS=$(initiad keys show $WALLET -a)
VALOPER_ADDRESS=$(initiad keys show $WALLET --bech val -a)
echo "export WALLET_ADDRESS="$WALLET_ADDRESS >> $HOME/.bash_profile
echo "export VALOPER_ADDRESS="$VALOPER_ADDRESS >> $HOME/.bash_profile
source $HOME/.bash_profile
# check sync status. if node is fully synced the "catching_up" variable will be "false"
initiad status 2>&1 | jq
Node Sync Status Checker
#!/bin/bash
rpc_port=$(grep -m 1 -oP '^laddr = "\K[^"]+' "$HOME/.initia/config/config.toml" | cut -d ':' -f 3)
while true; do
local_height=$(curl -s localhost:$rpc_port/status | jq -r '.result.sync_info.latest_block_height')
network_height=$(curl -s https://initia-testnet-rpc.itrocket.net/status | jq -r '.result.sync_info.latest_block_height')
if ! [[ "$local_height" =~ ^[0-9]+$ ]] || ! [[ "$network_height" =~ ^[0-9]+$ ]]; then
echo -e "\033[1;31mError: Invalid block height data. Retrying...\033[0m"
sleep 5
continue
fi
blocks_left=$((network_height - local_height))
if [ "$blocks_left" -lt 0 ]; then
blocks_left=0
fi
echo -e "\033[1;33mNode Height:\033[1;34m $local_height\033[0m \033[1;33m| Network Height:\033[1;36m $network_height\033[0m \033[1;33m| Blocks Left:\033[1;31m $blocks_left\033[0m"
sleep 5
done
Create validator
Don't forget to replace, Moniker, Identity, Details, Amount, apell, Commission rate, Commission max rate, Commission max change rate, Websiteinitiad tx mstaking create-validator \
--amount 1000000uinit \
--from $WALLET \
--commission-rate 0.1 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.01 \
--pubkey $(initiad tendermint show-validator) \
--moniker "test" \
--identity "" \
--website "" \
--details "I love blockchain ❤️" \
--chain-id initiation-2 \
--gas-adjustment 1.6 --gas 2000000 --fees 30000uinit \
-y
Security
To protect you keys please don`t share your privkey, mnemonic and follow basic security rules
Set up ssh keys for authentication You can use this guideto configure ssh authentication and disable password authentication on your server Firewall security Set the default to allow outgoing connections, deny all incoming, allow ssh and node p2p port
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh/tcp
sudo ufw allow ${INITIA_PORT}656/tcp
sudo ufw enable
Delete Node
sudo systemctl stop initiad
sudo systemctl disable initiad
sudo rm -rf /etc/systemd/system/initiad.service
sudo rm $(which initiad)
sudo rm -rf $HOME/.initia
sed -i "/INITIA_/d" $HOME/.bash_profile