April 28, 2023

Установка нод Celestia, настройка Rollup

Всем привет в эфире MMS !

Сегодня мы разберем установку всех нод Celestia (Validator, Bridge, Full, Light).
Мы попытаемся разобрать, утилитарность каждой ноды, потому что, если "Validator node" - это что-то привычное для экосистемы Cosmos, ибо валидаторы есть в каждом проекте, то с Bridge, Full и Light не все так просто и однозначно.

Так же мы поднимем свой Rollup и локальную сеть Celestia и даже напишем небольшой текстовый запрос к нему приступим.

Вся основная информация взята с официальных источников:

https://docs.celestia.org/
https://rollkit.dev/docs/intro/

https://docs.ignite.com/

Системные требования

Для Validator node

  • Memory: 8 GB RAM
  • CPU: 6 cores
  • Disk: 500 GB SSD Storage
  • Bandwidth: 1 Gbps for Download/1 Gbps for Upload

Для Light node

  • Memory: 2 GB RAM
  • CPU: Single Core
  • Disk: 25 GB SSD Storage
  • Bandwidth: 56 Kbps for Download/56 Kbps for Upload

Для Bridge node

  • Memory: 8 GB RAM
  • CPU: 6 cores
  • Disk: 1 TB SSD Storage
  • Bandwidth: 1 Gbps for Download/1 Gbps for Upload

Для Full node

  • Memory: 8 GB RAM
  • CPU: Quad-Core
  • Disk: 1 TB SSD Storage
  • Bandwidth: 1 Gbps for Download/1 Gbps for Upload

Part 1

Validator node

Начнем с самого привычного - Validator Node она же, Сonsensus Full node (только без установки валидатора)

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

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

Для начала обновим наш сервер

sudo apt update && sudo apt upgrade -y

Устанавливаем дополнительные пакеты

sudo apt install make clang git pkg-config libssl-dev build-essential git gcc chrony curl jq ncdu bsdmainutils htop net-tools lsof fail2ban wget -y

Устанавливаем go и проверяем версию

ver="1.20.2" && \ 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

Устанавливаем переменные

CELESTIA_CHAIN="blockspacerace-0" CELESTIA_MONIKER="your_name" CELESTIA_WALLET="your_name"

Добавляем их в .bash_profile

echo 'export CELESTIA_CHAIN='${CELESTIA_CHAIN} >> $HOME/.bash_profile echo 'export CELESTIA_MONIKER='${CELESTIA_MONIKER} >> $HOME/.bash_profile echo 'export CELESTIA_WALLET='${CELESTIA_WALLET} >> $HOME/.bash_profile source $HOME/.bash_profile

Клонируем репозиторий и билдим бинарник

cd $HOME/celestia-app/ git clone https://github.com/celestiaorg/celestia-app.git git checkout v0.12.1 make install mv $HOME/go/bin/celestia-appd /usr/local/bin

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

celestia-appd init $CELESTIA_MONIKER --chain-id blockspacerace-0

Скачиваем genesis.json

wget -O $HOME/.celestia-app/config/genesis.json "https://raw.githubusercontent.com/celestiaorg/networks/master/blockspacerace/genesis.json"

Настройка прунинга (опционально)

pruning="custom" pruning_keep_recent="1000" pruning_interval="10"

sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.celestia-app/config/app.toml sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.celestia-app/config/app.toml

Настройка цены gas

sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.001utia\"/;" ~/.celestia-app/config/app.toml

Добавляем seeds и peers

peers="be935b5942fd13c739983a53416006c83837a4d2@178.170.47.171:26656,cea09c9ac235a143d4b6a9d1ba5df6902b2bc2bd@95.214.54.28:20656,5c9cfba00df2aaa9f9fe26952e4bf912e3f1e8ee@195.3.221.5:26656,7b2f4cb70f04f2e9befb6ace66ce1ac7b3bea5b4@178.239.197.179:26656,7ee2ba21197d58679cfc1517b5bbc6465bed387a@65.109.67.25:26656,dc0656ab58280d641c8d10311d86627255bec8a1@148.251.85.27:26656,ccbd6262d0324e2e858594b639f4296cc4952c93@13.57.127.89:26656,a507b2bda6d2974c84ae1e8a8b788fc9e44d01f7@142.132.131.184:26656,9768290c60a746ee97ef1a5bcb8bee69066475e8@65.109.80.150:2600" sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.celestia-app/config/config.toml

seeds="0293f2cf7184da95bc6ea6ff31c7e97578b9c7ff@65.109.106.95:26656,8f14ec71e1d712c912c27485a169c2519628cfb6@celest-test-seed.theamsolutions.info:22256" sed -i.bak -e "s/^seeds *=.*/seeds = \"$seeds\"/" $HOME/.celestia-app/config/config.toml

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

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

[Service] User=root ExecStart=$(which celestia-appd) start Restart=on-failure RestartSec=3 LimitNOFILE=65535

[Install] WantedBy=multi-user.target EOF

Запускаем и смотрим логи

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

Создаем кошелек, либо восстанавливаем

celestia-appd keys add $CELESTIA_WALLET celestia-appd keys add $CELESTIA_WALLET --recover

Добавляем в переменную адрес кошелька и экспортируем в .bash_profile

CELESTIA_ADDR=$(celestia-appd keys show $CELESTIA_WALLET -a) echo 'export CELESTIA_ADDR='${CELESTIA_ADDR} >> $HOME/.bash_profile source $HOME/.bash_profile

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

В данном тестнете, имеют допуск только отобранные участники

celestia-appd tx staking create-validator \ --amount 1000000utia \ --from $CELESTIA_WALLET \ --commission-max-change-rate "0.05" \ --commission-max-rate "0.2" \ --commission-rate "0.1" \ --min-self-delegation "1" \ --pubkey $(celestia-appd tendermint show-validator) \ --moniker $CELESTIA_MONIKER \ --chain-id $CELESTIA_CHAIN

Добавляем в переменную адрес валидатора и экспортируем в .bash_profile

CELESTIA_VALOPER=$(celestia-appd keys show $CELESTIA_WALLET --bech val -a) echo 'export CELESTIA_VALOPER='${CELESTIA_VALOPER} >> $HOME/.bash_profile source $HOME/.bash_profile

Поскольку от Validator node особо нету смысла в данном тестнете ( речь идет о не допущенных пользователях ) всегда можно сделать ноду для ендпоинтов RPC/API/GPRC, сейчас мы покажем, как это можно осуществить

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

Включаем API/GRPC/RPC

sed -i.bak -e "117 s/^enable *=.*/enable = true/" $HOME/.celestia-app/config/app.toml -e "183 s/^enable *=.*/enable = true/" $HOME/.celestia-app/config/app.toml && cat -n $HOME/.celestia-app/config/app.toml | sed -n '117p;183p'

sed -i.bak -e '91 s/127.0.0.1/0.0.0.0/' $HOME/.celestia-app/config/config.toml && cat -n $HOME/.celestia-app/config/config.toml | sed -n '91p'

Для того, что бы узнать ваш ендпоинт, вам нужно всего лишь подставить ваш IP сервера к определенному порту, IP сервера - это "32.274.125.73" выглядеть это будет так:

Напоминаю, все это мы делаем на дефолтных портах, если у вас кастомные - меняйте на свои

RPC: 32.274.125.73:26657 API: 32.274.125.73:1317 GRPC: 32.274.125.73:9090

Удаление Validator node / Consensus Full node

cd $HOME/ rm /usr/local/bin/celestia-appd rm -rf .celestia-app/ rm -rf celestia-app/ rm /etc/systemd/system/celestia-appd.service

Part 2

Bridge/Full/Light nodes

Перейдем к следующим видам узлов в Celestia - Light, Bridge, Full

Сейчас мы попробуем сжато рассказать о них вам

Light node Легкие клиенты проводят выборку доступности данных в сети Data Availability.

Bridge node Осуществляют мостовое соединение блоков между сетью Data Availability и сетью Consensus.

Fulll node Осуществляет хранение всех данных в сети Data Availability , но не подключен к Consensus.

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

Качаем репозиторий, билдим бинарник для узлов и cel-key для генерации ключей.

После команды "make install" бинарник будет лежать по пути /usr/local/bin/celestia

cd $HOME/ git clone https://github.com/celestiaorg/celestia-node.git cd celestia-node git checkout tags/v0.9.3 make build make install make cel-key

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

#Для Light celestia light init --core.ip https://rpc-celestia-testnet.mms.team/ --p2p.network blockspacerace #Для Bridge celestia bridge init --core.ip https://rpc-celestia-testnet.mms.team/ --p2p.network blockspacerace #Для Full celestia full init --core.ip https://rpc-celestia-testnet.mms.team/ --p2p.network blockspacerace

При инициализации создаются кошельки, но если вы хотите его поменять / сделать еще один, команда будет ниже, если вы хотите восстановить кошелек по мнемонике, добавьте дополнительный флаг "--recover" в конец команды

cd celestia-node/ #Для Light ./cel-key add NAME_HERE --keyring-backend test --node.type light --p2p.network blockspacerace #Для Bridge ./cel-key add NAME_HERE --keyring-backend test --node.type bridge --p2p.network blockspacerace #Для Full ./cel-key add NAME_HERE --keyring-backend test --node.type full --p2p.network blockspacerace

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

#Для Light sudo tee /etc/systemd/system/celestia-light.service > /dev/null <<EOF [Unit] Description=Celestia light node After=network-online.target [Service] User=root ExecStart=/usr/local/bin/celestia light start --core.ip https://rpc-celestia-testnet.mms.team/ --core.rpc.port 26660 --core.grpc.port 9090 --keyring.accname my_celes_key --metrics.tls=false --metrics --metrics.endpoint otel.celestia.tools:4318 --gateway --gateway.addr localhost --gateway.port 26667 --p2p.network blockspacerace Restart=on-failure RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target EOF

#Для Bridge sudo tee /etc/systemd/system/celestia-bridge.service > /dev/null <<EOF [Unit] Description=Celestia bridge node After=network-online.target [Service] User=root ExecStart=/usr/local/bin/celestia bridge start --core.ip https://rpc-celestia-testnet.mms.team/ --keyring.accname my_celes_key --core.rpc.port 26657 --core.grpc.port 9090 --metrics.tls=false --metrics --metrics.endpoint otel.celestia.tools:4318 --gateway.port 26659 --p2p.network blockspacerace --gateway --gateway.addr localhost Restart=on-failure RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target EOF

#Для Full sudo tee /etc/systemd/system/celestia-full.service > /dev/null <<EOF [Unit] Description=Celestia full node After=network-online.target [Service] User=root ExecStart=/usr/local/bin/celestia full start --core.ip https://rpc-celestia-testnet.mms.team/ --keyring.accname my_celes_key --core.rpc.port 26657 --core.grpc.port 9090 --metrics.tls=false --metrics --metrics.endpoint otel.celestia.tools:4318 --gateway.port 26659 --p2p.network blockspacerace --gateway --gateway.addr localhost Restart=on-failure RestartSec=3 LimitNOFILE=4096 [Install] WantedBy=multi-user.target EOF

Иногда могут возникать проблемы с запуском из-за RPC ноды, в таком случае альтернативные варианты можете поискать тут и сделать изменение в сервисе, во флаге "--core.ip" после чего перезапустить ноду

Включаем сервисный файл, рестартим и смотрим логи

#Для Light systemctl daemon-reload && \ systemctl enable celestia-light.service && \ systemctl restart celestia-light.service && \ journalctl -fu celestia-light.service -o cat

#Для Bridge systemctl daemon-reload && \ systemctl enable celestia-bridge.service && \ systemctl restart celestia-bridge.service && \ journalctl -fu celestia-bridge.service -o cat

#Для Full systemctl daemon-reload && \ systemctl enable celestia-full.service && \ systemctl restart celestia-full.service && \ journalctl -fu celestia-full.service -o cat

Часть 3

Build/Deploy sovereign Rollup using Rollkit / Run local chain

В этой части гайда, мы попробуем рассказать о том, как сделать Rollup и завести локальную цепь Celestia

спойлер - проще, чем кажется

Для начала установим переменные и экспортируем их в .bash_profile

BLOCKCHAIN_NAME="NAME_HERE" ADDR_PREFIX="PREFIX_HERE"

echo 'export BLOCKCHAIN_NAME='${BLOCKCHAIN_NAME} >> $HOME/.bash_profile echo 'export ADDR_PREFIX='${ADDR_PREFIX} >> $HOME/.bash_profile source $HOME/.bash_profile

Далее установим Docker, чуть позже он нам понадобится для старта локальной цепи Celestia

curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh

После установки Docker, запускаем локальную цепь скриптом

docker run --platform linux/amd64 -p 26650:26657 -p 26659:26659 ghcr.io/rollkit/local-celestia-devnet:v0.9.1

Проверяем, работает ли он, обычным запросом

Если все ок, он выведет такой ответ: {"denom":"utia","amount":"999995000000000"}

curl -X GET http://0.0.0.0:26659/balance

После запуска блокчейна, открываем отдельную сессию в нашем терминале и переходим туда

Все это можно делать через софт screen, но поскольку гайд для этого Rollup, не очень длинный, мы обойдемся без него, если вам удобнее работать со screen, все в ваших руках ;)

Давайте теперь разберемся с такой штукой, как Ignite CLI:

Ignite CLI - это простой в использовании инструмент CLI для создания и обслуживания суверенных блокчейнов, специфичных для конкретного приложения. Блокчейны, созданные с помощью Ignite CLI, используют Cosmos SDK и Tendermint.

Если хотите поближе познакомиться с данным софтом, велком сюда

Далее нам необходимо установить Ignite CLI

curl https://get.ignite.com/cli! | bash

Проверяем, что все ок, а заодно и версию

ignite version

Далее задаем имя нашего блокчейна и префикс адресов

Далее будем показывать какую-то часть со скриншотами, что бы не возникало вопросов

cd $HOME ignite scaffold chain $BLOCKCHAIN_NAME --address-prefix $ADDR_PREFIX

Вывод должен быть примерно такой

Для дальнейшего понимания, что мы делаем, надо рассказать, что такое Rollkit, как обычно сжато, если интересно - читайте здесь

Rollkit - это фреймворк для Rollup, который дает разработчикам свободу развертывания роллапов во всем модульном стеке, открывая новые возможности для быстрых экспериментов и инноваций.

Далее переходим в только что созданную директорию

В нашем случае - это mms-team

cd $BLOCKCHAIN_NAME

Сейчас нам необходимо заменить различные модули Tendermint на Rollkit

go mod edit -replace github.com/cosmos/cosmos-sdk=github.com/rollkit/cosmos-sdk@v0.46.7-rollkit-v0.7.3-no-fraud-proofs go mod edit -replace github.com/tendermint/tendermint=github.com/celestiaorg/tendermint@v0.34.22-0.20221202214355-3605c597500d go mod tidy go mod download

Качаем скрипт, который запустит наш блокчейн

wget https://raw.githubusercontent.com/rollkit/docs/main/docs/scripts/gm/init-local.sh

Добавляем переменные и экспортируем в .bash_profile

Добавим небольшие пояснения DENOM - это название вашей монеты BIN_FILE - это название вашего бинарного файла, который в процессе скрипта сгенерируется, что бы узнать имя вашего бинарного файла, надо всего-лишь добавить букву "d" к вашему BLOCKCHAIN_NAME, в нашем случае это будет mms-teamd

VALIDATOR_NAME=YOUR_VAL_NAME_HERE CHAIN_ID=YOUR_CHAIN_ID_HERE KEY_NAME=YOUR_WALLET_NAME_HERE KEY_2_NAME=YOUR_SECOND_WALLET_NAME_HERE DENOM=YOUR_DENOM_HERE BIN_FILE=YOUR_BLOCKCHAIN_NAMEd

echo 'export VALIDATOR_NAME='${VALIDATOR_NAME} >> $HOME/.bash_profile echo 'export CHAIN_ID='${CHAIN_ID} >> $HOME/.bash_profile echo 'export KEY_NAME='${KEY_NAME} >> $HOME/.bash_profile echo 'export KEY_2_NAME='${KEY_2_NAME} >> $HOME/.bash_profile echo 'export DENOM='${DENOM} >> $HOME/.bash_profile echo 'export BIN_FILE='${BIN_FILE} >> $HOME/.bash_profile source $HOME/.bash_profile

У нас это выглядит так

И редактируем его под наши переменные

sed -i.bak -e "s/^VALIDATOR_NAME*=.*/VALIDATOR_NAME=$VALIDATOR_NAME/" $HOME/mms-team/init-local.sh sed -i.bak -e "s/^CHAIN_ID*=.*/CHAIN_ID=$CHAIN_ID/" $HOME/mms-team/init-local.sh sed -i.bak -e "s/^KEY_NAME*=.*/KEY_NAME=$KEY_NAME/" $HOME/mms-team/init-local.sh sed -i.bak -e "s/^KEY_2_NAME*=.*/KEY_2_NAME=$KEY_2_NAME/" $HOME/mms-team/init-local.sh sed -i.bak -e "9,10 s/stake/$DENOM/" $HOME/mms-team/init-local.sh sed -i.bak -e "s/^gmd/$BIN_FILE/" $HOME/mms-team/init-local.sh

Далее запускаем скрипт

bash init-local.sh

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

Пример ошибки
Кто шарит - да, костыли никому не помешают

Наша новая рабочая директория будет называться так же, как и наш BLOCKCHAIN_NAME, только вначале будет стоять точка ".mms-team/"

Добавим переменную для удобства и экспортируем в .bash_profile

WORK_DIRECTORY=.$BLOCKCHAIN_NAME

echo 'export WORK_DIRECTORY='${WORK_DIRECTORY} >> $HOME/.bash_profile source $HOME/.bash_profile

Командой меняем denom "stake", на нужный

sed -i.bak -e "s/stake/$DENOM/" $HOME/$WORK_DIRECTORY/config/genesis.json

Далее снова запускаем скрипт

bash init-local.sh

В процессе выполнения скрипта будут возникать некоторые ошибки, так же скрипт нас спросит о выполнении некоторых действий, везде отвечаем "n"

Пример ошибок

Вуаля, мы запустили свой блокчейн, со своими переменными

Пример старта цепи

Что бы ничего не выдумать с сервисными файлами или со screen переходим в отдельную сессию терминала

Теперь в вашем распоряжении ваш личный Rollup, на локальной цепи Celestia

Можете делать, все что вам вздумается, тестировать разные штуки, которые боялись раньше в различных дьюнетах/тестнетах/мейнетах, все работает точно так же, как и в самом обычном космофорке

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

#Смотрим кошельки
$BIN_FILE keys list --keyring-backend test

#Смотрим баланс одного из кошельков $BIN_FILE q bank balances YOUR_ADDR_HERE

#Смотрим активсет нашего блокчейна $BIN_FILE q staking validators -o json --limit=1000 \ | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \ | jq -r '.tokens + " - " + .description.moniker' \ | sort -gr | nl

Пример, как это выглядит у нас

В общем здесь, вы можете воплотить все ваши самые смелые фантазии в реальность

Остановка локальной цепи Celestia и остановка нашего Rollup
Далее нам нужно остановить сети, которые мы запустили, для этого переходим во вкладку с нашим Rollup и нажимаем комбинацию клавиш "ctrl + c", после чего он остановится

Остановка и удаление контейнера с локальной цепью Celestia и остановка Rollup

Что бы остановить Rollup, который мы запустили, для этого переходим во вкладку с нашим Rollup и нажимаем комбинацию клавиш "ctrl + c", после чего он остановится

Проверяем активные контейнеры командой

docker ps -a

Выглядеть будет так

Пример рабочего контейнера

В колонке "Container ID", соответственно мы видим наш id контейнера, копируем его. Что бы остановить и удалить его, пишем следующие команды:

docker stop YOUR_CONTAINER_ID && \ docker rm YOUR_CONTAINER_ID

Часть 3.1

Настройка текстового модуля

Теперь, когда мы научились запускать наш блокчейн и локальную цепь Celestia мы сделаем так, что бы к нам в бинарный файл добавилась дополнительная команда, с выводом какого-либо текста.

Для начала нам необходимо запустить Celestia Light node, процесс установки описан в Part 2

Создаем запрос, отвечаем "y" на вопрос от Ignite

cd $HOME/$BLOCKCHAIN_NAME/ ignite scaffold query $BLOCKCHAIN_NAME --response text

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

Идем по такому пути, у вас он будет немного другой, как и конечное название файла, по сути тут будет везде имя вашего блокчейна Наш путь выглядит так:

nano x/mmsteam/keeper/query_mms_team.go Для тех кто не в курсе, двукратное нажатие кнопки "tab" показывает вам, что находится в директории, в таком случае становится гораздо проще искать, пользуйтесь

nano x/YOUR_CATALOG/keeper/query_YOUR_FILENAME.go

Когда вы открыли нужный файл, там нам необходимо добавить наш текст, в самом низу

Добавляем данный текст в фигурные скобки (у вас они будут пустые), все что в кавычках, вы можете спокойно менять на свое усмотрение, мы напишем:

Text: "Join us https://t.me/mmsnodes Peace to all'

Text: "YOUR_TEXT_HERE"

Пример функции

Сохраняем изменения

Качаем новый скрипт по запуску Rollup, только на этот раз мы уже не будем запускать локальную цепь Celestia, мы будем общаться с настоящей тестовой цепью, с помощью LIght Node, установку которой мы описывали выше

wget https://raw.githubusercontent.com/rollkit/docs/main/docs/scripts/gm/init-testnet.sh

Видоизменяем скрипт под наши переменные

sed -i.bak -e "s/^VALIDATOR_NAME*=.*/VALIDATOR_NAME=$VALIDATOR_NAME/" $HOME/mms-team/init-testnet.sh sed -i.bak -e "s/^CHAIN_ID*=.*/CHAIN_ID=$CHAIN_ID/" $HOME/mms-team/init-testnet.sh sed -i.bak -e "s/^KEY_NAME*=.*/KEY_NAME=$KEY_NAME/" $HOME/mms-team/init-testnet.sh sed -i.bak -e "s/stake/$DENOM/" $HOME/mms-team/init-testnet.sh sed -i.bak -e "s/^gmd/$BIN_FILE/" $HOME/mms-team/init-testnet.sh

Удаляем прошлый бинарник и рабочую директорию

rm -r $HOME/go/bin/$BIN_FILE && \ rm -rf $HOME/$WORK_DIRECTORY

Переходим в наш каталог, откуда билдим бинарник и запускаем наш переделанный скрипт

cd $HOME/$BLOCKCHAIN_NAME && \ bash init-testnet.sh

Снова получаем ошибку "denom", как и в прошлый раз, меняем наш genesis

sed -i.bak -e "s/stake/$DENOM/" $HOME/$WORK_DIRECTORY/config/genesis.json

Запускаем снова скрипт и везде отвечаем "n"

bash init-testnet.sh

Наблюдаем удачно запущенный блокчейн, с помощью Rollkit, но на этот раз с выходом в интернет, а не по локальной сети

Пример успешного запуска Rollup

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

Наша команда выглядит таким образом $BIN_FILE q mmsteam mms-team Поясним, за каждое слово в команде BIN_FILE - переменнная с бинарным файлом q - стандартный модуль космоса для запросов mmsteam - наш созданный модуль текстового запроса mms-team - сам запрос

$BIN_FILE q YOUR_QUERY_MODULE YOUR_QUERY

Вывод нашей команды

Как-то так мы научились создавать собственный блокчейн (Rollup), с помощью утилит Ignite и Rollkit, на основе Celestia, научились запускать локальный блокчейн, а так же создавать свои, хоть и простые(надо же с чего-то начинать), модули для своего блокчейна.

Большое спасибо, за внимание и уделенное время

Наш телеграмм канал по нодам — https://t.me/mmsnodes
Наш телеграмм чат по нодам - https://t.me/mmsnodeschat
Наш телеграмм канал по экосистеме Cosmos - https://t.me/cosmochannel_mms

С уважением, MMS_Team