Ноды
December 17, 2022

Установка ноды Sui

Sui — это высокопроизводительный блокчейн первого уровня (L1), который разрабатывает компания Mysten Labs для обслуживания децентрализованных приложений, чувствительных к задержкам.

Сайт проекта | Документация проекта | Discord | GitHub | Explorer
Telegram канал сообщества Starnodes

Награды

50% от общего предложения выделено на комьюнити. За каждую волну запуска нод в сети тестнет, при условии, что вас выбрали, награда 200 SUI или 2000 SUI, если вас выбрали в качестве валидатора.

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

10 CPU 32RAM 1000 SSD // не стоит запускаться, если у вас нет свободных 1000гб

Используемые порты: 9000, 9184 tcp

Аренда сервера:

1) Хостинг Hetzner - неплохой хостинг для аренды VPS по соотношению цена-качество, подойдет для большинства нод.

2) Хостинг Starnodes - VPS сервера с большой ёмкостью NVME накопителя. Все сервера расположены в датацентре и работают 24/7.

Подготовка сервера

Обновим пакеты системы:

sudo apt update && sudo apt upgrade -y

Установим необходимое программное обеспечение:

sudo apt install tar wget jq git libclang-dev libpq-dev cmake mc ncdu htop -y

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

sudo adduser sui

Добавить в группу Sudo:

sudo usermod -aG sudo sui

Установим Rust:

sudo curl https://sh.rustup.rs -sSf | sh -s -- -y 
source $HOME/.cargo/env

Установка ноды Sui

Актуально для devnet и testnet, смотрим по ходу установки.

Если нужна свежая установка, то удалите старые данные:

sudo systemctl stop suid
sudo systemctl disable suid
rm -rf $HOME/.sui
rm -rf $HOME/sui
rm -rf /var/sui
sudo rm -f /usr/bin/{sui,sui-node,sui-faucet}
sudo rm -f /usr/local/bin/{sui,sui-node,sui-faucet}
sudo rm /etc/systemd/system/suid.service
systemctl daemon-reload

Клонируем репозиторий:

git clone https://github.com/MystenLabs/sui

Перейдем в папку проекта:

cd sui

Создадим ветку с исходным репозиторием:

git remote add upstream https://github.com/MystenLabs/sui

Синхронизируем версию:

git fetch upstream

Для компиляции devnet версии используем команду:

git checkout -B devnet --track upstream/devnet

Для компиляции testnet версии используем команду:

git checkout -B testnet --track upstream/testnet

Соберем бинарные файлы, займет 10-30 минут:

cargo build --release

Перемещаем полученные бинарники в /usr/bin/

sudo mv $HOME/sui/target/release/{sui,sui-node,sui-faucet} /usr/bin/

Создаем рабочий каталог для ноды:

mkdir -p $HOME/.sui

Для загрузки файла genesis devnet версии используем команду:

wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob

Для загрузки файла genesis testnet версии используем команду:

wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob

Копируем конфиг файл:

cp $HOME/sui/crates/sui-config/data/fullnode-template.yaml $HOME/.sui/fullnode.yaml

Редактируем авто вставкой:

sed -i -e "s%db-path:.*%db-path: \"$HOME/.sui/db\"%; "\
"s%metrics-address:.*%metrics-address: \"0.0.0.0:9184\"%; "\
"s%json-rpc-address:.*%json-rpc-address: \"0.0.0.0:9000\"%; "\
"s%genesis-file-location:.*%genesis-file-location: \"$HOME/.sui/genesis.blob\"%; " $HOME/.sui/fullnode.yaml

Для сети testnet добавьте пиры и прунинг в конфиг:

sudo tee $HOME/.sui/fullnode.yaml >/dev/null <<EOF 

db-path: "/root/.sui/db"

network-address: "/dns/localhost/tcp/8080/http"
metrics-address: "0.0.0.0:9184"
# this address is also used for web socket connections
json-rpc-address: "0.0.0.0:9005"
enable-event-processing: true

genesis:
  # Update this to the location of where the genesis file is stored
  genesis-file-location: "/root/.sui/genesis.blob"


p2p-config:
  seed-peers:
   - address: "/dns/sui-rpc-pt.testnet-pride.com/udp/8084"
     peer-id: 0b10182585ae4a305721b1823ea5a9c3ce7d6ac4b4a8ce35fe96d9914c8fcb73
   - address: "/dns/sui-rpc-pt2.testnet-pride.com/udp/8084"
     peer-id: bf45f2bd2bbc4c2d53d10c05c96085d4ef18688af04649d6e65e1ebad1716804
   - address: "/dns/sui-rpc-testnet.bartestnet.com/udp/8084"
   - address: "/ip4/38.242.197.20/udp/8080"
   - address: "/ip4/178.18.250.62/udp/8080"
   - address: "/ip4/162.55.84.47/udp/8084"
   - address: "/dns/wave-3.testnet.n1stake.com/udp/8084"

authority-store-pruning-config:
  num-latest-epoch-dbs-to-retain: 3
  epoch-db-pruning-period-secs: 3600
  num-epochs-to-retain: 1
  max-checkpoints-in-batch: 200
  max-transactions-in-batch: 1000
  use-range-deletion: true
EOF

Установите RPC testnet, если вы устанавливаете ноду в сети testnet:

sui client switch --env https://fullnode.testnet.sui.io:443

Если нужно вернуться к RPC devnet введите:

sui client new-env --rpc https://fullnode.devnet.sui.io:443 --alias https://fullnode.devnet.sui.io:443
sui client switch --env https://fullnode.devnet.sui.io:443

Создадим службу для запуска:

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

[Service]
User=$USER
ExecStart=`which sui-node` --config-path $HOME/.sui/fullnode.yaml
Restart=on-failure
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

Запустим службу и добавим в автозапуск:

sudo systemctl daemon-reload
sudo systemctl enable suid
sudo systemctl restart suid

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

sudo journalctl -f -u suid -o cat

Обновление ноды:

Зайдем под пользователем sui:

su sui

Обновимся для сети devnet:

sudo systemctl stop suid
# при необходимости: rm -rf $HOME/.sui/db
wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob
cd $HOME/sui
git remote add upstream https://github.com/MystenLabs/sui
git fetch upstream
git checkout -B devnet --track upstream/devnet
#git checkout devnet-0.23.0
cargo build --release
sudo mv $HOME/sui/target/release/{sui,sui-node,sui-faucet} /usr/bin/
sudo systemctl restart suid
sudo journalctl -f -u suid -o cat

Обновимся для сети testnet:

sudo systemctl stop suid
# при необходимости: rm -rf $HOME/.sui/db
wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob
cd $HOME/sui
git remote add upstream https://github.com/MystenLabs/sui
git fetch upstream
git checkout -B testnet --track upstream/testnet
git log --oneline -1
cargo build --release
sudo mv $HOME/sui/target/release/{sui,sui-node,sui-faucet} /usr/bin/
sudo systemctl restart suid
sudo journalctl -f -u suid -o cat

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

Остановить ноду:

sudo systemctl stop suid

Запустить ноду:

sudo systemctl start suid

Перезапуск ноды:

sudo systemctl restart suid

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

sudo journalctl -f -u suid -o cat

Проверить текущую высоту на вашей ноде:

curl --location --request POST http://127.0.0.1:9000/ \
--header 'Content-Type: application/json' \
--data-raw '{ "jsonrpc":"2.0", "method":"sui_getTotalTransactionNumber","id":1}'; echo

Проверить текущую высоту на RPC сети devnet:

curl --location --request POST https://fullnode.devnet.sui.io:443 \
--header 'Content-Type: application/json' \
--data-raw '{ "jsonrpc":"2.0", "method":"sui_getTotalTransactionNumber","id":1}'; echo

Проверить текущую высоту на RPC сети testnet:

curl --location --request POST https://fullnode.testnet.sui.io:443 \
--header 'Content-Type: application/json' \
--data-raw '{ "jsonrpc":"2.0", "method":"sui_getTotalTransactionNumber","id":1}'; echo

Сторонний чекер для проверки синхронизации ноды (должно быть 100%):

https://www.scale3labs.com/check/sui

Не забывайте выбрать правильную сеть с которой вы сверяетесь (Network)

@starnodes_ru - наш канал в Telegram с новостями и гайдами по тестнетам.
@starnodes_chat - канал, куда можно обратиться за помощью.