Сompleted testnets
July 31, 2022

Stride: Installation guide (Testnet is over)

Stride — блокчейн, который обеспечивает ликвидность для застейканных активов экосистемы Cosmos. Используя Stride, пользователи смогут одновременно стейкать и учавствовать в DeFi. Миссия проекта - предоставить лучший и безопасный ликвидный стекинг для пользователей экосистемы Cosmos.

В конце июня 2022 года проект закрыл сид раунд. Сумма инвестиций на данный момент не известна, однако список инвесторов интересный: Pantera Capital, Cosmostation, Distributed Global и другие.

Список заданий

Форма для подтверждения заданий

Обсуждаем и делимся мнением в дискорде Nodera

DYOR:

Сrunchbase
Website
Discord
Whitepaper

Оглавление


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

Оглавление

Согласно официальной документации, требования к серверу составляют 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

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

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

Cкачиваем address book

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

Создаем валидатора gaia

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

Задания

Задание 6. Stake, redeem & claim

Оглавление

В этом задании нам необходимо застейкать, выкупить и заклеймить токены.

  • Шаг 1. Stake

Проверяем наличие тестовых токенов 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 в эксплорер, убеждаемся что транзакция прошла успешно и сохраняем ссылку на транзакцию. Она нам понадобится для подтверждения задания.

  • Шаг 2. Redeem

По прошествии примерно суток вы получите первые вознаграждения за стейкинг и можно приступать в выкупу

strided tx stakeibc redeem-stake 15000000 GAIA cosmos1phnllyc2syt4d9wkxxwmcmq7euldqcvq7ypw48 --chain-id STRIDE-TESTNET-4 --from $WALLET

Копируем значение txhash в эксплорер, убеждаемся что транзакция прошла успешно и сохраняем ссылку на транзакцию. Она нам понадобится для подтверждения задания.

  • Шаг 3. Claim

Проверяем возможность клейма, вставив адрес вашего кошелька в команду

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. Запуск релеера Hermes

Оглавление

В настоящее время 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'

Загружаем Hermes

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

Создаем конфиг Hermes

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

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

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

Запускаем Hermes

sudo systemctl daemon-reload
sudo systemctl enable hermesd
sudo systemctl restart hermesd

Проверяем логи

journalctl -u hermesd -f -o cat

Задание выполнено. Вы великолепны! Это задание подтверждать не нужно.

Задание 8. Relayer v2

Оглавление

Обновляем переменные

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

Создаем json файл сети stride

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

Создаем json файл сети gaia

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

В форму отправляем ссылку на форк репозитория и транзакцию релеера.


Задание 9. Ретрансляция интерчейн запросов

Оглавление

Загружаем и собираем бинарные файлы

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

Через 5 минут проверяем логи

journalctl -u icqd -f -o cat

В форму отправляем ссылку на форк репозитория и транзакцию ретранслированных ICQ пакетов.


Задание 10. Запуск ноды

Оглавление

Для выполнения задания 10 ваша нода Stride должна проработать минимум 7 дней (не обязательно быть в активе). По истечении недели, отправляем ссылку на вашего валидатора в форму


Задание 11. Делегация другому валидатору

Оглавление

Запрашиваем токены в дискорде и выполняем команду (в команде указан адрес моего валидатора, если хотите можете заменить его на другой, главное не свой)

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).

Команды для Stride

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

Команды для Gaia

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

Nodera

Telegram | Discord | Twitter