MAINNET
January 4

Lumen

🪓 Telegram канал UTSA 🪓 Telegram чат UTSA

Web Discord Github

Testnet details

Lumen - это децентрализованный интернет-стек, объединяющий браузер, шлюзы и блокчейн. Нативный браузер для экосистемы Lumen обеспечивает прямой доступ к состоянию блокчейна, контенту IPFS и сетевым шлюзам без централизованных серверов или доверенных посредников

UPD 🕊 (Высота обновления: )

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

# обновляем репозитории
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>"

Валидаторы ДОЛЖНЫ создавать резервные копии ОБОИХ криптографических ключей:

  • ключ ed25519 (классический ключ Cosmos)
  • ключ PQC (Dilithium)

👉 Если Вы потеряете ОДИН из них, вы ЛИШИТЕСЬ ДОСТУПА К СВОИМ СРЕДСТВАМ!!! Подробнее о ключах здесь - 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

Peers and RPC

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])