June 24

Gno.land - test 13

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

Web Discord Github

Testnet details

Полное руководство по запуску узла валидации в тестовой сети gno.land test13

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

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

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

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

Новая установка ноды

ВАЖНО — в командах ниже все, что в <> меняем на свое значение и убираем сами <>

Устанавливаем бинарники

git clone https://github.com/gnolang/gno && cd $HOME/gno
git checkout chain/test13

make -C gno.land install.gnoland install.gnokey
gnoland version
# gnoland version: chain/test13
gnokey --help

Инициализируем ноду, чтобы создать необходимые файлы конфигурации

gnoland config init
gnoland secrets init

Скачиваем Genesis

wget -O $HOME/gno/genesis.json "https://github.com/gnolang/gno/releases/download/chain/test13/genesis.json"

shasum -a 256 $HOME/gno/genesis.json
# 56f56e135174feff9f93283d5ec7e4ec955cd5155108aff5009d4fd51c5adaf2

Настраиваем конфигурацию ноды

gnoland config set moniker "<moniker>"
SERVER_IP=$(curl -4 -s ifconfig.me)
gnoland config set p2p.external_address "$SERVER_IP:26656"
gnoland config set p2p.pex true

# persistent peers (required)
gnoland config set p2p.persistent_peers \
"g1e3pftctakyx58mzapqs4syc4h0jcxwtnraq00c@185.248.24.16:47656,g13lg797wyweuultfxdntaz3v9yuchl5p9aexj4k@178.124.192.147:26656,g1z3mavstqrfewltrw886d35fufq6v7eg63xjcet@88.198.46.55:32556,g1j3ylvtrdfzckh5979kvhpznvgy6e0ytwhzrja5@149.50.96.58:41656,g1xjx0hcg67jwqfsmuzjz4uqfhh5ma4rf6n7yg2k@38.246.115.151:26656,g13gumehh3euchv3hp29gsj72pt0ssezaapqu5qd@138.201.240.155:17656,g17su28ydtj8jsdqt2c7m3jn3mysqlz6n57vxd5t@62.210.125.225:26656,g1tsdm60z0akzxtwxkfamt02m6e8fqk0y9h25vks@135.181.78.21:17656,g1xmnn74a2fcc9qnmk6zdlgr5n446em44378c5n3@142.132.158.158:26656,g16ueudzsm5t2v5t2hdr2tr8n2fzj2x6mekx6pvy@192.155.100.132:26656,g1lxkf9gn7kddrr26c640ww5wg3ezsm22we8cjpc@99.81.240.125:26656,g1ghkxmz46w46562yl8capdfqvlypp6zcp55qx7t@185.144.99.19:26656,g1ghl8lhhdnhwwvp94z0gsadvz3c03et30cqyhu2@117.1.104.188:26656,g1wfu406mz57cv2cq68agrkefd4g6pw0ew4kyvlu@65.109.22.211:54656,g1cw4ajr026320c3a6rfm2d77tr94yglh5namap9@149.50.110.40:22656,g17qp5xc8a607svp77h3ttl05mg4fuzyl5fyvc2r@37.60.255.34:27656,g1zz2yvc23ts7uk05gemxmj9dlrhdt7w8pxtcdy5@62.210.207.58:26656,g1pzyfmmtxlla7ay90rfx62cc3rq6hq3jk48cjqz@146.19.24.32:26656,g142k7zc2qym3c0u6jmkf6rv26llgr2f4nakmlmt@54.145.44.95:26656,g1v5unyq7fsndekzegp2xh0tw45nsxpkx5qsgy8u@135.181.232.179:26656,g1dlu8z4kxq8hekht2vmn6z3qqzrea4u37js727a@176.9.3.249:26656,g16f7dlfvrk6qugcdmaq5npw0sjhlf79vrz7ge6c@5.9.8.148:30800,g12gxe0qpq90vhhpp5gtavafgr2nl9cntntvrjkj@186.233.184.95:37656,g1uycj5lkvu97jddywjttd8xq53u3p6eyhh2js25@62.210.124.8:26656"

# consensus settings
gnoland config set application.prune_strategy syncable
gnoland config set consensus.timeout_commit 3s
gnoland config set consensus.peer_gossip_sleep_duration 10ms
gnoland config set p2p.flush_throttle_timeout 10ms

# performance
gnoland config set mempool.size 10000
gnoland config set p2p.max_num_outbound_peers 40


# проверим
nano /root/gno/gnoland-data/config/config.toml

Snapshot

time: every 12 hours | db_backend: pebbledb

🌐 https://share118.utsa.tech/gno_test13/

# останавливаем ноду
systemctl stop gnoland 2>/dev/null || pkill -f "gnoland start" 2>/dev/null || true

# очищаем старую базу данных
rm -rf ~/gno/gnoland-data/db ~/gno/gnoland-data/wal

# скачиваем snapshot
curl -o - -L https://share118.utsa.tech/gno_test13/gno-test13-snapshot.tar.lz4 | lz4 -c -d - | tar -x -C $HOME/gno/gnoland-data/

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

tee /etc/systemd/system/gnoland.service > /dev/null <<EOF
[Unit]
Description=Gnoland
After=network-online.target
Wants=network-online.target

[Service]
User=$USER
WorkingDirectory=$HOME/gno
Environment=GNOROOT=$HOME/gno
Environment=HOME=$HOME
ExecStart=$(which gnoland) start \
  --chainid test-13 \
  --genesis $HOME/gno/genesis.json \
  --skip-genesis-sig-verification
Restart=on-failure
RestartSec=5s
LimitNOFILE=65535
StandardOutput=journal
StandardError=journal
SyslogIdentifier=gnoland

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable gnoland
systemctl restart gnoland && journalctl -u gnoland -f -o cat

Создаем или восстанавливаем кошелек и сохраняем вывод

# создать кошелек. Кошелек создастся по пути $HOME/.config/gno/data/keys.db/
gnokey add <name_wallet>

# восстановить кошелек
gnokey add <name_wallet> --recover

# получить адрес вашего оператора:
gnokey list

Не забываем сохранить seed !!!

Faucet

Воспользуйтесь faucet https://faucet.gno.land/ и запросите токены для своего адреса оператора g1xxx

Проверка баланса

gnokey query --remote "https://rpc.test13.testnets.gno.land" auth/accounts/<ADDRESS>
#gnokey query --remote "http://127.0.0.1:26657" auth/accounts/<ADDRESS>

Регистрируемся в качестве кандидата в валидаторы

⚠️ Gnoland использует систему регистрации валидаторов на основе GovDAO. Регистрация делает Вас только кандидатом. Член GovDAO должен создать и передать предложение о включении Вас в список активных валидаторов

Получите открытый ключ вашего Валидатора (gpub1...)

cd /root/gno && gnoland secrets get validator_key
#{
#  "address": "g1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
#  "pub_key": "gpub1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#}

⚠️ В тестнете 13 для регистрации используется только pub_key

Здесь address это адрес ключа консенсуса, не используйте его в качестве адреса оператора. Вместо этого используйте адрес своего кошелька из gnokey list

Зададим переменные

Добавьте все необходимые данные

MONIKER="moniker"

read -r -d '' DESCRIPTION <<'EOF'
**Validator Name:** XXX

**Networks We Are Currently Validating:**

- XXX
- XXX
- XXX

**Total AuM:**

- ~$1M across all networks

**Links to Our Digital Presence:**

- Website: XXX
- GitHub: XXX
- X/Twitter: XXX

**Contact Details:**

- Email: XXX
- Telegram: XXX
- Discord: XXX

**Why We Are Interested in Validating on gno.land:**

XXX

**Contributions & Plans:**

XXX
EOF

SERVER_TYPE="data-center"
# OPERATOR_ADDRESS можно посмотреть через gnokey list
OPERATOR_ADDRESS="XXX"
CONSENSUS_PUBKEY=$(gnoland secrets get validator_key | grep 'pub_key' | awk '{print $2}' | tr -d '"')
KEY_NAME="XXX"
REMOTE="https://rpc.test13.testnets.gno.land"

Проверим переменные

echo "$MONIKER"; echo "$DESCRIPTION"; echo "$SERVER_TYPE"; echo "$OPERATOR_ADDRESS"; echo "$CONSENSUS_PUBKEY"; echo "$KEY_NAME"; echo "$REMOTE"

Отправить заявку на регистрацию в Validator

gnokey maketx call --pkgpath gno.land/r/gnops/valopers --func Register --args "$MONIKER" --args "$DESCRIPTION" --args "$SERVER_TYPE" --args "$OPERATOR_ADDRESS" --args "$CONSENSUS_PUBKEY" --gas-fee 1000000ugnot --gas-wanted 50000000 --chainid test-13 --remote "$REMOTE" --broadcast "$KEY_NAME"

Не забываем сохранить файлы консенсуса и кошелек !!!

ℹ️ После успешной транзакции вы можете просмотреть свой профиль по ссылке:
https://test13.testnets.gno.land/r/gnops/valopers

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

Информация

# проверка синхронизации
curl -s http://127.0.0.1:26657/status | jq '.result.sync_info'

# проверка пиров
curl -s http://127.0.0.1:26657/net_info | jq '.result.n_peers, .result.peers[]?.node_info.moniker'

# проверка статуса
curl -s http://127.0.0.1:26657/status | jq

# проверка адреса Node consensus key
cd /root/gno && gnoland secrets get validator_key

# сравнение высоты с RPC
watch -n 5 'LOCAL_JSON=$(curl -s http://127.0.0.1:36657/status); REMOTE_JSON=$(curl -s https://rpc.test13.testnets.gno.land/status); LOCAL=$(echo "$LOCAL_JSON" | jq -r ".result.sync_info.latest_block_height // 0"); REMOTE=$(echo "$REMOTE_JSON" | jq -r ".result.sync_info.latest_block_height // 0"); CATCHING=$(echo "$LOCAL_JSON" | jq -r ".result.sync_info.catching_up"); DIFF=$((REMOTE-LOCAL)); echo "Local height:  $LOCAL"; echo "Remote height: $REMOTE"; echo "Diff:          $DIFF"; echo "Catching up:   $CATCHING"'

Транзакции

gnokey maketx send \
  -send "1000000ugnot" \
  -to "RECIPIENT_ADDRESS" \
  -gas-fee 1000000ugnot \
  -gas-wanted 10000000 \
  -broadcast \
  -chainid "test-13" \
  -remote "https://rpc.test13.testnets.gno.land" \
  wallet

Работа с кошельками

# создать кошелек. Кошелек создастся по пути $HOME/.config/gno/data/keys.db/
gnokey add <name_wallet>

# восстановить кошелек
gnokey add <name_wallet> --recover

# получить адрес вашего оператора:
gnok

Удалить ноду

systemctl stop gnoland && \
systemctl disable gnoland && \
rm /etc/systemd/system/gnoland.service && \
systemctl daemon-reload

cd $HOME
rm -rf gno

Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq