УСТАНОВКА НОДЫ STORY PROTOCOL | NODERUNNER COMMUNITY
Доброго времени суток, дорогой читатель. В этой статье будет подробная и при этом максимально простая инструкция по установке ноды Story Protocol. Давай приступать!
Если ранее ты еще не сталкивался с нодами и не знаешь что это вообще за звери такие, то рекомендую тебе прочитать нашу Gitbook-методичку по нодам "С 0 ДО 100 В НОДАХ". Статья доступна по этой ссылочке, ознакамливайся на здоровье!
Story Protocol — это мировая блокчейн-платформа для интеллектуальной собственности (IP), которая предоставляет возможность токенизации и программирования IP для следующего поколения AI, DeFi и потребительских приложений.
Основные возможности и функции Strory Protocol:
- Токенизация мировой интеллектуальной собственности. IP (интеллектуальная собственность) — это один из самых ценных и обширных активов в мире. Токенизация IP открывает новые возможности для создателей, предоставляя им возможность обмениваться, развивать и распространять своё творчество.
- Монетизация IP в эпоху AI. Создатели должны контролировать свою интеллектуальную собственность, а не платформы или алгоритмы. Story Protocol даёт создателям возможность самостоятельно устанавливать экономические условия использования их IP в AI, что позволяет как самим создателям, так и их сообществам развиваться вместе с AI.
- Программируемая IP для ремиксов и расширений. Разработчики и создатели могут программировать свою IP на платформе Story Protocol, позволяя ей развиваться в разных медиа и платформах. Полностью ончейн-граф IP делает интеллектуальную собственность переносимой и компонуемой между различными приложениями.
Отлично, теперь, когда мы знаем больше подробностей об идее проекта, можно смело приступать к установке ноды. Сначала тебе понадобится сервер, который ты можешь арендовать на прекрасном хостинге AEZA. После регистрации ты получишь бонус 15% к пополнению баланса, который будет действовать 24 часа. Ссылка на AEZA.
Для проекта необходим сервер со следующими харакетристиками:
CPU: 4 ядра; RAM: 8GB; SSD: 200GB; OS: Ubuntu 22.04.
Проходим регистрацию на AEZA по ссылке.
Выбираем "виртуальный сервер":
Нам подойдет тариф PARs-4. Его хватит даже с небольшим запасом, что хорошо, так как сеть Story Protocol активно развивается и лишние ресурсы точно пригодятся:
Далее сервер отобразится у тебя в личном кабинете. На странице своей услуги тебе понадобится IP-адрес сервера, Имя пользователя и пароль. Более подробно ты можешь почитать о серверах в нашей методичке, о которой я писал ранее, а также в этой образовательной статье, которая посвящена серверам.
Теперь нужно установить подключение с арендованным сервером. В NodeRunner мы используем Termius. Termius -топ1 SSH-клиент для подключения к своим серверам для работы с ними. Программа доступна практически на всех устройствах и ты сможешь админить свою ноду даже со своего айфона. Termius можно скачать по этой ссылке.
После установки Termius, необходимо добавить данные от своего сервера для подключения. Делается это следующим образом:
В открывшемся справа окне вписываешь данные от своего сервера как на картинке и нажимаешь "Connect":
Если ты все правильно ввел, то я могу поздравить тебя с правильным подключением к серверу! У тебя должно быть примерно такое окно, у меня просто тема в Termius'е чуть другая:
Начинаем установку ноды. Вписывай команды в терминал своего сервера и жми на Enter после каждого ввода:
# 1. Обновим пакеты на сервере: sudo apt update && sudo apt upgrade -y
В терминале побегут такие строчки из Матрицы:
Подождем выполнение команды. В процессе у тебя откроются розовые окна, в которых необходимо будет нажать Enter чтобы их убрать:
# 2. Установим дополнительные пакеты: sudo apt-get install make build-essential screen unzip lz4 gcc git jq -y
# 3. Запускаем фоновое окно, в дальнейшем объясню зачем оно нужно: screen -S story
У тебя должно было открыться пустое окошко. Если так, то ты на верном пути!
# 4. Устанавливаем GO. Вписываем команды по отдельности: cd $HOME VER="1.23.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" [ ! -f ~/.bash_profile ] && touch ~/.bash_profile echo "export PATH=$PATH:/usr/local/go/bin:~/go/bin" >> ~/.bash_profile source $HOME/.bash_profile [ ! -d ~/go/bin ] && mkdir -p ~/go/bin go version # У меня установилась версия go version go1.23.1.
Теперь надо задать переменные:
# 5. Задаем переменные. Вводим команды по отдельности: echo "export MONIKER="test"" >> $HOME/.bash_profile # Ты можешь заменить test на имя любое другое имя ноды echo "export STORY_CHAIN_ID="odyssey-0"" >> $HOME/.bash_profile echo "export STORY_PORT="52"" >> $HOME/.bash_profile source $HOME/.bash_profile
Скачиваем бинарник. Это один из основных файлов ноды:
# 6. Скачиваем бинарник: cd $HOME rm -rf bin mkdir bin cd bin wget -O geth https://github.com/piplabs/story-geth/releases/download/v0.10.0/geth-linux-amd64 chmod +x geth mv ~/bin/geth ~/go/bin/ mkdir -p ~/.story/story mkdir -p ~/.story/geth
Отлично. Теперь делаем следующие команды:
# 7. Устанавливаем файлы story: cd $HOME rm -rf story git clone https://github.com/piplabs/story cd story git checkout v0.12.1 go build -o story ./client sudo mv ~/story/story ~/go/bin/ story version
Проверим установку файлов через команду для проверки версии ноды:
# Введите в терминале: story version
# 8. Замените test на имя своей ноды: story init --moniker "test" --network odyssey
# 9. Можете ввести все одной командой(скопировать целиком и вставить в терминал): SEEDS="434af9dae402ab9f1c8a8fc15eae2d68b5be3387@story-testnet-seed.itrocket.net:29656" PEERS="c2a6cc9b3fa468624b2683b54790eb339db45cbf@story-testnet-peer.itrocket.net:26656,[email protected]:26656,[email protected]:50656,[email protected]:26656,[email protected]:52656,[email protected]:26656,[email protected]:656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:656,[email protected]:26656,[email protected]:26656,[email protected]:17656,[email protected]:36656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:20656,[email protected]:656,[email protected]:656,[email protected]:26656,[email protected]:656,[email protected]:26656,[email protected]:26656,[email protected]:656,[email protected]:18656" sed -i -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*seeds *=.*/seeds = \"$SEEDS\"/}" \ -e "/^\[p2p\]/,/^\[/{s/^[[:space:]]*persistent_peers *=.*/persistent_peers = \"$PEERS\"/}" $HOME/.story/story/config/config.toml
Теперь надо скачать генезис блок и аддрбук:
# 10. Скачиваем genesis и addrbook: wget -O $HOME/.story/story/config/genesis.json https://server-3.itrocket.net/testnet/story/genesis.json wget -O $HOME/.story/story/config/addrbook.json https://server-3.itrocket.net/testnet/story/addrbook.json
Отредактируем конфигурационный файл:
# 11. Редактирование config.toml: # Вставляем порты(скопируйте целиком и вставьте в терминал): sed -i.bak -e "s%:1317%:${STORY_PORT}317%g; s%:8551%:${STORY_PORT}551%g" $HOME/.story/story/config/story.toml # Скопируйте полностью и вставьте в терминал: sed -i.bak -e "s%:26658%:${STORY_PORT}658%g; s%:26657%:${STORY_PORT}657%g; s%:26656%:${STORY_PORT}656%g; s%^external_address = \"\"%external_address = \"$(wget -qO- eth0.me):${STORY_PORT}656\"%; s%:26660%:${STORY_PORT}660%g" $HOME/.story/story/config/config.toml # Включаем Prometheus и отключаем индексы(так же копируем целиком и вставляем в термниал): sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.story/story/config/config.toml sed -i -e "s/^indexer *=.*/indexer = \"null\"/" $HOME/.story/story/config/config.toml
Теперь, давай создадим сервисные файлы нашей ноды Story Protocol:
# 12. Создаем сервисные файлы ноды: # Сервисный файл geth.service. Скопируйте целиком до строчки EOF и встаьвте в терминал: sudo tee /etc/systemd/system/story-geth.service > /dev/null <<EOF [Unit] Description=Story Geth daemon After=network-online.target [Service] User=$USER ExecStart=$HOME/go/bin/geth --odyssey --syncmode full --http --http.api eth,net,web3,engine --http.vhosts '*' --http.addr 0.0.0.0 --http.port ${STORY_PORT}545 --authrpc.port ${STORY_PORT}551 --ws --ws.api eth,web3,net,txpool --ws.addr 0.0.0.0 --ws.port ${STORY_PORT}546 Restart=on-failure RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF # Сервисный файл story.service. Скопируйте целиком до строчки EOF и встаьвте в терминал: sudo tee /etc/systemd/system/story.service > /dev/null <<EOF [Unit] Description=Story Service After=network.target [Service] User=$USER WorkingDirectory=$HOME/.story/story ExecStart=$(which story) run Restart=on-failure RestartSec=5 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Сервисы созданы, мы почти на финишной прямой. Теперь надо скачать снепшоты, чтобы нода синхронизировалась. В случае, если снепшоты неактуальны, смотрите актуальные на сайте ITrocket:
Замените устаревшие ссылки новыми:
# 13. Скачиваем snaphot'ы для Story и Geth: # Копируем файл priv_validator_state.json: cp $HOME/.story/story/data/priv_validator_state.json $HOME/.story/story/priv_validator_state.json.backup # Удаляем старые данные Story: rm -rf $HOME/.story/story/data # Скачиваем снепшот Story. Для этого мы и создавали фоновую сессию screen # в начале. Таким образом, мы обезопасим себя от остановки загрузки, если # внезапно отключимся от сервера. Снепшот большой(40GB), качаться будет ~30 минут # примерно несколько часов. Можно запустить команду и нажать комбинацию клавиш # CTRL+A+D, чтобы выйти из фоновой сессии. curl https://server-3.itrocket.net/testnet/story/story_2024-11-07_368026_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.story/story # Используйте эту команду если выходили из сессии screen: screen -r story # После установки снепшота выполните команду: mv $HOME/.story/story/priv_validator_state.json.backup $HOME/.story/story/data/priv_validator_state.json # Удаляем старые данные geth: rm -rf $HOME/.story/geth/odyssey/geth/chaindata mkdir -p $HOME/.story/geth/odyssey/geth # Аналогично скачиваем снепшот для Geth(32GB): curl https://server-3.itrocket.net/testnet/story/geth_story_2024-11-07_368026_snap.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.story/geth/odyssey/geth # Запускаем ноду: sudo systemctl daemon-reload sudo systemctl enable story story-geth sudo systemctl restart story story-geth
Необходимо, чтобы нода синхронизировалась. Для проверки синхронизации запускаем скрипт:
# 14. Скрипт для проверки синхронизации. Вставьте целиком в терминал: # Используйте CTRL+C для остановки скрипта. #!/bin/bash rpc_port=$(grep -m 1 -oP '^laddr = "\K[^"]+' "$HOME/.story/story/config/config.toml" | cut -d ':' -f 3) while true; do local_height=$(curl -s localhost:$rpc_port/status | jq -r '.result.sync_info.latest_block_height') network_height=$(curl -s https://story-testnet-rpc.itrocket.net/status | jq -r '.result.sync_info.latest_block_height') if ! [[ "$local_height" =~ ^[0-9]+$ ]] || ! [[ "$network_height" =~ ^[0-9]+$ ]]; then echo -e "\033[1;31mОшибка при проверке данных. Повтор...\033[0m" sleep 5 continue fi blocks_left=$((network_height - local_height)) if [ "$blocks_left" -lt 0 ]; then blocks_left=0 fi echo -e "\033[1;33mБлок твоей ноды:\033[1;34m $local_height\033[0m \033[1;33m| Последний блок сети:\033[1;36m $network_height\033[0m \033[1;33m| Блоков до синхронизации:\033[1;31m $blocks_left\033[0m" sleep 5 done
Как только нода догонит сеть, то нода считается синхронизированной! Далее нам нужно сделать копию кошелька, на которые мы будем отправлять токены $IP для регистрации нашей ноды в блокчейне Story:
# 15. Делаем бэкап для кошелька. EVM Public Key это адрес вашего кошелька ноды. # Приватный ключ от этого кошелька хранится на сервере в директории: # /root/.story/story/config/private_key.txt # Для просмотра приватного ключа используй команду: cat /root/.story/story/config/private_key.txt story validator export --export-evm-key
Для создания валидатора необходимо минимум 1024 $IP!
После того, как запросили токены, выполните команду для создания валидатора:
# 16. Команда для создания валидатора: story validator create --stake 1000000000000000000 --chain-id 1516 --private-key $(cat $HOME/.story/story/config/private_key.txt | grep "PRIVATE_KEY" | awk -F'=' '{print $2}')
Все, нода Story Protocol успешно создана! Теперь я хочу рассказать тебе, как можно следить за ее состоянием:
Во-первых, ты можешь использовать эксплорер, чтобы убедиться, что твоя нода успешно создана. В поиске ты можешь найти свою ноду по имени, которые ты ей дал. Однако, в эксплорере может отобразиться, что статус ноды "Inactive". В экосистеме Cosmos[блокчейн, на котором построена сеть Story Protocol] есть два вида нод - Active и Inactive. Первые производят новые блоки в сети за счет того, что на них заделегирован большой объем средств. Обычно, активными нодами в Cosmos считаются первые ~100 нод(валидаторов). Остальные же ноды, которые не выходят в активный сет, считаются Inactive. Это не значит, что ноды не работают, наоборот, они также считаются участниками сети, но они не производят новые блоки, а лишь поддерживают работу сети. Чтобы стать активным валидатором в Cosmos-сетях, тебе необходимо получать делегации от сообщества. Другими словами, нужно, чтобы на твою ноду стейкали $IP, вот и все.
Во-вторых, логи. Через логи можно определить нормально ли работает нода. Если они идут без ошибок[или с минимальным количеством ошибок], то все прекрасно, нода работает исправно. Посмотреть логи ты можешь используя команду:
# Команда для просмотра логов ноды Story Protocol: sudo journalctl -u story -f # Для просмотра логов Story # CTRL+C для остановки логов