COSMOS WIKI
April 18, 2022

Cosmos - запуск ноды на примере Archway + config files + pruning

Экосистема Cosmos

Запустив один раз ноду в экосистеме Cosmos и разобравшись в ней можно будет легко запускать и другие ноды на Cosmos. Так как структура команд, расположение конфигурационных файлов находяться в одних и тех местах. Но, конечно, нужно иметь ввиду различия в некоторых идентификаторах и командах, которые могут изменяться у определенных проектов. К примеру:

  • chain-id - обозначает название сети и будет разным у каждой цепочки. Example: chain-id=torii-1
  • denom - обозначает название монеты/токена и также будет иметь свое уникальное значение. Example: denom=utorii
  • binary file - бинарный файл необходимый для запуска любой команды естественно будет своим. Example: archwayd...
Примеры основных команд

Основные конфигурационные файлы по дефолту находяться в папке $HOME/.archway/config/

App.tomlпозволяет настроить:

  • Minimum-gas-prices - минимальная цена на газ, которую валидатор готов принять для обработки. Это механизм защиты от спама. Если значение является пустым, то необходимо отредактировать его, иначе узел может остановиться при запуске. Example: minimum-gas-prices = "0.0025utorii" ; minimum-gas-prices = "0utorii"
  • Pruning - позволяет настроить оптимизацию сохранения базы данных и напрямую влияет на заполнение жесткого диска
  • HaltHeight и HaltTime используются для настройки состояния остановки блокчейна на нужной высоте или по времени для обновления или тестирования
  • Настройки телеметрии
  • API конфигурацию
  • Rosetta конфигурацию
  • gRPC и gRPC Web конфигурацию
  • Конфигурацию состояния синхронизации, где можно настроить интервал создания снепшотов и их количество

Client.toml Настройки можно проверить командой archwayd config -
позволяет настроить:

  • Chain-id - идентификатор сетевой цепочки
  • Keyring's backend - место хранения ключей. По умолчанию OS. Подробнее о Keyring's backend можно узнать здесь
  • Формат вывода CLI (text|json)
  • Путь к интерфейсу Tendermint RPC для этой сети
  • Режим трансляции транзакций

Config.toml является ключевым файлом и используется для настройки Tendermint. Подробный разбор будет в отдельной статье!

Для оптимизации места на жестком диске можно настроить следующие параметры:

Индексирование - можно отключить в случае ненадобности использования запросов транзакций с конкретного узла. Находится вconfig.toml

Для отключения индексирования достаточно изменить параметр на следующее

indexer = "null"

Если cделать это на синхронизированном узле, то ранее собранный индекс не очищается автоматически и его можно удалить вручную из каталога $HOME/.archway/data/tx_index.db/

Сначала меняется настойка в config.toml, потом удаляется папка

Снэпшоты - можно отключить в случае ненадобности снэпшотов. Находится вapp.toml

Для отключения достаточно изменить параметр на следующее

snapshot-interval = 0

Прунинг - можно настроить в случае необходимости. Находиться вapp.toml

Для изменения достаточно изменить параметры на следующее (пример)

pruning = "custom"
pruning-keep-recent = "100"
pruning-keep-every = "5000"
pruning-interval = "10"

Важно: настраивать Pruning необходимо перед стартом ноды при пустой папке Data, либо после unsafe-reset-all

Важно: если устанавливаются снэпшоты, то число в snapshot-interval должно быть кратно pruning-keep-every

Журналы - можно настроить в случае необходимости. Находится вconfig.toml

По умолчанию установлен уровень ведения журналаinfo и это создает много журналов. Это может быть полезно при запуске узла для того, чтобы убедиться, что узел начинает синхронизацию правильно. После старта узла и синхронизации можно понизить уровень журнала до warn(или error)

log_level = "warn"

Также убедитесь, что log rotation настроен правильно

https://docs.archway.io/docs/overview/network/

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

Обновляем репозитории

sudo apt update && sudo apt upgrade -y

Проверяем работу жестких дисков

curl -sL yabs.sh | bash -s — -ig

Проверяем работу интернета

curl -sL yabs.sh | bash -s — -fg

Устанавливаем необходимые утилиты

sudo apt install curl build-essential git wget jq make gcc tmux -y

Устанавливаем Go ОДНОЙ КОМАНДОЙ

wget https://golang.org/dl/go1.17.5.linux-amd64.tar.gz; \
rm -rv /usr/local/go; \
tar -C /usr/local -xzf go1.17.5.linux-amd64.tar.gz && \
rm -v go1.17.5.linux-amd64.tar.gz && \
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

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

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

Устанавливаем бинарники V. # "0.0.5"

git clone https://github.com/archway-network/archway && cd archway
git checkout v0.0.5
make install
archwayd version
#0.0.5

Инициализируем ноду (даем имя)

archwayd init <name_node> --chain-id=torii-1

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

# создать кошелек
archwayd keys add <name_wallet>

# восстановить кошелек (после команды вставить seed)
archwayd keys add <name_wallet> --recover

Если сервер переноситься, то меняем priv_validator_key.json, предварительно остановив старый сервер

Скачиваем Genesis

wget -O $HOME/.archway/config/genesis.json "https://raw.githubusercontent.com/archway-network/testnets/main/torii-1/genesis.json"

# Проверим генезис
sha256sum ~/.archway/config/genesis.json
# 0257e0be068328514f79ddcc1a3f8703909c116c6bd4a8dc1c9f8f31018e0d93

Проверяем, что состояние валидатора на начальном этапе

cd && cat .archway/data/priv_validator_state.json
{
  "height": "0",
  "round": 0,
  "step": 0
}

# если нет, то выполняем команду
archwayd unsafe-reset-all

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

Правим конфиг $HOME/.archway/config/client.toml

archwayd config chain-id torii-1

Настраиваем минимальную цену за газ $HOME/.archway/config/app.toml

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025utorii\"/;" ~/.archway/config/app.toml

Настраиваем прунинг одной командой $HOME/.archway/config/app.toml

pruning="custom"
pruning_keep_recent="1000"
pruning_interval="10"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.archway/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.archway/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.archway/config/app.toml

Добавляем seed/peers $HOME/.archway/config/config.toml

external_address=$(wget -qO- eth0.me)

peers="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:20556,[email protected]:26656"
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/; s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.archway/config/config.toml

seeds=""
sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.archway/config/config.toml

Выключаем индексацию (опционально) $HOME/.archway/config/config.toml

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

Включаем/выключаем снэпшоты (опционально) $HOME/.archway/config/app.toml

Важно: если устанавливаются снэпшоты, то snapshot-interval должен быть кратен pruning-keep-every

SNAP_RPC=http://65.108.99.224:26657
SNAP_RPC=https://rpc.torii-1.archway.tech:443

cd $HOME/.archway/config

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)

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\"\"|" config.toml

Важно! Если Вы хотите воспользоваться state sync и загрузиться со снэпшота, то необходимо скачать папку со смарт контрактами WASM - вот есть гайд от Goooodnes как стартовать со снапа

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

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

[Service]
User=$USER
ExecStart=$(which archwayd) start
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

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

Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры и просим addrbook.json у кого-нибудь. После замены addrbook.json делаем archwayd unsafe-reset-all и перезагружаем ноду

После синхронизации переходим к созданию валидатора - https://teletype.in/@lesnik13utsa/RPLJpWXIoDQ

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

Файлы конфига

nano $HOME/.archway/config/config.toml
nano $HOME/.archway/config/app.toml

Проверить блоки

archwayd status 2>&1 | jq ."SyncInfo"."latest_block_height"

Проверить логи

sudo journalctl -u archwayd -f -o cat
sudo journalctl -fn 100 -u archwayd

Статус

curl localhost:26657/status

Проверить баланс

archwayd q bank balances archway1m...

Проверить валидатора

archwayd query staking validator <archwayvaloper1ms...>
archwayd query staking validators --limit 1000000 -o json | jq '.validators[] | select(.description.moniker=="<name_moniker>")' | jq

Собрать комиссионные + реварды

archwayd tx distribution withdraw-rewards <archwayvaloper1ms...> --from <name_wallet> --chain-id torii-1 --fees 5utorii --commission -y

Заделегировать себе в стейк еще (так отправляется 1 монетa)

archwayd tx staking delegate <archwayvaloper1ms...> 1000000utorii --from <name_wallet> --fees 5utorii --chain-id torii-1 -y

Unbond (в примере 10 монет)

archwayd tx staking unbond <archwayvaloper1ms...> 10000000utorii --from <name_wallet> --fees 5utorii --chain-id torii-1 -y

Отправить монеты на другой адрес

archwayd tx bank send <name_wallet> <archway1le...> 1001000utorii --fees 5utorii --chain-id torii-1 -y

Выбраться из тюрьмы

archwayd tx slashing unjail --from <name_wallet>

Список кошельков

archwayd keys list

Узнать транзакцию создания валидатора (заменить свой valoper_address)

archwayd query txs --events='create_validator.validator=<your_valoper_address>' -o=json | jq .txs[0].txhash -r

Проверить сколько блоков пропущено валидатором и с какого блока актив

archwayd q slashing signing-info $(archwayd tendermint show-validator)

Параметры сети

archwayd q staking params

Проголосовать за предложение (меняем номер предложение)

archwayd tx gov vote 1 yes --from <name_wallet> --chain-id torii-1 --fees 500utorii

Внести депозит в предложение

archwayd tx gov deposit 1 5000000utorii --from <name_wallet> --chain-id torii-1 --fees 500utorii

Удалить ноду

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