October 26, 2022

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

Требования: официальных требований нет. Кто-то советует взять сервер 16G RAM, 4vCPUs, 500GB. Я взял для начала сервер 2CPU, 4RAM, 40GB

Арендовать сервер можно на Hetzner

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

Обновляем и устанавливаем необходимые пакеты:

sudo apt update && sudo apt upgrade -y && \
sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential bsdmainutils git make ncdu gcc git jq chrony liblz4-tool -y

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

cd $HOME && version="1.19" && \
wget "https://golang.org/dl/go$version.linux-amd64.tar.gz" && \
sudo rm -rf /usr/local/go && \
sudo tar -C /usr/local -xzf "go$version.linux-amd64.tar.gz" && \
rm "go$version.linux-amd64.tar.gz" && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \
source $HOME/.bash_profile

Проверяем версию установленного GO (в выводе должно быть go1.19):

go version

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

Устанавливаем бинарные файлы:

cd $HOME && git clone https://github.com/empowerchain/empowerchain && \
cd empowerchain/chain && \
make install && \
empowerd version --long | head

Вставляем свои данные вместо ИМЯ_ВАЛИДАТОРА и ИМЯ_КОШЕЛЬКА в кавычках (в поле CHAIN ничего не меняем):

MONIKER="ИМЯ_ВАЛИДАТОРА" 
WALLET_NAME="ИМЯ_КОШЕЛЬКА"
CHAIN="altruistic-1" 

Добавляем переменные в баш профиль (ничего менять не надо):

echo 'export MONIKER='${MONIKER} >> $HOME/.bash_profile 
echo 'export WALLET_NAME='${WALLET_NAME} >> $HOME/.bash_profile 
echo 'export CHAIN='${CHAIN} >> $HOME/.bash_profile 
source $HOME/.bash_profile

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

empowerd init $MONIKER --chain-id $CHAIN

Скачиваем генезисный файл:

wget -O $HOME/.empowerchain/config/genesis.json "https://raw.githubusercontent.com/empowerchain/empowerchain/main/testnets/altruistic-1/genesis.json"

Проверяем генезис (в выводе должно быть fcae4a283488be14181fdc55f46705d9e11a32f8e3e8e25da5374914915d5ca8):

sha256sum $HOME/.empowerchain/config/genesis.json

Сбрасываем состояние валадатора:

empowerd tendermint unsafe-reset-all --home $HOME/.empowerchain

Настройка ноды

Устанавливаем минимальную цену за газ:

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.025umpwr\"/" $HOME/.empowerchain/config/app.toml

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

seeds=""
peers="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[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'"|; s|^persistent_peers *=.*|persistent_peers = "'$peers'"|' $HOME/.empowerchain/config/config.toml

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

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

Выключаем индексацию:

indexer="null" && \ 
sed -i -e "s/^indexer *=.*/indexer = \"$indexer\"/" $HOME/.empowerchain/config/config.toml

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

sudo tee /etc/systemd/system/empowerd.service > /dev/null <<EOF
[Unit]
Description=EmpowerChain Node
After=network.target

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

[Install]
WantedBy=multi-user.target
EOF

Запускаем сервис:

sudo systemctl daemon-reload && \
sudo systemctl enable empowerd && \
sudo systemctl restart empowerd

Смотрим логи (закрыть логи - CTRL+C):

sudo journalctl -u empowerd -f -o cat

Ждём, когда нода начнёт синхронизироваться и начнёт увеличиваться Height в логах. Текущую высоту можно посмотреть ТУТ.

Проверяем статус синхронизации (если в строке catching_up написано false, то нода синхронизирована, можно приступать к разделу СОЗДАНИЕ ВАЛИДАТОРА):

curl localhost:26657/status

1) Если нода долго не синхронизируется, то можно сделать State Sync:

cd $HOME 
peers="[email protected]:23656" 
config=$HOME/.empowerchain/config/config.toml 
SNAP_RPC=142.132.253.112:23657 
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $config 
sed -i.bak -e "s/^snapshot-interval *=.*/snapshot-interval = \"2000\"/" $HOME/.empowerchain/config/app.toml 

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) 

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\"| ; \ 
s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $config 

empowerd tendermint unsafe-reset-all --keep-addr-book 

sudo systemctl restart empowerd

2) Либо можно добавить addr book:

sudo systemctl stop empowerd empowerd tendermint unsafe-reset-all 
wget -qO $HOME/.empowerchain/config/addrbook.json "https://snapshots2-testnet.nodejumper.io/empower-testnet/addrbook.json" 
sudo systemctl restart empowerd

Смотрим опять логи:

sudo journalctl -u empowerd -f -o cat

И статус синхронизации:

curl localhost:26657/status

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

Создаём кошелёк, если у вас его ещё нет (в команде ничего менять не надо).

empowerd keys add $WALLET_NAME

Обязательно надёжно сохраняем сид фразу в выводе!

Если кошелёк уже был, то восстанавливаем командой (после команды попросят вставить сид фразу):
empowerd keys add $WALLET_NAME --recover

В выводе будет адрес вашего кошелька empower1... Сохраните его, он нам понадобится для запроса монет в дискорде.

Добавляем переменную с адресом кошелька (ничего не меняем):

WALLET_ADDRESS=$(empowerd keys show $WALLET_NAME -a)

Добавляем кошелёк в баш профиль:

echo 'export WALLET_ADDRESS='${WALLET_ADDRESS} >> $HOME/.bash_profile 
source $HOME/.bash_profile

Запрашиваем токены с крана. Переходим в Discord, верифицируемся и переходим во ветку faucet. Вставляем команду и меняем АДРЕС_КОШЕЛЬКА на адрес своего кошелька empower1...:

$request АДРЕС_КОШЕЛЬКА altruistic-1

Проверяем баланс. Переходим обратно в командную строку и вводим команду:

empowerd query bank balances $WALLET_ADDRESS

Создаём валидатора, если монеты поступили:

empowerd tx staking create-validator \
--chain-id $CHAIN \
--commission-rate 0.05 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.1 \
--min-self-delegation "1000000" \
--amount 1000000umpwr \
--pubkey $(empowerd tendermint show-validator) \
--moniker $MONIKER \
--from $WALLET_NAME \
--fees 5000umpwr

Задаём переменную с адресом валидатора:

VALOPER=$(empowerd keys show $WALLET_ADDRESS --bech val -a)

Добавляем её в баш:

echo 'export VALOPER='${VALOPER} >> $HOME/.bash_profile 
source $HOME/.bash_profile

Ищем себя в эксплорере во вкладке inactive.

Поздравляю, вы установили ноду!

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

Посмотреть логи:

sudo journalctl -u empowerd -f -o cat

Выход из тюрьмы, если нода в неё попала:

empowerd tx slashing unjail --from $WALLET_NAME --chain-id $CHAIN

Заделегировать средства с кошелька своему валидатору (сумму вводите свою):

empowerd tx staking delegate $VALOPER 1000000umpwr --from $WALLET_NAME --chain-id $CHAIN

Если после команды делегирования возникает ошибка "account sequence mismatch, expected 1, got 0: incorrect account sequence", то добавьте к команде в конце -s 2

Удалить ноду:

systemctl stop empowerd && \ 
systemctl disable empowerd && \ 
rm /etc/systemd/system/empowerd.service && \ 
systemctl daemon-reload && \ 
cd $HOME && \ 
rm -rf .empowerchain empowerchain && \ 
rm -rf $(which empowerd)


Спасибо за внимание!

Ссылка на TG канал: https://t.me/cryptonik_space