Lumen
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
- Network Chain ID:
lumen - Denom stake:
ulmn - Binary:
lumend - Working directory:
.lumen - RPC: https://m-lumen.rpc.utsa.tech/
- API: https://m-lumen.api.utsa.tech/
- Explorer: https://exp.utsa.tech/lumen/staking
- Docs: https://github.com/network-lumen/validator-kit/tree/master
Lumen - это децентрализованный интернет-стек, объединяющий браузер, шлюзы и блокчейн. Нативный браузер для экосистемы Lumen обеспечивает прямой доступ к состоянию блокчейна, контенту IPFS и сетевым шлюзам без централизованных серверов или доверенных посредников
Подготовка сервера
# обновляем репозитории apt update && apt upgrade -y # устанавливаем необходимые утилиты apt install curl build-essential git wget jq make gcc tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y # проверяем работу жестких дисков curl -sL yabs.sh | bash -s — -ig # проверяем работу интернета curl -sL yabs.sh | bash -s — -fg
File2Ban - подробнее здесь
# устанавливаем и копируем конфиг, который будет иметь больший приоритет apt install fail2ban -y && \ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \ nano /etc/fail2ban/jail.local # раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip> systemctl restart fail2ban # проверяем status systemctl status fail2ban # проверяем, какие jails активны (по умолчанию только sshd) fail2ban-client status # проверяем статистику по sshd fail2ban-client status sshd # смотрим логи tail /var/log/fail2ban.log # останавливаем работу и удаляем с автозагрузки #systemctl stop fail2ban && systemctl disable fail2ban
Новая установка ноды
ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>
Перед установкой ноды ознакомьтесь с рекомендациями для валидатора. Необходимо настроить валидатора совместно с sentry нодами для безопасности - https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md
Команда частями добавляет валидаторов в активный сет. Для того, чтобы заявить о себе настройте ноду валидатора, которая будет работать через sentry и расскажите о себе в дискорде на канале Introduction. Также команда рекомендует использовать сервера не в Европе и Индонезии для увеличения децентрализации и шансов попадания в активный сет. Подробнее о планах развития валидаторов здесь - https://github.com/network-lumen/validator-kit/blob/master/ops/stake_bootstrap.md
Команда проекта создала множество удобных скриптов для настройки как валидатора, так и sentry и RPC узлов
Для быстрой установки воспользуйтесь скриптом
git clone https://github.com/network-lumen/validator-kit.git cd validator-kit ./join.sh <moniker> $HOME/validator-kit/bin/lumend version # v1.3.0 cp $HOME//validator-kit/bin/lumend /usr/local/bin/lumend lumend version # v1.3.0 journalctl -u lumend -f -o cat
На данном этапе на сервере будет запущена full node и Вы можете оставить все как есть или внести необходимые Вам изменения через файлы конфигов
Если нода не может поймать пиры, то обновите адресную книгу
wget -O $HOME/.lumen/config/addrbook.json "https://share.utsa.tech/lumen/addrbook.json"
Рекомендации для validator, sentrys https://github.com/network-lumen/validator-kit/blob/master/ops/validator_specs.md
Обращаю Ваше внимание на то, что есть тонкие настройки sentry и validator. Вы можете воспользоваться готовым скриптом от команды на гитхабе или самостоятельно изменить настройки брандмауэра и конфигурационных файлов
При ручном изменении конфигураций необходимо как минимум:
Изменить настройки для validator
!!! CONFIG TOML seeds = "" pex = false persistent_peers = "<PEER_SENTRY1,PEER_SENTRY2>" private_peer_ids = "<ID_SENTRY1,ID_SENTRY2>" unconditional_peer_ids = "<ID_SENTRY1,ID_SENTRY2>"
Изменить настройки для sentrys
!!! CONFIG TOML pex = true persistent_peers = "<PEER_VALIDATOR>"
Настроить Ваши брандмауэры для ограниченной связи sentry и validator
После того как Вы выполните все настройки и запустите ноды проверьте сколько peers имеется у Ваших нод. Для validator значение должно быть равно количеству Ваших sentrys
# проверка количества пиров
PORT=
curl -s http://localhost:$PORT/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l
# cписок моникеров подключенных пиров
curl -s http://localhost:$PORT/net_info | jq '.result.peers[].node_info.moniker'Также Вы можете воспользоваться snapshot или state-sync. Пожалуйста, воспользуйтесь скриптами на гитхабе или командами ниже
State sync
# add peer peers="546d284c7b7f7a717b06d17002f28ee746ded36f@144.76.29.90:26656" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.lumen/config/config.toml
SNAP_RPC=https://m-lumen.rpc.utsa.tech:443 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 100)); \ 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\"| ; \ s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.lumen/config/config.toml
systemctl restart lumend && journalctl -u lumend -f -o cat
Snapshot
time: every __ hours | indexer: kv | pruning: 1000/100
🌐 https://file.blocksync.me/lumen/
cd $HOME
systemctl stop lumend
cp $HOME/.lumen/data/priv_validator_state.json $HOME/.lumen/priv_validator_state.json.backup
# удаляем старую базу данных
rm -rf $HOME/.lumen/data/{application.db,evidence.db,snapshots,tx_index.db,blockstore.db,state.db}
# скачиваем snapshot от blocksync
curl -o - -L https://file.blocksync.me/lumen/snapshot_20260103.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/.lumen/
mv $HOME/.lumen/priv_validator_state.json.backup $HOME/.lumen/data/priv_validator_state.json
systemctl restart lumend && journalctl -u lumend -f -o catСоздаем валидатора
Создаем или восстанавливаем кошелек и сохраняем вывод
# создать кошелек lumend keys add validator --home ~/.lumen --keyring-backend test # восстановить кошелек (после команды вставить seed) lumend keys add validator --home ~/.lumen --recover --keyring-backend test
Для создания валидатора Вам необходимо будет воспользоваться скриптом ниже. Данный скрипт сделает следующее:
- проверит, что ключ PQC validator-pqc существует (и сгенерирует его при необходимости);
- свяжет учетную запись PQC в блокчейне, использует существующий открытый ключ консенсуса из
lumend tendermint show-validator; - отправит транзакцию стейкинга
create-validatorс минимальным самоделегированием; - при необходимости создаст структурированную резервную копию в
~/.lumen/validator-node.bak
cd HOME_DIR=~/.lumen FROM=validator \ ops/scripts/blockchain/become_validator.sh --moniker "<public-validator-name>"
Валидаторы ДОЛЖНЫ создавать резервные копии ОБОИХ криптографических ключей:
👉 Если Вы потеряете ОДИН из них, вы ЛИШИТЕСЬ ДОСТУПА К СВОИМ СРЕДСТВАМ!!! Подробнее о ключах здесь - https://github.com/network-lumen/validator-kit/blob/master/learn/validator-key-hardening.md
Полезные команды
# проверить логи journalctl -u lumend -f -o cat # проверить статус curl localhost:$PORT/status | jq # проверить баланс lumend q bank balances <address> # проверить pubkey валидатора lumend tendermint show-validator # проверить валидатора lumend query staking validator <valoper_address> lumend query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq # проверка информации по TX_HASH lumend query tx <TX_HASH> # параметры сети lumend q staking params lumend q slashing params # проверить сколько блоков пропущено валидатором и с какого блока актив lumend q slashing signing-info $(lumend tendermint show-validator) # проверить slashing lumend q slashing signing-info $(lumend tendermint show-validator) # узнать транзакцию создания валидатора (заменить свой valoper_address) lumend query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r
# создать валидатора HOME_DIR=/root/.lumen FROM=validator \ ops/scripts/blockchain/become_validator.sh --moniker "UTSA" # докинуть стейк HOME_DIR=/root/.lumen FROM=validator \ ops/scripts/blockchain/stake_tokens.sh --amount 1000000ulmn # собрать награды ADDR=$(lumend keys show validator -a --home /root/.lumen --keyring-backend test) lumend tx distribution withdraw-rewards <lmnvaloperXXX> \ --chain-id lumen \ --from validator \ --commission \ --fees 0ulmn \ --keyring-backend test \ --pqc-enable \ --pqc-from "$ADDR" \ --pqc-key "validator-pqc" \ --node tcp://127.0.0.1:26657 # отправить монеты TO="<lmn1addr>" AMOUNT="1200000ulmn" ADDR=$(lumend keys show validator -a --home /root/.lumen --keyring-backend test) lumend tx bank send "$ADDR" "$TO" "$AMOUNT" \ --chain-id lumen \ --from validator \ --fees 0ulmn \ --keyring-backend test \ --pqc-enable \ --pqc-from "$ADDR" \ --pqc-key "validator-pqc" \ --node tcp://127.0.0.1:26657 \ -y
# вывести список кошельков lumend keys list --keyring-backend test # показать ключ аккаунта lumend keys show validator --bech acc --keyring-backend test # показать ключ валидатора lumend keys show validator --bech val --keyring-backend test # показать ключ консенсуса lumend keys show validator --bech cons --keyring-backend test # удалить кошелек lumend keys delete validator
systemctl stop lumend && \ systemctl disable lumend && \ rm /etc/systemd/system/lumend.service && \ systemctl daemon-reload && \ cd $HOME && \ rm -rf .lumen validator-kit && \ rm -rf $(which lumend)
# список proposals lumend q gov proposals # посмотреть результат голосования lumend q gov proposals --voter <ADDRESS> # проголосовать за предложение HOME=/root/.lumen KEYRING=test FROM=validator PROP_ID=8 ADDR=$(lumend keys show $FROM -a --home $HOME --keyring-backend $KEYRING) lumend tx gov vote $PROP_ID yes \ --chain-id lumen \ --from $FROM \ --keyring-backend $KEYRING \ --fees 0ulmn \ --gas auto \ --gas-adjustment 1.5 \ --node tcp://127.0.0.1:26657 \ --pqc-enable \ --pqc-from "$ADDR" \ --pqc-key "validator-pqc" \ -y
FOLDER=.lumen
# узнать свой peer
PORTR=$(grep -A 3 "\[p2p\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+") && \
echo $(lumend tendermint show-node-id)@$(wget -qO- eth0.me)$PORTR
# узнать порт RPC
echo -e "\033[0;32m$(grep -A 3 "\[rpc\]" ~/$FOLDER/config/config.toml | egrep -o ":[0-9]+")\033[0m"
# проверка количества пиров
PORT=
curl -s http://localhost:$PORT/net_info | jq -r '.result.peers[] | "\(.node_info.id)@\(.remote_ip):\(.node_info.listen_addr | split(":")[2])"' | wc -l
# cписок моникеров подключенных пиров
curl -s http://localhost:$PORT/net_info | jq '.result.peers[].node_info.moniker'
# Проверка prevotes/precommits. Пригодится при обновах
curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].prevotes_bit_array' && \
curl -s localhost:$PORT/consensus_state | jq '.result.round_state.height_vote_set[0].precommits_bit_array'
# check prevote of your validator
curl -s localhost:$PORT/consensus_state -s | grep $(curl -s localhost:26657/status | jq -r .result.validator_info.address[:12])