Stride (testnet-2) и настройка IBC ретранслятора
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
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
wget -qO $HOME/.stride/config/genesis.json "https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json"
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
wget -O $HOME/.stride/config/genesis.json "https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json"
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
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 !!!
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_profilesudo 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.tomlpruning
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