sudo apt -y update
sudo apt -y install curl git jq lz4 build-essential
sudo apt -y upgradeThe required version for proper compilation and operation of the node may change. Please stay updated by following the relevant sources.
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.12.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)Compile lavad. Please check needed version for particular height.
version="v5.3.0"
cd $HOME
rm -rf lava
git clone https://github.com/lavanet/lava.git
cd lava
git checkout $version
export LAVA_BINARY=lavad
make buildMove binaries for systemd and CLI usage
mkdir -p $HOME/.lava/cosmovisor/genesis/bin
mv $HOME/lava/build/lavad $HOME/.lava/cosmovisor/genesis/bin/Initialize the node
lavad config chain-id lava-mainnet-1
lavad config keyring-backend fileSet your moniker instead <YOUR_MONIKER>
lavad init <YOUR_MONIKER> --chain-id lava-mainnet-1Download Genesis
curl -Ls https://raw.githubusercontent.com/lavanet/lava-config/refs/heads/main/mainnet-1/genesis_json/genesis.json > $HOME/.lava/config/genesis.jsonAdd live peers
peers=$(curl -sS https://rpc-lava.theamsolutions.info/net_info | jq -r '.result.peers[] | "(.node_info.id)@(.remote_ip):(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | paste -sd,)
sed -i -e "s|^persistent_peers *=.*|persistent_peers = "$peers"|" $HOME/.lava/config/config.tomlUpdate chain configuration
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = "0.000000001ulava"|" $HOME/.lava/config/app.toml
sed -i -e 's/timeout_commit = ".*"/timeout_commit = "30s"/g' -e 's/timeout_propose = ".*"/timeout_propose = "1s"/g' -e 's/timeout_precommit = ".*"/timeout_precommit = "1s"/g' -e 's/timeout_precommit_delta = ".*"/timeout_precommit_delta = "500ms"/g' -e 's/timeout_prevote = ".*"/timeout_prevote = "1s"/g' -e 's/timeout_prevote_delta = ".*"/timeout_prevote_delta = "500ms"/g' -e 's/timeout_propose_delta = ".*"/timeout_propose_delta = "500ms"/g' -e 's/skip_timeout_commit = ".*"/skip_timeout_commit = false/g' $HOME/.lava/config/config.tomlInstall Cosmovisor
go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.6.0Create links
sudo ln -s $HOME/.lava/cosmovisor/genesis/bin/lavad /usr/local/bin/lavad -f
sudo ln -s $HOME/.lava/cosmovisor/genesis $HOME/.lava/cosmovisor/current -fCreate Cosmovisor Systemd file
sudo tee /etc/systemd/system/lavad.service > /dev/null << EOF
[Unit]
Description="Lava Mainnet Cosmovisor"
After=network-online.target
[Service]
User=$USER
ExecStart=$(which cosmovisor) run start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
Environment="DAEMON_HOME=$HOME/.lava"
Environment="DAEMON_NAME=lavad"
Environment="UNSAFE_SKIP_BACKUP=true"
[Install]
WantedBy=multi-user.target
EOFLaunch Node
sudo systemctl daemon-reload
sudo systemctl enable lavad.service
sudo systemctl restart lavad.serviceCheck status or logs
sudo systemctl status lavad.service
sudo journalctl -u lavad -fn 50 -o catRPC
https://rpc-lava.theamsolutions.infoREST
https://rest-lava.theamsolutions.info xgRPC
grpc-lava.theamsolutions.infoSNAP_RPC="https://rpc-lava.theamsolutions.info"
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$(($LATEST_HEIGHT - 2000)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash); \
echo $LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.lava/config/config.toml; \
wget -qO $HOME/.lava/config/addrbook.json https://arch.snap-lava.theamsolutions.info/addrbook.jsonsudo systemctl stop lavad.service
mv $HOME/.lava/data/priv_validator_stat.json $HOME/pvs-back.json
lavad tendermint unsafe-reset-all
mv $HOME/pvs-back.json $HOME/.lava/data
sudo systemctl restart lavad.serviceStop Lava node
sudo systemctl stop lavad.serviceBackup validator state file and empty path for new snapshot
cp $HOME/.lava/data/priv_validator_state.json $HOME/priv_val-state.json.backup
rm -rf $HOME/.lava/dataCheck latest snapshot and install
LAVA_SNAP=$(curl -s https://snapshots.theamsolutions.info | egrep -o ">lava-snap*.*tar" | tr -d ">")
curl -L https://snapshots.theamsolutions.info/$LAVA_SNAP | tar xf - -C $HOME/.lavaRestore validator state file and launch
mv $HOME/priv_val-state.json.backup $HOME/.lava/data/priv_validator_state.json
sudo systemctl restart lavad.service
sudo journalctl -u lavad -fn 50 -o catSet live peers
peers=$(curl -sS https://rpc-lava.theamsolutions.info/net_info | jq -r '.result.peers[] | "(.node_info.id)@(.remote_ip):(.node_info.listen_addr)"' | awk -F ':' '{print $1":"$(NF)}' | paste -sd,)
sed -i -e "s|^persistent_peers *=.*|persistent_peers = "$peers"|" $HOME/.lava/config/config.tomllavad status 2>&1 | jq .SyncInfoAdd new key
lavad keys add key_nameKeys list
lavad keys list