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/
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"
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, предварительно остановив старый сервер
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
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)