Stride: Installation guide (Testnet is over)
Stride — блокчейн, который обеспечивает ликвидность для застейканных активов экосистемы Cosmos. Используя Stride, пользователи смогут одновременно стейкать и учавствовать в DeFi. Миссия проекта - предоставить лучший и безопасный ликвидный стекинг для пользователей экосистемы Cosmos.
В конце июня 2022 года проект закрыл сид раунд. Сумма инвестиций на данный момент не известна, однако список инвесторов интересный: Pantera Capital, Cosmostation, Distributed Global и другие.
Форма для подтверждения заданий
Обсуждаем и делимся мнением в дискорде Nodera
Сrunchbase
Website
Discord
Whitepaper
Оглавление
- Подготовка сервера
- Установка и запуск
- Создание кошелька
- Создание валидатора
- Установка ноды Gaia (опционально)
- Открытие портов
- Задание 6. Stake, redeem & claim
- Задание 7. Запуск релеера
- Задание 8. Relayer v2
- Задание 9. Ретрансляция интерчейн запросов
- Задание 10. Запуск ноды
- Задание 11. Делегация другому валидатору
- Обновление
- Освобождение места на сервере
- Удаление ноды Stride
- Полное удаление
- Полезные ссылки и команды
Подготовка сервера
Согласно официальной документации, требования к серверу составляют 4 CPU, 32 GB RAM. Однако, по личному опыту, для тестнетов Cosmos-сетей хватает 4 CPU, 8 GB RAM. Поэтому пока предлагаю ставить на Hetzner - CPX31, если будут большие утечки памяти, то сменим сервер.
Stride использует следующие порты - 26656, 26657, 9091, 9090, 6060, 1317. Учитывайте при подселении к другим нодам.
sudo apt update && sudo apt upgrade -y
Устанавливаем инструменты разработчика и необходимые пакеты
sudo apt install make clang pkg-config libssl-dev build-essential git jq ncdu bsdmainutils htop -y
wget https://go.dev/dl/go1.18.4.linux-amd64.tar.gz; \ rm -rv /usr/local/go; \ tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz && \ rm -v go1.18.4.linux-amd64.tar.gz && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bash_profile && \ source ~/.bash_profile && \ go version
Установка и запуск
Клонируем репозиторий проекта с нодой
git clone https://github.com/Stride-Labs/stride.git
Переходим в папку с проектом, подтягиваем и переключаемся на последнюю версию и собираем бинарные файлы
cd stride git checkout 90859d68d39b53333c303809ee0765add2e59dab make build
Переносим исполняемый файл в директорию bin
mv $HOME/stride/build/strided /usr/local/bin/
MONIKER=вводим свое имя CHAIN_ID=STRIDE-TESTNET-4
Сохраняем переменные, , перезагружаем .bash_profile и проверяем значения переменных
echo "export MONIKER="${MONIKER}"" >> $HOME/.bash_profile echo "export CHAIN_ID="${CHAIN_ID}"" >> $HOME/.bash_profile source $HOME/.bash_profile echo -e "\nmoniker > ${MONIKER}.\n" echo -e "\nchain_id > ${CHAIN_ID}.\n"
strided init "$MONIKER" --chain-id="$CHAIN_ID" --overwrite
SEEDS="d2ec8f968e7977311965c1dbef21647369327a29@seedv2.poolparty.stridenet.co:26656" PEERS="2771ec2eeac9224058d8075b21ad045711fe0ef0@34.135.129.186:26656,a3afae256ad780f873f85a0c377da5c8e9c28cb2@54.219.207.30:26656,328d459d21f82c759dda88b97ad56835c949d433@78.47.222.208:26639,bf57701e5e8a19c40a5135405d6757e5f0f9e6a3@143.244.186.222:16656,f93ce5616f45d6c20d061302519a5c2420e3475d@135.125.5.31:54356" sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.stride/config/config.toml sed -i.bak "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/;" $HOME/.stride/config/config.toml sed -i "s/^seeds *=.*/seeds = \"$SEEDS\"/;" $HOME/.stride/config/config.toml
sed -i "s/pruning *=.*/pruning = \"custom\"/g" $HOME/.stride/config/app.toml sed -i "s/pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/g" $HOME/.stride/config/app.toml sed -i "s/pruning-interval *=.*/pruning-interval = \"10\"/g" $HOME/.stride/config/app.toml sed -i.bak -e "s/indexer *=.*/indexer = \"null\"/g" $HOME/.stride/config/config.toml
Скачиваем файл генезиса и сбрасываем данные
wget -qO $HOME/.stride/config/genesis.json https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json strided tendermint unsafe-reset-all
wget -O $HOME/.stride/config/addrbook.json "https://raw.githubusercontent.com/StakeTake/guidecosmos/main/stride/STRIDE-TESTNET-4/addrbook.json"
printf "[Unit] Description=Strided Node After=network.target [Service] User=$USER Type=simple ExecStart=$(which strided) start Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target" > /etc/systemd/system/strided.service
sudo systemctl daemon-reload sudo systemctl enable strided sudo systemctl restart strided
sudo journalctl -u strided -f
curl -s localhost:26657/status | jq .result.sync_info.catching_up
Вывод "false" означает завершение синхронизации, можно переходить к созданию кошелька
Для ускорения синхронизации, можно стартовать со стейт синка
sudo systemctl stop strided
strided tendermint unsafe-reset-all --home $HOME/.stride peers="73f15ad99a0ac6e60cda2b691bc5b71cd7f221bc@141.95.124.151:20086" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.stride/config/config.toml SNAP_RPC=141.95.124.151:20087 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ 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/.stride/config/config.toml
sudo systemctl daemon-reload && sudo systemctl enable strided && \ sudo systemctl restart strided && sudo journalctl -u strided -f -o cat
Дополнительно: можно добавить цвета в вывод логов
sudo apt install ccze
sudo journalctl -u strided -f | ccze -A
Создание кошелька
Создаем кошелек, придумываем и подтверждаем пароль
strided keys add wallet
Сохраняем пароль и секретную фразу в надежном месте
Для пополнения кошелька тестовыми токенами, отправляем свой адрес в ветку #token-faucet в формате $faucet-stride:ваш_адрес
strided q bank balances <адрес_кошелька>
Создание валидатора
Создаем переменную с адресом кошелька
WALLET=<адрес вашего кошелька> echo "export WALLET="${WALLET}"" >> $HOME/.bash_profile source $HOME/.bash_profile
Создаем валидатора одной командой и вводим пароль
strided tx staking create-validator \ --moniker="$MONIKER" \ --amount=1000000ustrd \ --fees 300ustrd \ --pubkey=$(strided tendermint show-validator) \ --chain-id=$CHAIN_ID \ --commission-max-change-rate=0.01 \ --commission-max-rate=0.20 \ --commission-rate=0.10 \ --min-self-delegation=1 \ --from=wallet \ --yes
strided keys show wallet --bech val -a
Создаем переменную с адресом валидатора
VALOPER=<адрес вашего валидатора> echo "export VALOPER="${VALOPER}"" >> $HOME/.bash_profile source $HOME/.bash_profile
Делегируем дополнительные токены
strided tx staking delegate $VALOPER 8800000ustrd --from $WALLET \ --chain-id $CHAIN_ID --fees 5000ustrd
Получаем роль валидатора в дискорде. Заходим в эксплорер,вставляем свой адрес кошелька.
Получившуюся ссылку вида - https://poolparty.stride.zone/STRIDE/account/stride1kjs5w4c5r54cujtph78c5q85gsjzhnc5zytfdf - отправляем в ветку #role-request
Установка ноды Gaia (опционально)
Для выполнения ряда заданий нам потребуется также установить ноду Gaia. Я ставил скриптом kj89, за что ему отдельное мерси.
wget -O gaia.sh https://raw.githubusercontent.com/kj89/testnet_manuals/main/stride/GAIA/gaia.sh && chmod +x gaia.sh && ./gaia.sh
Загружаем переменные в систему source $HOME/.bash_profile
Чтобы ускорить синхронизацию, используем state sync
sudo systemctl stop gaiad gaiad tendermint unsafe-reset-all --home $HOME/.gaia SEEDS=""; \ PEERS="5b1bd3fb081c79b7bdc5c1fd0a3d90928437266a@78.107.234.44:36656"; \ sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.gaia/config/config.toml wget -O $HOME/.gaia/config/addrbook.json "https://raw.githubusercontent.com/StakeTake/guidecosmos/main/stride/GAIA/addrbook.json" SNAP_RPC="http://stride.stake-take.com:46657" 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\"\"|" $HOME/.gaia/config/config.toml sudo systemctl restart gaiad && journalctl -u gaiad -f -o cat
Ждем синхронизации. Атрибут catching_up должен быть false.
gaiad status 2>&1 | jq .SyncInfo
Cоздаем кошелек gaia, копируем и сохраняем мнемоник фразу в надежном месте
gaiad keys add $MONIKER
Добавляем адреса кошелька и валидатора в переменные
GAIA_WALLET=$(gaiad keys show $MONIKER -a) GAIA_VALOPER=$(gaiad keys show $MONIKER --bech val -a) echo 'export GAIA_WALLET='${GAIA_WALLET} >> $HOME/.bash_profile echo 'export GAIA_VALOPER='${GAIA_VALOPER} >> $HOME/.bash_profile source $HOME/.bash_profile
Запрашиваем токены в ветке #token-faucet
$faucet-atom:адрес_кошелька_gaia
Проверяем баланс кошелька gaia
gaiad query bank balances $GAIA_WALLET
gaiad tx staking create-validator \ --amount 1000000uatom \ --from $GAIA_WALLET \ --commission-max-change-rate "0.01" \ --commission-max-rate "0.2" \ --commission-rate "0.07" \ --min-self-delegation "1" \ --pubkey $(gaiad tendermint show-validator) \ --moniker $MONIKER \ --chain-id $GAIA_CHAIN_ID
Проверяем транзакцию в эксплорере https://poolparty.stride.zone/GAIA/
Открытие портов
Разрешаем все исходящие соединения и запрещаем все входящие, кроме SSH и используемых нодами Stride и Gaia портов. В моем случае это - 26656 и 26660 для Stride и 23656, 23660 для Gaia.
sudo ufw default allow outgoing sudo ufw default deny incoming sudo ufw allow ssh/tcp sudo ufw limit ssh/tcp sudo ufw allow 26656,26660/tcp sudo ufw allow 23656,23660/tcp sudo ufw enable
Задания
В этом задании нам необходимо застейкать, выкупить и заклеймить токены.
Проверяем наличие тестовых токенов uatom для стейкинга
strided q bank balances $WALLET
Если токенов uatom нет, необходимо их перекинуть с кошелька Gaia (у вас должна быть синхронизирована нода Gaia и запрошены токены Atom с крана)
gaiad tx ibc-transfer transfer transfer channel-0 $WALLET 3000000uatom --from $GAIA_WALLET
Выполняем команду, предварительно добавив количество токенов
strided tx stakeibc liquid-stake <количество> uatom --from $WALLET --chain-id=STRIDE-TESTNET-4
Копируем значение txhash в эксплорер, убеждаемся что транзакция прошла успешно и сохраняем ссылку на транзакцию. Она нам понадобится для подтверждения задания.
По прошествии примерно суток вы получите первые вознаграждения за стейкинг и можно приступать в выкупу
strided tx stakeibc redeem-stake 15000000 GAIA cosmos1phnllyc2syt4d9wkxxwmcmq7euldqcvq7ypw48 --chain-id STRIDE-TESTNET-4 --from $WALLET
Копируем значение txhash в эксплорер, убеждаемся что транзакция прошла успешно и сохраняем ссылку на транзакцию. Она нам понадобится для подтверждения задания.
Проверяем возможность клейма, вставив адрес вашего кошелька в команду
strided q records list-user-redemption-record --limit 10000 --output json | jq '.UserRedemptionRecord | map(select(.sender == "<адрес вашего кошелька>"))'
Как только атрибут isClaimable сменится на true (может занять более суток), можно приступать в третьему шагу.
Клеймим токены, добавляя в команду адрес вашего кошелька и номер эпохи, который можно узнать командой выше.
strided tx stakeibc claim-undelegated-tokens GAIA <номер эпохи> <адрес вашего кошелька> --chain-id STRIDE-TESTNET-4 --from wallet -y
Копируем значение txhash в эксплорер, убеждаемся что транзакция прошла успешно и сохраняем ссылку на транзакцию. Она нам понадобится для подтверждения задания.
К концу выполнения задания у вас должно быть три ссылки на транзакции - стейкинга, выкупа и клейма. Отправляем данные ссылки в форму - https://docs.google.com/forms/d/e/1FAIpQLSeoZEC5kd89KCQSJjn5Zpf-NQPX-Gc8ERjTIChK1BEbiVfMVQ/viewform.
В настоящее время 7 задание также засчитывается при установке Relayer v2.0 (8 задание), поэтому запуск релеера Hermes можно упустить.
Обновляем и устанавливаем необходимые пакеты
sudo apt update && sudo apt upgrade -y sudo apt install unzip -y
Важно! Замените значения RELAYER_NAME, MNEMONIC_STRIDE и MNEMONIC_GAIA на своиК
RELAYER_NAME='ваш_discord_id' CHAIN_ID_A='STRIDE-TESTNET-4' RPC_ADDR_A='127.0.0.1:26657' GRPC_ADDR_A='127.0.0.1:26090' ACCOUNT_PREFIX_A='stride' TRUSTING_PERIOD_A='8hours' DENOM_A='ustrd' MNEMONIC_A='мнемоник фраза кошелька Stride' CHAIN_ID_B='GAIA' RPC_ADDR_B='127.0.0.1:23657' GRPC_ADDR_B='127.0.0.1:9090' ACCOUNT_PREFIX_B='cosmos' TRUSTING_PERIOD_B='8hours' DENOM_B='uatom' MNEMONIC_B='мнемоник фраза кошелька Gaia'
mkdir $HOME/.hermes wget https://github.com/informalsystems/ibc-rs/releases/download/v1.0.0-rc.1/hermes-v1.0.0-rc.1-x86_64-unknown-linux-gnu.tar.gz mkdir -p $HOME/.hermes/bin tar -C $HOME/.hermes/bin/ -vxzf hermes-v1.0.0-rc.1-x86_64-unknown-linux-gnu.tar.gz echo 'export PATH="$HOME/.hermes/bin:$PATH"' >> $HOME/.bash_profile source $HOME/.bash_profile
sudo tee $HOME/.hermes/config.toml > /dev/null <<EOF [global] log_level = 'info' [mode] [mode.clients] enabled = true refresh = true misbehaviour = true [mode.connections] enabled = false [mode.channels] enabled = false [mode.packets] enabled = true clear_interval = 100 clear_on_start = true tx_confirmation = true [rest] enabled = true host = '127.0.0.1' port = 3000 [telemetry] enabled = true host = '127.0.0.1' port = 3001 [[chains]] ### CHAIN_A ### id = '${CHAIN_ID_A}' rpc_addr = 'http://${RPC_ADDR_A}' grpc_addr = 'http://${GRPC_ADDR_A}' websocket_addr = 'ws://${RPC_ADDR_A}/websocket' rpc_timeout = '10s' account_prefix = '${ACCOUNT_PREFIX_A}' key_name = 'wallet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 100000 max_gas = 2500000 gas_price = { price = 0.0025, denom = '${DENOM_A}' } gas_multiplier = 1.1 max_msg_num = 30 max_tx_size = 2097152 clock_drift = '5s' max_block_time = '30s' trusting_period = '${TRUSTING_PERIOD_A}' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = '${RELAYER_NAME}' [chains.packet_filter] policy = 'allow' list = [ ['ica*', '*'], # allow relaying on all channels whose port starts with ica ['transfer', 'channel-0'], ] [[chains]] ### CHAIN_B ### id = '${CHAIN_ID_B}' rpc_addr = 'http://${RPC_ADDR_B}' grpc_addr = 'http://${GRPC_ADDR_B}' websocket_addr = 'ws://${RPC_ADDR_B}/websocket' rpc_timeout = '10s' account_prefix = '${ACCOUNT_PREFIX_B}' key_name = 'wallet' address_type = { derivation = 'cosmos' } store_prefix = 'ibc' default_gas = 100000 max_gas = 2500000 gas_price = { price = 0.0025, denom = '${DENOM_B}' } gas_multiplier = 1.1 max_msg_num = 30 max_tx_size = 2097152 clock_drift = '5s' max_block_time = '30s' trusting_period = '${TRUSTING_PERIOD_B}' trust_threshold = { numerator = '1', denominator = '3' } memo_prefix = '${RELAYER_NAME}' [chains.packet_filter] policy = 'allow' list = [ ['ica*', '*'], # allow relaying on all channels whose port starts with ica ['transfer', 'channel-0'], ] EOF
hermes health-check
В случае возникновении варнов при проверке, проверьте следующие значения атрибута indexer="kx" в обоих конфиг файлах
nano $HOME/.stride/config/config.toml nano $HOME/.gaia/config/config.toml
Проверяем кошельки и наличие токенов
sudo tee $HOME/.hermes/${CHAIN_ID_A}.mnemonic > /dev/null <<EOF ${MNEMONIC_A} EOF sudo tee $HOME/.hermes/${CHAIN_ID_B}.mnemonic > /dev/null <<EOF ${MNEMONIC_B} EOF hermes keys add --chain ${CHAIN_ID_A} --mnemonic-file $HOME/.hermes/${CHAIN_ID_A}.mnemonic hermes keys add --chain ${CHAIN_ID_B} --mnemonic-file $HOME/.hermes/${CHAIN_ID_B}.mnemonic
sudo tee /etc/systemd/system/hermesd.service > /dev/null <<EOF [Unit] Description=hermes After=network-online.target [Service] User=$USER ExecStart=$(which hermes) start Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload sudo systemctl enable hermesd sudo systemctl restart hermesd
journalctl -u hermesd -f -o cat
Задание выполнено. Вы великолепны! Это задание подтверждать не нужно.
RELAYER_NAME='ваш_discord_id' RPC_ADDR_A='127.0.0.1:26657' RPC_ADDR_B='127.0.0.1:23657'
Устанавливаем и инициализируем GO Relayer v2
git clone https://github.com/cosmos/relayer.git cd relayer && git checkout v2.0.0-rc4 make install rly config init --memo $RELAYER_NAME sudo mkdir $HOME/.relayer/chains sudo mkdir $HOME/.relayer/paths
sudo tee $HOME/.relayer/chains/stride.json > /dev/null <<EOF { "type": "cosmos", "value": { "key": "wallet", "chain-id": "STRIDE-TESTNET-4", "rpc-addr": "http://127.0.0.1:26657", "account-prefix": "stride", "keyring-backend": "test", "gas-adjustment": 1.2, "gas-prices": "0.000ustrd", "gas": 200000, "timeout": "20s", "trusting-period": "8h", "output-format": "json", "sign-mode": "direct" } } EOF
sudo tee $HOME/.relayer/chains/gaia.json > /dev/null <<EOF { "type": "cosmos", "value": { "key": "wallet", "chain-id": "GAIA", "rpc-addr": "http://127.0.0.1:23657", "account-prefix": "cosmos", "keyring-backend": "test", "gas-adjustment": 1.2, "gas-prices": "0.000uatom", "gas": 200000, "timeout": "20s", "trusting-period": "8h", "output-format": "json", "sign-mode": "direct" } } EOF
Загружаем конфигурации сетей в релеер
rly chains add --file=$HOME/.relayer/chains/stride.json stride rly chains add --file=$HOME/.relayer/chains/gaia.json gaia
rly chains list
Загружаем кошельки в релеер, вставляяя мнемоник фразы кошельков stride и gaia, фразы должны указываться в кавычках
rly keys restore stride wallet "мнемоник фраза кошелька Stride" rly keys restore gaia wallet "мнемоник фраза кошелька Gaia"
Создаем json файл путей stride-gaia
sudo tee $HOME/.relayer/paths/stride-gaia.json > /dev/null <<EOF { "src": { "chain-id": "STRIDE-TESTNET-4", "client-id": "07-tendermint-0", "connection-id": "connection-0" }, "dst": { "chain-id": "GAIA", "client-id": "07-tendermint-0", "connection-id": "connection-0" }, "src-channel-filter": { "rule": "allowlist", "channel-list": ["channel-0", "channel-1", "channel-2", "channel-3", "channel-4"] } } EOF
rly paths add STRIDE-TESTNET-4 GAIA stride-gaia --file $HOME/.relayer/paths/stride-gaia.json
sudo tee /etc/systemd/system/relayerd.service > /dev/null <<EOF [Unit] Description=GO Relayer v2 Service After=network.target [Service] Type=simple User=$USER ExecStart=$(which rly) start stride-gaia -p events Restart=on-failure RestartSec=10 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Так как мы дальше будем использовать GO Relayer v2 нам нудно остановить Hermes
sudo systemctl stop hermesd sudo systemctl disable hermesd
Запускаем GO Relayer v2 и проверяем логи
sudo systemctl daemon-reload && sudo systemctl enable relayerd sudo systemctl start relayerd && journalctl -u relayerd -f -o cat
Создаем форк репозитория https://github.com/cosmos/relayer и добавляем свои файлы gaia.json, stride.json и stride-gaia.json по следующим путям:
relayer/configs/stride/chains/gaia.json relayer/configs/stride/chains/stride.json relayer/configs/stride/paths/stride-gaia.json
В форму отправляем ссылку на форк репозитория и транзакцию релеера.
Загружаем и собираем бинарные файлы
cd $HOME git clone https://github.com/Stride-Labs/interchain-queries.git cd interchain-queries go build sudo mv interchain-queries /usr/local/bin/icq
cd $HOME && mkdir .icq sudo tee $HOME/.icq/config.yaml > /dev/null <<EOF default_chain: stride-testnet chains: gaia-testnet: key: wallet chain-id: GAIA rpc-addr: http://127.0.0.1:23657 grpc-addr: http://127.0.0.1:9090 account-prefix: cosmos keyring-backend: test gas-adjustment: 1.2 gas-prices: 0.001uatom key-directory: /root/.icq/keys debug: false timeout: 20s block-timeout: "" output-format: json sign-mode: direct stride-testnet: key: wallet chain-id: STRIDE-TESTNET-4 rpc-addr: http://127.0.0.1:26657 grpc-addr: http://127.0.0.1:26090 account-prefix: stride keyring-backend: test gas-adjustment: 1.2 gas-prices: 0.001ustrd key-directory: /root/.icq/keys debug: false timeout: 20s block-timeout: "" output-format: json sign-mode: direct cl: {} EOF
Импортируем кошельки, после каждой команды вводим мнемоник фразу соответствующего кошелька
icq keys restore --chain stride-testnet wallet icq keys restore --chain gaia-testnet wallet
sudo tee /etc/systemd/system/icqd.service > /dev/null <<EOF [Unit] Description=Interchain Query Service After=network-online.target [Service] User=$USER ExecStart=$(which icq) run --debug Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
sudo systemctl daemon-reload sudo systemctl enable icqd sudo systemctl restart icqd
journalctl -u icqd -f -o cat
В форму отправляем ссылку на форк репозитория и транзакцию ретранслированных ICQ пакетов.
Для выполнения задания 10 ваша нода Stride должна проработать минимум 7 дней (не обязательно быть в активе). По истечении недели, отправляем ссылку на вашего валидатора в форму
Запрашиваем токены в дискорде и выполняем команду (в команде указан адрес моего валидатора, если хотите можете заменить его на другой, главное не свой)
strided tx staking delegate stridevaloper1kjs5w4c5r54cujtph78c5q85gsjzhnc5p304pv 100000ustrd --from=$WALLET --chain-id=STRIDE-TESTNET-4 --gas=auto
Копируем хэш транзакции и отправляем в форму
Обновление
sudo systemctl stop strided
Удаляем старые бинарные файлы и собираем новые
cd && rm -rf ~/stride git clone https://github.com/Stride-Labs/stride.git cd ~/stride git checkout 90859d68d39b53333c303809ee0765add2e59dab make build mv $HOME/stride/build/strided /usr/local/bin/
echo -e "\nchain_id > ${CHAIN_ID}.\n"
Если вывод показывает STRIDE-TESTNET-4, то не используем команды в фиолетовых блоках, если STRIDE-TESTNET-2, то выполняем команды подряд.
wget -qO $HOME/.stride/config/genesis.json https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json
sed -i '/CHAIN_ID/d' ~/.bash_profile echo "export CHAIN_ID=STRIDE-TESTNET-4" >> $HOME/.bash_profile source $HOME/.bash_profile
SEEDS="d2ec8f968e7977311965c1dbef21647369327a29@seedv2.poolparty.stridenet.co:26656" PEERS="2771ec2eeac9224058d8075b21ad045711fe0ef0@34.135.129.186:26656,a3afae256ad780f873f85a0c377da5c8e9c28cb2@54.219.207.30:26656,328d459d21f82c759dda88b97ad56835c949d433@78.47.222.208:26639,bf57701e5e8a19c40a5135405d6757e5f0f9e6a3@143.244.186.222:16656,f93ce5616f45d6c20d061302519a5c2420e3475d@135.125.5.31:54356" sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.stride/config/config.toml
strided config chain-id $CHAIN_ID
Если стартовали со стейт синка, отключаем его
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1false|" $HOME/.stride/config/config.toml
strided tendermint unsafe-reset-all --home $HOME/.stride --keep-addr-book
Загружаем снапшот - блок 70715 (опционально)
cd rm -rf ~/.stride/data; \ wget -O - http://snap.stake-take.com:8000/stride.tar.gz | tar xf - mv $HOME/root/.stride/data $HOME/.stride rm -rf $HOME/root
Перезапускаем ноду и проверяем логи
sudo systemctl restart strided && sudo journalctl -u strided -f -o cat|ccze -A
Cоздаем валидатора в сети STRIDE-TESTNET-4
strided tx staking create-validator \ --amount 10000000ustrd \ --from $WALLET \ --commission-max-change-rate "0.01" \ --commission-max-rate "0.2" \ --commission-rate "0.07" \ --min-self-delegation "1" \ --pubkey $(strided tendermint show-validator) \ --moniker $MONIKER \ --chain-id $STRIDE_CHAIN_ID
Обновление Relayer v.2
sudo systemctl stop relayerd
Выполняем по очереди команды ниже и заменяем STRIDE-TESTNET-2 на STRIDE-TESTNET-4
nano $HOME/.relayer/chains/stride.json
nano $HOME/.relayer/paths/stride-gaia.json
Загружаем изменения конфигурации сетей в релеер
rly chains add --file=$HOME/.relayer/chains/stride.json stride
Повторно загружаем кошелек stride в релеер
rly keys restore stride wallet "мнемоник фраза кошелька Stride"
Удаляем старый путь и добавляем новый
rly path delete stride-gaia rly paths add STRIDE-TESTNET-4 GAIA stride-gaia --file $HOME/.relayer/paths/stride-gaia.json
Проверяем сети, если везде стоят галочки - все ок
rly chains list
sudo systemctl daemon-reload && sudo systemctl enable relayerd sudo systemctl restart relayerd && journalctl -u relayerd -f -o cat
Освобождение места на сервере
Если вы установили на одном сервере Stride, Gaia и Hermes, рано или поздно у вас заполнится жесткий диск. В тестовой сети для освобождения места на сервере мы можем удалить всю историю блокчейна и синхронизироваться используя стейт синк. У меня получилось освободить более 120 GB.
Важно! Если ваш валидатор активен, во избежании джейла начинайте выполнение команд после блока, кратного 2000 (например 132 000 или 146 000).
sudo systemctl stop strided
strided tendermint unsafe-reset-all --home $HOME/.stride peers="73f15ad99a0ac6e60cda2b691bc5b71cd7f221bc@141.95.124.151:20086" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.stride/config/config.toml SNAP_RPC=141.95.124.151:20087 LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)); \ 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/.stride/config/config.toml
sudo systemctl daemon-reload && sudo systemctl enable strided && \ sudo systemctl restart strided && sudo journalctl -u strided -f -o cat
sudo systemctl stop gaiad
gaiad tendermint unsafe-reset-all --home $HOME/.gaia SEEDS=""; \ PEERS="5b1bd3fb081c79b7bdc5c1fd0a3d90928437266a@78.107.234.44:36656"; \ sed -i.bak -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.gaia/config/config.toml wget -O $HOME/.gaia/config/addrbook.json "https://raw.githubusercontent.com/StakeTake/guidecosmos/main/stride/GAIA/addrbook.json" SNAP_RPC="http://stride.stake-take.com:46657" 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\"\"|" $HOME/.gaia/config/config.toml
sudo systemctl restart gaiad && journalctl -u gaiad -f -o cat
Удаление ноды Stride
Для удаления ноды воспользуйтесь следующими командами
sudo systemctl stop strided sudo systemctl disable strided rm -rf ~/stride rm -rf ~/.stride rm -rf /etc/systemd/system/strided.service
Полное удаление
Сохраняем файлы кошельков и ключей. Ниже указаны пути к директориям и файлам, которые необходимо сохранить
/root/.stride/config /root/.stride/wallet.info /root/.gaia/config /root/.gaia/keyring-test /root/.relayer/keys /root/.icq/keys
sudo systemctl stop strided sudo systemctl stop gaiad sudo systemctl stop relayerd sudo systemctl stop icqd
Отключаем и удаляем сервисные файлы
sudo systemctl disable strided rm -rf /etc/systemd/system/strided.service sudo systemctl disable gaiad rm -rf /etc/systemd/system/gaiad.service sudo systemctl disable relayerd rm -rf /etc/systemd/system/relayerd.service sudo systemctl disable icqd rm -rf /etc/systemd/system/icqd.service
rm -rf ~/stride && rm -rf ~/.stride rm -rf ~/gaia && rm -rf ~/.gaia rm -rf ~/relayer && rm -rf ~/.relayer rm -rf ~/interchain-queries && rm -rf ~/.icq
unset MONIKER CHAIN_ID WALLET VALOPER GAIA_WALLET GAIA_VALOPER RELAYER_NAME unset CHAIN_ID_A RPC_ADDR_A GRPC_ADDR_A ACCOUNT_PREFIX_A TRUSTING_PERIOD_A unset DENOM_A MNEMONIC_A CHAIN_ID_B RPC_ADDR_B GRPC_ADDR_B ACCOUNT_PREFIX_B unset TRUSTING_PERIOD_B DENOM_B MNEMONIC_B RELAYER_NAME RPC_ADDR_A RPC_ADDR_B
Полезные ссылки и команды
sudo journalctl -u strided -f
curl -s localhost:26657/status | jq .result.sync_info.catching_up
sudo systemctl restart strided
curl localhost:26657/status
strided query staking validators --limit 2000 -o json | jq -r '.validators[] | select(.status=="BOND_STATUS_BONDED") | [.operator_address, .status, (.tokens|tonumber / pow(10; 6)), .description.moniker] | @csv' | column -t -s"," | sort -k3 -n -r
strided query staking validators --limit 2000 -o json | jq -r '.validators[] | select(.status=="BOND_STATUS_UNBONDED") | [.operator_address, .status, (.tokens|tonumber / pow(10; 6)), .description.moniker] | @csv' | column -t -s"," | sort -k3 -n -r