October 7

УСТАНОВКА НОДЫ STORY PROTOCOL | NODERUNNER COMMUNITY

Story Protocol. Установка ноды.

Доброго времени суток, дорогой читатель. В этой статье будет подробная и при этом максимально простая инструкция по установке ноды 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 делает интеллектуальную собственность переносимой и компонуемой между различными приложениями.

ВЕБ-САЙТ | TWITTER | DISCORD

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

Нажимаешь "New Host":

В открывшемся справа окне вписываешь данные от своего сервера как на картинке и нажимаешь "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 для остановки логов

Спасибо, что уделил внимание этому гайду. Надеюсь, что твоя установка прошла успешно и ты смог со всем справится. Если у тебя остались вопросы - задавай их под постом про установку ноды Story Protocol в канале May.Crypto. Более подробно о сообществе NodeRunner можно почитать тут в методичке. Ссылка на пост из скрина ниже здесь. Хорошего дня!