Guides
January 5, 2023

Lava: Installation Guide

Lava Network создает уровень децентрализованной инфраструктуры для удаленных вызовов процедур блокчейна - peer-to-peer RPC сеть. Данное решение позволит Web3 компаниям устранить зависимость от централизованных RPC нод, что уменьшит уязвимость и вероятность быть скомпрометированным.

Форма для участия в тестнете - https://docs.google.com/forms/u/0/d/e/1FAIpQLSd-uRGAInJ6hhdt-354lW2sgY5O_o3m7aigU7-1f6egE1e5Zw/formResponse

Форма для участия в тестнете (для разработчиков) - https://docs.google.com/forms/d/e/1FAIpQLSfEo8fZndjKlPchdDmPvXCdLESYfIUe8-PLC79syX5mo2aBbA/viewform

Тестнет эксплорер - http://explorer.nodera.org/lava/staking

Гайд актуален для версии v0.13.1

DYOR:

Website
Discord
Twitter
Whitepaper

Оглавление


Подготовка сервера

Оглавление

На данном этапе устанавливаю на сервере Hetzner - CPX31: 4 CPU, 8 GB RAM, 160 GB SSD.

Обновляем пакеты

sudo apt update && sudo apt upgrade -y

Устанавливаем инструменты разработчика и необходимые пакеты

sudo apt install curl build-essential pkg-config libssl-dev git wget jq make gcc tmux chrony -y

Устанавливаем GO

wget https://go.dev/dl/go1.19.5.linux-amd64.tar.gz; \
rm -rv /usr/local/go; \
tar -C /usr/local -xzf go1.19.5.linux-amd64.tar.gz && \
rm -v go1.19.5.linux-amd64.tar.gz && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

Установка ноды

Оглавление

Скачиваем бинарные файлы

cd $HOME 
git clone https://github.com/lavanet/lava 
cd lava 
git fetch --all 
git checkout v0.13.1
make install
sudo mv $HOME/lava/build/lavad /usr/local/bin/lavad

Проверяем версию

lavad version
#0.13.1

Создаем переменные

MONIKER_LAVA=вводим свое имя
CHAIN_ID_LAVA=lava-testnet-1
PORT_LAVA=38

Сохраняем переменные, перезагружаем .bash_profile и проверяем значения переменных

echo "export MONIKER_LAVA="${MONIKER_LAVA}"" >> $HOME/.bash_profile
echo "export CHAIN_ID_LAVA="${CHAIN_ID_LAVA}"" >> $HOME/.bash_profile
echo "export PORT_LAVA="${PORT_LAVA}"" >> $HOME/.bash_profile
source $HOME/.bash_profile

echo -e "\nmoniker_LAVA > ${MONIKER_LAVA}.\n"
echo -e "\nchain_id_LAVA > ${CHAIN_ID_LAVA}.\n"
echo -e "\nport_LAVA > ${PORT_LAVA}.\n"

Настраиваем конфиг

lavad config chain-id $CHAIN_ID_LAVA
lavad config keyring-backend test
lavad config node tcp://localhost:${PORT_LAVA}657
sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ulava\"/" $HOME/.lava/config/app.toml

Инициализируем ноду

lavad init $MONIKER_LAVA --chain-id $CHAIN_ID_LAVA

Загружаем генезис файл и адресбук

curl -s https://raw.githubusercontent.com/K433QLtr6RA9ExEq/GHFkqmTzpdNLDd6T/main/testnet-1/genesis_json/genesis.json > $HOME/.lava/config/genesis.json
curl -s https://snapshots1-testnet.nodejumper.io/lava-testnet/addrbook.json > $HOME/.lava/config/addrbook.json

Добавляем сиды и пиры

SEEDS="3a445bfdbe2d0c8ee82461633aa3af31bc2b4dc0@prod-pnet-seed-node.lavanet.xyz:26656,e593c7a9ca61f5616119d6beb5bd8ef5dd28d62d@prod-pnet-seed-node2.lavanet.xyz:26656"
PEERS=""
sed -i 's|^seeds *=.*|seeds = "'$SEEDS'"|; s|^persistent_peers *=.*|persistent_peers = "'$PEERS'"|' $HOME/.lava/config/config.toml

Изменяем порты для возможности дальнейшего подселения других нод проектов экосистемы Космос на один сервер

sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${PORT_LAVA}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${PORT_LAVA}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${PORT_LAVA}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${PORT_LAVA}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${PORT_LAVA}660\"%" $HOME/.lava/config/config.toml
sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${PORT_LAVA}317\"%; s%^address = \":8080\"%address = \":${PORT_LAVA}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${PORT_LAVA}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${PORT_LAVA}091\"%" $HOME/.lava/config/app.toml

Настраиваем прунинг

pruning="custom"
pruning_keep_recent="100"
pruning_keep_every="0"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.lava/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.lava/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.lava/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.lava/config/app.toml

Сбрасываем данные

lavad tendermint unsafe-reset-all --home $HOME/.lava

Создаем сервисный файл

printf "[Unit]
Description=Lava Service
After=network.target

[Service]
Type=simple
User=$USER
ExecStart=$(which lavad) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target" > /etc/systemd/system/lavad.service

Загружаем снэпшот

SNAP_LAVA=$(curl -s https://snapshots1-testnet.nodejumper.io/lava-testnet/ | egrep -o ">lava-testnet-1.*\.tar.lz4" | tr -d ">")
curl https://snapshots1-testnet.nodejumper.io/lava-testnet/${SNAP_LAVA} | lz4 -dc - | tar -xf - -C $HOME/.lava

Запускаем сервис и проверяем логи

sudo systemctl daemon-reload && \
sudo systemctl enable lavad && \
sudo systemctl restart lavad && \
sudo journalctl -u lavad -f -o cat

Ждем окончания синхронизации, проверить синхронизации можно командой

lavad status 2>&1 | jq .SyncInfo

Если вывод показывает false, синхронизация завершена.


Создание кошелька и валидатора

Оглавление

Создаем кошелек

lavad keys add $MONIKER_LAVA

Сохраняем мнемоник фразу в надежном месте!

Если вы участвовали в предыдущих тестнетах, восстанавливаем кошелек командой и вводим мнемоник фразу

lavad keys add $MONIKER_LAVA --recover

Создаем переменную с адресом кошелька и валидатора

WALLET_LAVA=$(lavad keys show $MONIKER_LAVA -a)
VALOPER_LAVA=$(lavad keys show $MONIKER_LAVA --bech val -a)

echo "export WALLET_LAVA="${WALLET_LAVA}"" >> $HOME/.bash_profile
echo "export VALOPER_LAVA="${VALOPER_LAVA}"" >> $HOME/.bash_profile
source $HOME/.bash_profile
echo -e "\nwallet_LAVA > ${WALLET_LAVA}.\n"
echo -e "\nvaloper_LAVA > ${VALOPER_LAVA}.\n"

Запрашиваем токены с крана командой

curl -X POST -d '{"address": "$(lavad keys show $MONIKER_LAVA -a)", "coins": ["10000000ulava"]}' https://faucet-api.lavanet.xyz/faucet/

Проверяем свой баланс

lavad q bank balances $WALLET_LAVA

После завершения синхронизации и пополнения кошелька, создаем валидатора

lavad tx staking create-validator \
--amount 9000000ulava \
--from $WALLET_LAVA \
--commission-rate "0.07" \
--commission-max-rate "0.20" \
--commission-max-change-rate "0.1" \
--min-self-delegation "1" \
--pubkey=$(lavad tendermint show-validator) \
--moniker $MONIKER_LAVA \
--chain-id "lava-testnet-1" \
--fees=10000ulava \
--identity="" \
--details="" \
--website="" \
-y

Проверяем своего валидатора в эксплорере - http://explorer.nodera.org/lava/staking

Мониторинг можно настроить с использованием Panic! бота по гайду - https://nodera.org/panic_bot


Обновление v0.13.1

Оглавление

cd $HOME/lava
git fetch --all 
git checkout v0.13.1
make install
sudo mv $HOME/lava/build/lavad /usr/local/bin/lavad

Проверяем версию

lavad version
#0.13.1

Перезапускаем ноду и проверяем логи

sudo systemctl restart lavad && sudo journalctl -fu lavad -o cat

Удаление ноды

Оглавление

Перед удалением ноды убедитесь, что сохранены файлы из каталога /root/.lava/config

Для удаления ноды используйте следующие команды

sudo systemctl stop lavad
sudo systemctl disable lavad
sudo rm -rf $HOME/.lava
sudo rm -rf $HOME/lavad
sudo rm -rf /etc/systemd/system/lavad.service
sudo rm -rf /usr/local/bin/lavad
sudo systemctl daemon-reload

Полезные команды

Оглавление

Рестарт ноды

sudo systemctl restart lavad

Проверка логов

sudo journalctl -u lavad -f -o cat

Узнать адрес валидатора

lavad keys show $MONIKER_LAVA --bech val -a

Делегировать токены валидатору

lavad tx staking delegate $VALOPER_LAVA 9000000ulava --from $WALLET_LAVA --chain-id $CHAIN_ID_LAVA --fees=10000ulava

Внести изменения в валидатора

lavad tx staking edit-validator --identity="" --details="" --website="" \
--from $WALLET_LAVA --chain-id $CHAIN_ID_LAVA --fees=500ulava -y
#identity - PGP ключ c keybase.io (устанавливает аватар валидатора)
#details - текстовое описание валидатора

Nodera

Telegram | Discord | Twitter