June 24

Gno.land

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

Web Discord Github

Testnet details

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

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

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

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

gnoland config init
gnoland secrets init

Скачиваем Genesis

wget -O $HOME/gno/gnoland-data/config/genesis.json "https://github.com/gnolang/gno/releases/download/chain/topaz/genesis.json"

shasum -a 256 $HOME/gno/gnoland-data/config/genesis.json
# 2dd049f973b82858727440df9aff5722cb0b322fd00890f40f2b0688276898ff

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

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.seeds g19q07ssuafhmg6r7ys7wp7rpc4jxc85cpvdy426@seed-1.topaz.testnets.gno.land:26656,g15k98e65gm8h7fdr3yr4tqn82lvch4a97a3sg3j@seed-2.topaz.testnets.gno.land:26656
gnoland config set p2p.persistent_peers \
"g10zqystndwphs4aumuj8fujmh0z5ep9lmx9fnpl@38.49.212.137:36656,g138usej2c7hvcqec6wzsqwaw2zexnngx0hrpele@208.76.222.122:36656,g1393shc3547t6yyva69hnpwmqnc0psxkyhknljw@152.53.245.124:26656,g15k98e65gm8h7fdr3yr4tqn82lvch4a97a3sg3j@108.132.15.161:26656,g163g9pyzc8l83ta5qmedmckfywrtzhvknxlsmks@85.195.116.219:26680,g17d5epdngr7yt7n5tn9xx0xm38s870475c6gnsk@46.224.197.243:55656,g17mkvewp957pvcu2n5m7y2cpmpl7fdzlajhqm53@149.202.68.156:26676,g17qp5xc8a607svp77h3ttl05mg4fuzyl5fyvc2r@152.53.253.167:55656,g17t7vlg7hjvsldqj06zenkxpktzntkp62thg9a7@65.109.106.214:55656,g18ahqzryula7y9j6w4v7fnkc0l6djn3rvguhld8@135.181.17.54: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 6 hours | db_backend: pebbledb

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

# останавливаем ноду
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_test/gno-test-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 topaz-1 \
  --genesis $HOME/gno/gnoland-data/config/genesis.json \
  --log-level info \
  --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.topaz.testnets.gno.land" auth/accounts/<ADDRESS>
#gnokey query --remote "http://127.0.0.1:26657" auth/accounts/<ADDRESS>

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

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

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

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

⚠️ В тестнете для регистрации используется только 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.topaz.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 topaz-1 --remote "$REMOTE" --broadcast "$KEY_NAME"

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

ℹ️ После успешной транзакции вы можете просмотреть свой профиль по ссылке:
https://topaz.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:26657/status); REMOTE_JSON=$(curl -s https://rpc.topaz.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 "topaz-1" \
  -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