Актуально
February 25, 2023

Sui - devnet

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

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

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

Награды

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

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

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

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

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

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

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 -a $HOME/.sui/fullnode.yaml >/dev/null <<EOF 

p2p-config: 
seed-peers: 
- address: "/ip4/65.109.32.171/udp/8084"
- address: "/ip4/65.108.44.149/udp/8084"
- address: "/ip4/95.214.54.28/udp/8080"
- address: "/ip4/136.243.40.38/udp/8080"
- address: "/ip4/84.46.255.11/udp/8084"
- address: "/ip4/135.181.6.243/udp/8088"
- address: "/ip4/89.163.132.44/udp/8080"
- address: "/ip4/95.217.57.232/udp/8080"
- address: "/ip4/15.204.163.225/udp/8080"
- address: "/ip4/65.108.68.119/udp/8080"
- address: "/ip4/155.133.22.151/udp/8080"
- address: "/ip4/45.14.194.21/udp/8080"
- address: "/ip4/159.69.58.44/udp/8080"
- address: "/ip4/139.180.130.95/udp/8084"
- address: "/ip4/51.178.73.193/udp/8084"
- address: "/ip4/162.19.84.43/udp/8084"
- address: "/ip4/146.59.68.207/udp/8080"
- address: "/ip4/89.58.5.19/udp/8084"
- address: "/ip4/38.242.227.80/udp/8080"
- address: "/ip4/144.217.10.44/udp/8080"
- address: "/ip4/178.18.250.62/udp/8080"
- address: "/ip4/213.239.215.119/udp/8084"
EOF

Дополнительно можно настроить прунинг для экономии места:

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

authority-store-pruning-config:
  objects-num-latest-versions-to-retain: 5
  objects-pruning-period-secs: 86400
  objects-pruning-initial-delay-secs: 3600
  num-latest-epoch-dbs-to-retain: 3
  epoch-db-pruning-period-secs: 3600
  enable-live-pruner: 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