Не актуально
August 4, 2022

Stride (testnet-2) и настройка IBC ретранслятора

Что такое Stride?

Stride - это блокчейн ("зона"), который обеспечивает ликвидность для стабфондовых активов. Используя Stride, вы можете зарабатывать как на ставках, так и на DeFi в экосистеме Cosmos IBC. Прочитайте наш блог "Знакомство со Stride", чтобы узнать больше о том, почему мы создали Stride.

После успешного запуска нашей публичной тестовой сети Stride рады объявить о планах по запуску основной сети в июле. В тестовой сети PoolParty мы поддерживаем жидкий стейкинг stATOM, но видение Stride гораздо шире: мы стремимся обеспечить жидкий стейкинг для всех цепочек в экосистеме Cosmos. Процесс включения новых цепей прост; любой желающий может предложить включение новой цепи через голосование, которое автоматически включит новую цепь, если она будет принята.

При запуске мы отдаем приоритет крупнейшим цепочкам Cosmos: мы начнем с ATOM и 1-2 других цепочек Cosmos с высоким объемом продаж. После запуска мы планируем быстро расширить охват экосистемы Cosmos. Цепи и токены, которые мы планируем принять в этом году, следующие:

Cosmos Hub (stATOM), Juno (stJUNO), Secret (stSCRT), Osmosis (stOSMO), Kava (stKAVA), Oasis (stROSE), Axelar (stAXL), Akash (stAKT), Evmos (stEVMOS), Injective (stINJ), Regen (stREGEN), Sommelier (stSOMM), Band (stBAND), dYdX (stDYDX), Terra V2 (stLUNA), Stargaze (stSTARS), Kujira (stKUJI), Umee (stUMEE), E-Money (stNGM), Crypto.Org (stCRO), Comdex (stCMDX), Sifchain (stEROWAN), Crescent Network (stCRE), MediBloc (stMED), Persistence (stXPRT), Iris (stIRIS), AssetMantle (stMNTL), Sentinel (stDVPN), BitSong (stBTSG), Cheqd (stCHEQ), Chihuahua (stHUAHUA), KiChain (stXKI), Ixo (stIXO), Microtick (stTICK), Fetch.Ai (stFET), Konstellation (stDARC), Desmos (stDSM), Bitcanna (stBCNA), Lum Network (stLUM), Bostrom (stBOOT), Likecoin (stLIKE), Dig Chain (stDIG), RiZON (stATOLO), OmniFlix (stFLIX), Decentr (stDEC), Vidulum (stVDL), Altered Carbon (stACB), Shentu (stCTK), and others.

Как работает Multichain Liquid Staking?

Stride построен с использованием Cosmos SDK и Tendermint и создан с помощью Ignite. Stride позволяет пользователям делать ликвидные ставки на любой IBC-совместимый токен cosmos SDK собственной цепочки. "Под капотом" Stride использует протокол межблокчейн-коммуникаций, межчейн-аккаунты и межчейн-запросы.

Для меня это выглядит, как проект который предоставляет услуги, которых уже мильон, только с более продвинутой частью разработки,объединенным видом доходов, возможно это влияет на дополнительный заработок.

О чем и пишет у себя в блоке команда:

Как и многие из вас, мы любим участвовать в DeFi последние несколько лет и невероятно взволнованы темпами инноваций и новых механизмов, разрабатываемых в экосистеме.

Особенно нас вдохновляет Cosmos. Мы считаем, что IBC станет будущим многоцепочечной коммуникации - даже за пределами Космоса. Мы также считаем, что за цепочками приложений будущее - они более эффективны, масштабируемы и безопасны, чем смарт-контракты. Эта убежденность привела нас сюда 12 месяцев назад. С тех пор мы создали большие, процветающие сообщества в Cosmos и на собственном опыте убедились, насколько невероятны люди в этом пространстве. Мы также начали запускать инфраструктуру стейкинга в экосистеме Cosmos и познакомились с технологией и компромиссами.

Мы поняли, что у стейкинга в Cosmos есть проблема: пользователи вынуждены выбирать между вознаграждением, предлагаемым стейкингом, и доходностью, предлагаемой протоколами DeFi. Ставка на токены обеспечивает безопасность сети и приносит пассивную доходность, но требует блокировки токенов; участие в DeFi позволяет получить более высокую доходность, но подвергает вас большему риску.

Однако после запуска IBCv3 в начале этого года этот компромисс больше не существует. Все технологии, необходимые для поддержки многоцепочечного стейкинга, уже работают.

Гайд по установке и ретрансляции:

Stride обнулят цепочку и нужно будет сделать обновление:

Как валидатор, вы должны будете обновить бинарник, запущенный на вашей машине на высоте блока 155420.

Не надо делать обновление раньше,если не достигнута высота блоков.Это может привести к ошибке!!!

Официальное объявление: https://discord.com/channels/988945059783278602/989518312511787018/1006451260691599402

Чтобы выполнить обновление выполните:

sudo systemctl stop strided
cd $HOME && rm -rf stride
git clone https://github.com/Stride-Labs/stride.git && cd stride
git checkout 90859d68d39b53333c303809ee0765add2e59dab
make build
sudo mv build/strided $(which strided)
sudo systemctl restart strided && journalctl -fu strided -o cat

Обновление!!! STRIDE-TESTNET-4 обязательно обновите сеть!

Загрузите и создайте новые двоичные файлы

systemctl stop gaiad
gaiad tendermint unsafe-reset-all --home $HOME/.gaia
rm -rf $HOME/gaia

cd && git clone https://github.com/Stride-Labs/gaia && cd gaia
git checkout 5b47714dd5607993a1a91f2b06a6d92cbb504721
go build -mod=readonly -trimpath -o $HOME/go/bin ./...

Выполните обновление в сети STRIDE-TESTNET-4 на высоте 70500

sudo systemctl stop strided
cd $HOME && rm -rf stride
git clone https://github.com/Stride-Labs/stride.git && cd stride
git checkout 90859d68d39b53333c303809ee0765add2e59dab
make build
sudo mv build/strided $(which strided)
sudo systemctl restart strided && journalctl -fu strided -o cat

Обновимся и установим зависимости

sudo apt update && sudo apt upgrade -y
sudo 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

Установка Go:

ver="1.18.1" && \
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/Stride-Labs/stride && cd stride
git checkout cf4e7f2d4ffe2002997428dbb1c530614b85df1b
#если не создана папка $HOME/go/bin, то создаем ее
mkdir -p $HOME/go/bin
go build -mod=readonly -trimpath -o $HOME/go/bin ./...

Инициализация ноды

strided init <name_moniker> --chain-id STRIDE-TESTNET-4

Обновление Genesis

wget -qO $HOME/.stride/config/genesis.json "https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json"

Обновление seeds/peers:

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 '/STRIDE_CHAIN_ID/d' ~/.bash_profile
echo "export STRIDE_CHAIN_ID=STRIDE-TESTNET-4" >> $HOME/.bash_profile
source $HOME/.bash_profile
strided config chain-id $STRIDE_CHAIN_ID

Сбрасываем данные цепочки и отключаем синхронизацию состояний

sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1false|" $HOME/.stride/config/config.toml
strided tendermint unsafe-reset-all --home $HOME/.stride

Запускаем сервисный файл

sudo systemctl start strided && journalctl -fu strided -o cat

Проверяем баланс кошелька

strided query bank balances $STRIDE_WALLET_ADDRESS

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

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 $NODENAME \
  --chain-id $STRIDE_CHAIN_ID

Делегируем нашему валидатору

strided tx staking delegate $STRIDE_VALOPER_ADDRESS <AMOUNT>ustrd --from=$WALLET --chain-id=$STRIDE_CHAIN_ID --gas=auto

Устанавливаем бинарный файл

NODE_MONIKER=<YOUR_NODE_MONIKER>

cd || return
rm -rf stride
git clone https://github.com/Stride-Labs/stride.git
cd stride || return
git checkout 4ec1b0ca818561cef04f8e6df84069b14399590e
make build
mkdir -p $HOME/go/bin
sudo cp $HOME/stride/build/strided $HOME/go/bin
strided version #

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

меняем название <name_moniker> вашей ноды на то, которое хотите

strided init $NODE_MONIKER --chain-id STRIDE-TESTNET-2

Скачиваем Genesis

wget -O $HOME/.stride/config/genesis.json "https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json"

Скачиваем addrbook

wget -O $HOME/.stride/config/addrbook.json "https://raw.githubusercontent.com/StakeTake/guidecosmos/main/stride/STRIDE-TESTNET-2/addrbook.json"

Правим конфиг файл

strided config chain-id STRIDE-TESTNET-2

Добавляем peers и seeds, настраиваем сбор газа

sed -i 's|^minimum-gas-prices *=.*|minimum-gas-prices = "0.0001ustrd"|g' $HOME/.stride/config/app.toml

# добавляем seeds/peers в config.toml
external_address=$(wget -qO- eth0.me)
sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.stride/config/config.toml

seeds="c0b278cbfb15674e1949e7e5ae51627cb2a2d0a9@seedv2.poolparty.stridenet.co:26656"
sed -i.bak -e "s/^seeds =.*/seeds = \"$seeds\"/" $HOME/.stride/config/config.toml

peers="17b24705533d633cb3501233a18912ae6cc36a41@stride-testnet.nodejumper.io:28656,48b1310bc81deea3eb44173c5c26873c23565d33@stride-testnet-2-node1.poolparty.stridenet.co:26656,17b24705533d633cb3501233a18912ae6cc36a41@stride-testnet.nodejumper.io:28656,fe32bb1711c38fd5af5ec9ae9db50c694c872194@23.88.77.188:20005,04ef750b843220e6aa93a1b097a4e51e5257a910@135.181.19.231:36656,57e3541c58441e2f6f955eb67b125b09a96086ac@65.21.131.215:26616,d5a52e246601ea09f4543e43aab65fea113ce080@65.108.101.50:60556,a4c25f4b10e33c72749861ed9e142e2986aaaeec@213.239.218.210:26656,8c069ced6c1689c5680efa8f9b26df20b83bcd4d@141.147.7.244:16656,fef5a04c72fb967e4271d0d73cfa8a87234b0dd3@95.217.155.89:16656,b96c807bfcab89fbf50c1d333701bd7ef255f7d6@65.108.58.240:16656,6ccb1b48b804571738abd1c5b376e5fcddc9a1e5@194.163.162.179:26656,c283ee6d2753e432f1103677b9db98a5a66356f6@146.190.26.115:16656,43dac7973942595885bb7930382e4514be19504b@31.187.74.204:16656,469d045599d0812a8a3b1e3e36358b7f8e4e2d53@95.216.218.102:26656"
sed -i -e 's|^seeds *=.*|seeds = "'$seeds'"|; s|^persistent_peers *=.*|persistent_peers = "'$peers'"|' $HOME/.stride/config/config.toml

Pruning (одной командой):

sed -i 's|pruning = "default"|pruning = "custom"|g' $HOME/.stride/config/app.toml
sed -i 's|pruning-keep-recent = "0"|pruning-keep-recent = "100"|g' $HOME/.stride/config/app.toml
sed -i 's|pruning-interval = "0"|pruning-interval = "10"|g' $HOME/.stride/config/app.toml
sed -i 's|^snapshot-interval *=.*|snapshot-interval = 0|g' $HOME/.stride/config/app.toml

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

sudo tee /etc/systemd/system/strided.service > /dev/null <<EOF

[Unit]
Description=strided
After=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF

Запуск

sudo systemctl daemon-reload && \
sudo systemctl enable strided && \
sudo systemctl restart strided && sudo journalctl -u strided -f -o cat

пример правильной работы:

Для того чтобы нагнать высоту блоков воспользуем :

state sync

sudo systemctl stop strided
strided tendermint unsafe-reset-all --home $HOME/.stride --keep-addr-book
SNAP_RPC="https://stride-testnet.nodejumper.io:443"
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
peers="17b24705533d633cb3501233a18912ae6cc36a41@stride-testnet.nodejumper.io:28656"
sed -i 's|^persistent_peers *=.*|persistent_peers = "'$peers'"|' $HOME/.stride/config/config.toml
sed -i -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\"|" $HOME/.stride/config/config.toml
sudo systemctl restart strided
sudo journalctl -u strided -f --no-hostname -o cat

Snapshot

height: 80,622 (5 hours ago); size: 5.2GB; pruning: custom/100/0/10; indexer: null

исходник: https://nodejumper.io/stride-testnet/sync

sudo systemctl stop strided
strided tendermint unsafe-reset-all --home $HOME/.stride --keep-addr-book
cd $HOME/.stride
rm -rf data
SNAP_NAME=$(curl -s https://snapshots2-testnet.nodejumper.io/stride-testnet/ | egrep -o ">STRIDE-TESTNET-2.*\.tar.lz4" | tr -d ">")
curl https://snapshots2-testnet.nodejumper.io/stride-testnet/${SNAP_NAME} | lz4 -dc - | tar -xf -
sudo systemctl restart strided
sudo journalctl -u strided -f --no-hostname -o cat

Ждем синхронизации, создадим или восстановим кошелек:

# создать кошелек( сохраняем мнемонику в безопасное место), 
strided keys add <name_wallet> --keyring-backend os
# восстановить кошелек (после команды вставить seed)
strided keys add <name_wallet> --recover --keyring-backend os
# подключить кошелек ledger
strided keys add <name_wallet> --ledger 

токены просим в дискорде в канале #token-faucet, пример:

$faucet-stride:stride.....
# проверить баланс
strided q bank balances <address>

Проверим синхронизацию и проверяем блоки:

# проверить блоки
strided status 2>&1 | jq ."SyncInfo"."latest_block_height"
# проверить логи
sudo journalctl -u strided -f -o cat
# проверить статус
curl localhost:26657/status

Ждем значение "catching_up": false

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

strided tx staking create-validator \
--chain-id STRIDE-TESTNET-2 \
--commission-rate 0.05 \
--commission-max-rate 0.2 \
--commission-max-change-rate 0.1 \
--min-self-delegation "1000000" \
--amount 1000000ustrd \
--pubkey $(strided tendermint show-validator) \
--moniker "<name_moniker>" \
--from <name_wallet> \
--fees 555ustrd

Cохраняем priv_validator_key.json !!!

Делегация токенов (1 STRD):

strided tx staking delegate <valoper_address> 1000000ustrd --from <name_wallet> --fees 500ustrd -y
# выбраться из тюрьмы
strided tx slashing unjail --from <name_wallet> --fees 500ustrd -y
# отправить монеты на другой адрес
strided tx bank send <name_wallet> <address> 1000000ustrd --fees 500ustrd -y
# ределегирование на другого валидатора
strided tx staking redelegate <src-validator-addr> <dst-validator-addr> 1000000ustrd --from <name_wallet> --fees 500ustrd -y
# собрать комиссионные + реварды
strided tx distribution withdraw-rewards <valoper_address> --from <name_wallet> --fees 500ustrd --commission -y

Настройка IBC

Для проведения манимуляций по IBC нужно два синхронизированных узла #Stride и #GAIA. На кошельках должны быть монеты и два узла должны находиться на одном сервере.

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

NODENAME=<YOUR_MONIKER_NAME_GOES_HERE>

Сохраняйте и импортируйте переменные в систему

GAIA_PORT=23
echo "export NODENAME=$NODENAME" >> $HOME/.bash_profile
if [ ! $WALLET ]; then
	echo "export WALLET=wallet" >> $HOME/.bash_profile
fi
echo "export GAIA_CHAIN_ID=GAIA" >> $HOME/.bash_profile
echo "export GAIA_PORT=${GAIA_PORT}" >> $HOME/.bash_profile
source $HOME/.bash_profile

Апдейт

sudo apt update && sudo apt upgrade -y

Установка зависимостей

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

Скачиваем бинарный файл

cd $HOME
git clone https://github.com/Stride-Labs/gaia.git
cd gaia
git checkout 5b47714dd5607993a1a91f2b06a6d92cbb504721
make build
sudo cp $HOME/gaia/build/gaiad /usr/local/bin

Правим конфиг

gaiad config chain-id $GAIA_CHAIN_ID
gaiad config keyring-backend test
gaiad config node tcp://localhost:${GAIA_PORT}657

Инициализируем

gaiad init $NODENAME --chain-id $GAIA_CHAIN_ID

Скачиваем адресбук и генезис

wget -qO $HOME/.gaia/config/genesis.json "https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/gaia/gaia_genesis.json"

Ставим сиды и пиры

SEEDS=""
PEERS="ec829f12f6d513384e6c5ae79220455e0d80163c@104.208.67.175:23656,88f9b658a77a1ed7376adbc6d0584da8c1a35f6f@176.124.213.56:23656,b8948a13a8953f864ff43fa31ede14a21e44efdc@88.208.57.200:26656,b3dee7da18fc03c8f9481bad25a06138c7badd8c@86.48.2.74:23656,b7716bc446bd0c636ccb343c408065af71fbb576@159.65.20.94:23656,4f0e774fdf629771045fc95e74145d04e899af92@134.122.96.36:23656,a3720d1999a88056ef74fdb923e27dfd9c24c01d@40.114.118.113:23656,8f7058c8d3ba5b889c9895ed4525cb89e64f0a8b@75.119.133.19:23656,b767515dca0be232fc287e0d274831a8c80fcac7@5.9.147.22:26256,c3c32094135bc9d9148dbcbac52fdace8d01d62c@51.77.108.119:23656,a3b3668f967de210ae31ce779deed03f91074038@185.249.225.35:23656,d241b443f87c613d8e7039acd64ff7c296166b99@38.242.134.205:23656,8e2cf0c23b69924a8442b8102951778bd5254773@38.242.233.25:23656,4e6ba3223ba24e27eccffede205e4cffcbae903a@38.242.135.66:23656,9c86d46e33566001c89d274e2559932a4e98e406@20.90.88.145:23656,ccadfbc7c6204887edc9a6eba5f9beed78ffe9de@149.102.137.76:23656,c24fecd05c85385aaa84e587557285e7dfe38d54@217.160.207.56:23656,c6dcce40e8b8a00f353a642ef0ee3623a333c067@20.230.133.117:23656,964f3d7398196238acd9e26cc96ad7787c7513f6@45.130.104.89:23656,ff3a2a2022b2d53541efc0403af302eae2775da5@51.159.182.149:23656,6567e116f975eb36be8e15598f10917dab831c35@31.207.44.66:23656,853174f1ca8b78fbbfdefd32af7cc1f3fc424ce3@185.182.187.33:23656,6fd97df135f806249b55789d314b1482df38d366@20.213.53.251:23656,2101d45204248d9a8b825a23950370029d5e136e@195.88.87.43:23656,75c0154117e46f29b1eee482d740f0cc73ef76ed@164.92.80.118:23656,f6149bcd125f8972b0dc333c84cfef6fc3b9b54a@20.193.154.140:23656,6b85c6a0b2cdcf05d0ce5b2f6a78728b510fcb01@131.255.179.4:23656,87c1cebe140dbde04644e62a31af7863fa1b4fc5@157.245.0.168:23656,a64faaf6fe45425352524341d2f390ce6c603c09@139.162.2.113:23656,712f37d4e5f080452759bb6f4c7ed1716270584f@20.25.144.37:23656,23e60781c1e71968d7412cb6f45aa7d5648f2517@52.234.146.133:23656,aa3aa0e1244c0503b6d94d7a2ab4554ba0e3fd79@173.212.233.187:23656,7f248115c0636860cfcdfaec5a20f42bc6d622a2@38.242.222.136:23656"
sed -i -e "s/^seeds *=.*/seeds = \"$SEEDS\"/; s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" $HOME/.gaia/config/config.toml

Меняем порты

sed -i.bak -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${GAIA_PORT}658\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${GAIA_PORT}657\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${GAIA_PORT}060\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${GAIA_PORT}656\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${GAIA_PORT}660\"%" $HOME/.gaia/config/config.toml
sed -i.bak -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${GAIA_PORT}317\"%; s%^address = \":8080\"%address = \":${GAIA_PORT}080\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${GAIA_PORT}090\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${GAIA_PORT}091\"%" $HOME/.gaia/config/app.toml

pruning

pruning="custom"
pruning_keep_recent="100"
pruning_keep_every="0"
pruning_interval="50"
sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.gaia/config/app.toml
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.gaia/config/app.toml
sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.gaia/config/app.toml
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.gaia/config/app.toml

Устанавливаем цену за газ

sed -i -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0uatom\"/" $HOME/.gaia/config/app.toml

Enable прометеус

sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.gaia/config/config.toml

Сбрасываем значения цепочки

gaiad tendermint unsafe-reset-all --home $HOME/.gaia

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

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

[Service]
User=$USER
ExecStart=$(which gaiad) start --home $HOME/.gaia
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Запускаем сервисник

sudo systemctl daemon-reload
sudo systemctl enable gaiad
sudo systemctl restart gaiad && sudo journalctl -u gaiad -f -o cat

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

source $HOME/.bash_profile

Далее необходимо убедиться, что ваш валидатор синхронизирует блоки. Для проверки состояния синхронизации вы можете использовать команду ниже:

gaiad status 2>&1 | jq .SyncInfo

State Sync

Вы можете синхронизировать состояние своего узла за несколько минут, выполнив следующие команды

SNAP_RPC1="https://gaia.poolparty.stridenet.co:445" \
&& SNAP_RPC2="https://gaia.poolparty.stridenet.co:445"
LATEST_HEIGHT=$(curl -s $SNAP_RPC2/block | jq -r .result.block.header.height) \
&& BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)) \
&& TRUST_HASH=$(curl -s "$SNAP_RPC2/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \
s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC1,$SNAP_RPC2\"| ; \
s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \
s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.gaia/config/config.toml
gaiad tendermint unsafe-reset-all --home $HOME/.gaia
sudo systemctl restart gaiad && journalctl -fu gaiad -o cat

Создание кошелька

Для создания нового кошелька вы можете воспользоваться командой, приведенной ниже. Не забудьте сохранить мнемонику

gaiad keys add $WALLET

Восстановление кошелька

gaiad keys add $WALLET --recover

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

gaiad keys list

Объявили переменные:

GAIA_WALLET_ADDRESS=$(gaiad keys show $WALLET -a)
GAIA_VALOPER_ADDRESS=$(gaiad keys show $WALLET --bech val -a)
echo 'export GAIA_WALLET_ADDRESS='${GAIA_WALLET_ADDRESS} >> $HOME/.bash_profile
echo 'export GAIA_VALOPER_ADDRESS='${GAIA_VALOPER_ADDRESS} >> $HOME/.bash_profile
source $HOME/.bash_profile

Ставим валидатора

gaiad tx staking create-validator \
  --amount 1000000uatom \
  --from $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 $NODENAME \
  --chain-id $GAIA_CHAIN_ID

Удалить ноду

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

Информация

# проверить блоки
gaiad status 2>&1 | jq ."SyncInfo"."latest_block_height"

# проверить логи
sudo journalctl -u gaiad -f -o cat

# проверить статус
curl localhost:23657/status

# проверить баланс
gaiad q bank balances <address>

Если после старта нода долго не может подцепиться к пирам, то ищем новые пиры или просим addrbook.json в дискорд

# стопаем ноду, удаляем адресную книгу и сбрасываем данные
sudo systemctl stop gaiad
rm $HOME/.gaia/config/addrbook.json
gaiad tendermint unsafe-reset-all --home $HOME/.gaia
sudo systemctl daemon-reload && \
sudo systemctl enable gaiad && \
sudo systemctl restart gaiad && sudo journalctl -u gaiad -f -o cat

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

Проверка логов

journalctl -fu gaiad -o cat

Старт сервиса

sudo systemctl start gaiad

Стоп сервиса

sudo systemctl stop gaiad

Рестарт

sudo systemctl restart gaiad

IBC ретранслятор

Обновляемся

sudo apt update && sudo apt upgrade -y

Установка зависимости

sudo apt install unzip -y

Настройка

Все приведенные ниже настройки являются примером для IBC Relayer между stride STRIDE-TESTNET-4 и juno GAIA testnets. Пожалуйста, заполните их своими собственными значениями.

RELAYER_NAME='dae#1235' # используйте имя из дискорда
sed -i.bak -E "s|^(memo_prefix[[:space:]]+=[[:space:]]+).*$|\1\"${RELAYER_NAME}\"|" $HOME/.hermes/config.toml
systemctl restart hermesd

В директориях app.toml ищем значение gPRC конфигурации для двух проектов и вставте в строку RPC_ADDR_A= аналогично ищем в config.toml ищем значение laddr для двух проектов и вставляем в строку CHAIN_ID_A=

Цепочка 1

Замените <mnemonica> за свою фразу из Stride кошелька

CHAIN_ID_A='STRIDE-TESTNET-2'
RPC_ADDR_A='127.0.0.1:16657'
GRPC_ADDR_A='127.0.0.1:16090'
ACCOUNT_PREFIX_A='stride'
TRUSTING_PERIOD_A='8hours'
DENOM_A='ustrd'
MNEMONIC_A='<mnemonica>'

Цепочка 2

Замените <mnemonica> за свою фразу из GAIA кошелька

CHAIN_ID_B='GAIA'
RPC_ADDR_B='127.0.0.1:23657'
GRPC_ADDR_B='127.0.0.1:23090'
ACCOUNT_PREFIX_B='cosmos'
TRUSTING_PERIOD_B='8hours'
DENOM_B='uatom'
MNEMONIC_B='<mnemonica>'

Создаем директорию для гермеса

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

Должно быть так:

Восстановление кошельков с помощью мнемонических файлов

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

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

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

Вариант правильной работы:

Зарегистрировать канал

hermes create channel --a-chain ${CHAIN_ID_A} --b-chain ${CHAIN_ID_B} --a-port transfer --b-port transfer --order unordered --new-client-connection

Выходные данные должны предоставить вам всю информацию о каналах, которые были созданы для текущих цепочек.

Не обращаем внимание на ошибки, транзакции прошли!

Выполните передачу токена с помощью IBC Relayer

Все приведенные ниже команды являются лишь примерами

strided tx ibc-transfer transfer transfer channel-0 cosmos18zc650rzlzm2l75kprlz7wv6f60nuqsf02jx2p 666ustrd --from $WALLET --fees 500ustrd

Отправлять токены uatom с GAIA на STRIDE TESTNET-2

gaiad tx ibc-transfer transfer transfer channel-0 stride1agh2yhffn9qk39k3a4nkfaehz2ehch6qxhtj2s 666uatom --from $WALLET --fees 500uatom