July 14, 2022

Sui | Devnet 0.31.0

1package

⠀Sui — это децентрализованная платформа смарт-контрактов с высокой пропускной способностью и малой задержкой, использующая язык Move.


Содержание


Информация о проекте

К содержанию

Описание

⠀Sui — это децентрализованная платформа смарт-контрактов с высокой пропускной способностью и малой задержкой. Она использует язык программирования Move для определения активов как объектов, которыми может владеть адрес. Программы определяют операции над этими типизированными объектами, включая пользовательские правила для их создания, передачи этих активов новым владельцам, а также операции, которые изменяют их.

⠀Сеть поддерживается узлами, которые может запустить каждый. Токен $SUI будет использоваться для оплаты комиссий и стейкинга.

⠀Проект строит команда профессионалов Mysten Labs, выходцев из Facebook и Apple. Главная миссия которых — создать базовую инфраструктуру для Web3. Mysten Labs сотрудничает с ключевыми разработчиками экосистем, для постепенного улучшения их сетей.

⠀В декабре 2021 года в раунде серии А проект Mysten Labs собрал 36М$ от таких фондов, как: a16z, Coinbase Ventures, Electric Capital, Samsung NEXT и др.

Фазы

⠀Исходя из первого и второго анонсов, стимулирующая тестовая сеть начнётся в сентябре и будет поделена на несколько этапов:

  • Запуск сети;
  • Стейкинг;
  • Обновление;
  • ...

⠀Для участия необходимо запустить ноду в Devnet'е и заполнить форму до конца августа.

Награды

  • 2 000 $SUI за каждый этап при выполнении минимальных требований;
  • До 1 000 000 000 $SUI (до 10% от общего предложения) в качестве делегаций на самых результативных валидаторов.

Требования к серверу

К содержанию

⠀Рекомендованные (VPS/VDS/DS):
10 CPU, 32 GB RAM, 1000 GB SSD, Ubuntu 20.04

⠀Подходящие сервера:


Регистрация

К содержанию

Регистрация закрыта

⠀Требования к участию:

  • Быть старше 18 лет (KYC на Coinlist);
  • Иметь запущенную ноду в Devnet'е;
  • Заполнить форму, при этом адрес почты должен совпадать с тем, что от аккаунта Coinlist.

⠀Форму нужно заполнить до 15 августа (точное время не указано).

⠀Судя по вопросам в форме отсеивать будут знатно, так что новичкам пробиться будет тяжко. Сколько отберут людей не указано, информации об ограничении участия по странам пока нет.


Запуск

К содержанию

Все действия необходимо выполнять под именем root пользователя.

⠀Каждый подраздел — отдельный вид запуска, нужно выбрать один из них.

Linux

Для новичков

⠀Обновить пакеты и систему

sudo apt update && sudo apt upgrade -y

⠀Установить необходимые пакеты

sudo apt install wget jq git libclang-dev libpq-dev cmake -y

⠀Установить Rust

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/installers/rust.sh)

⠀Версия Rust должна быть не младше 1.62.0

rustc --version

⠀Если нет, то удалить командой ниже и установить ещё раз

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/installers/rust.sh) \
-un

⠀Создать папку для ноды

mkdir -p $HOME/.sui

Простой путь

⠀Клонировать репозиторий проекта с нодой

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

Продвинутый путь

⠀Сделать форк репозитория (сам репозиторий).

⠀Клонировать свой репозиторий с нодой (в ссылку необходимо подставить свой юзернейм)

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

Продолжение

⠀Перейти в папку с проектом

cd sui

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

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

⠀Подтянуть актуальную версию

git fetch upstream

⠀Переключиться на devnet версию

git checkout -B devnet --track upstream/devnet

⠀Собрать бинарные файлы (скорость зависит от количества ядер процессора, может занять несколько десятков минут)

cargo build --release

⠀При возникновении ошибки

error: failed to get `config` as a dependency of package `sui-config v0.0.0 (/root/suirates/sui-config)`

⠀Нужно скачать бинарные файлы, собранные нашей командой

version=`wget -qO- https://api.github.com/repos/SecorD0/Sui/releases/latest | jq -r ".tag_name"`; \
wget -qO- "https://github.com/SecorD0/Sui/releases/download/${version}/sui-linux-amd64-${version}.tar.gz" | tar -C /usr/bin/ -xzf -

⠀Переместить бинарные файлы в папку с бинарными файлами

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

⠀Вернуться в домашнюю директорию

cd

⠀Скачать файл генезиса

# Devnet
wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/devnet/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

⠀Открыть используемые порты

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/ports_opening.sh) \
9000 9184

⠀Создать сервисный файл

printf "[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" > /etc/systemd/system/suid.service

⠀Запустить сервис

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

⠀Добавить команду для просмотра лога ноды в систему в виде переменной

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui_log -v "sudo journalctl -fn 100 -u suid" -a

⠀Проверить, выводит ли команда информацию

wget -qO-  -t 1 -T 5 --header 'Content-Type: application/json' --post-data '{ "jsonrpc":"2.0", "id":1, "method":"sui_getCommitteeInfo", "params":[] }' "http://127.0.0.1:9000/" | jq

⠀Помимо этого можно проверить синхронизацию в этом чекере и найти свою ноду в другом, введя IP сервера.

Docker

Для любителей прекрасного

⠀По желанию сделать форк репозитория (сам репозиторий).

⠀Обновить пакеты и систему

sudo apt update && sudo apt upgrade -y

⠀Установить необходимые пакеты

sudo apt install wget jq bc build-essential -y

⠀Установить Docker

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/installers/docker.sh)

⠀Создать папку для ноды

mkdir -p $HOME/.sui

⠀Скачать файл генезиса

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

⠀Скачать конфиг ноды

wget -qO $HOME/.sui/fullnode.yaml https://github.com/MystenLabs/sui/raw/main/crates/sui-config/data/fullnode-template.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

⠀Открыть используемые порты

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/ports_opening.sh) \
9000 9184

⠀Запустить контейнер с нодой

docker run -dit --name sui_node --restart always -u 0:0 \
  --log-opt max-size=50m --log-opt max-file=3 \
  --network host -v $HOME/.sui:/root/.sui secord/sui \
  --config-path $HOME/.sui/fullnode.yaml

⠀Добавить команды в систему в виде переменных:

  • Просмотр лога ноды;
  • Сокращение команды для выполнения действий в контейнере.
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui_log -v "docker logs sui_node -fn100" -a
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui -v "docker exec -it sui_node ./sui" -a

⠀Проверить, выводит ли команда информацию

wget -qO-  -t 1 -T 5 --header 'Content-Type: application/json' --post-data '{ "jsonrpc":"2.0", "id":1, "method":"sui_getCommitteeInfo", "params":[] }' "http://127.0.0.1:9000/" | jq

⠀Помимо этого можно проверить синхронизацию в этом чекере и найти свою ноду в другом, введя IP сервера.


Создание кошелька

К содержанию

Кошелёк создаётся один раз, при обновлении сети необходимо восстановить созданный ранее.

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

  1. y
  2. Enter
  3. 0
sui client

Сделать резервную копию:

  • Мнемонической фразы;
  • Папки с ключами, сохранив её в надёжном месте (команда отображает путь):
echo $HOME/.sui/sui_config/

⠀Удостовериться, что адрес создан

sui keytool list

Заявить о себе

К содержанию

⠀В качестве подтверждения участия в девнете можно выполнить действия ниже (неподтверждённая информация).

Публикация RPC ноды

⠀На сервере выполнить команду ниже, чтобы получить RPC ноды

echo "http://`wget -qO- eth0.me`:9000/"

⠀Открыть ссылку в браузере на своём ПК, должна появиться надпись (если не появилась, значит нода не работает)

Used HTTP Method is not allowed. POST or OPTIONS is required

⠀Для отправки своего RPC необходимо присоединиться к Discord серверу и отправить его в специальный канал. При этом желательно поддерживать работоспособность ноды до начала стимулирующей тестовой сети.

Запросить токены с крана

⠀Вывести и скопировать адрес кошелька (в левой колонке)

sui keytool list

⠀Перейти в каналы:

!faucet 0x___

Создать NFT

⠀NFT-образец создаётся командой

sui client create-example-nft

Итого

К содержанию

⠀Должна быть сохранена в надёжном месте папка с ключами, чтобы можно было восстановить кошелёк (команда отображает путь)

echo $HOME/.sui/sui_config/

⠀За работой своей ноды можно следить в чекере, введя IP сервера.

⠀Были проведены активности:

  • Опубликован RPC ноды;
  • Запрошены токены с крана;
  • Создана NFT.

⠀За обновлениями проекта можно следить в канале #📢・announcements.

⠀Обновления Devnet'a публикуются в канале #📢・devnet-updates.


Восстановление

К содержанию

⠀Создать папку для ноды

mkdir -p $HOME/.sui

⠀Переместить директорию с ключами из резервной копии на сервер в созданную папку (команда отображает путь к перемещённой папке)

echo $HOME/.sui/sui_config/

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


Обновление

К содержанию

Linux

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

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 stash

⠀Обновить локальный репозиторий

git checkout -B devnet --track upstream/devnet

⠀Собрать бинарные файлы (скорость зависит от количества ядер процессора, может занять несколько десятков минут)

cargo build --release

⠀Переместить бинарные файлы в папку с бинарными файлами

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

⠀Проверить версию, должна быть 0.31.0

sui -V

⠀Перезапустить ноду

systemctl restart suid

Docker

⠀В контейнер встроено автоматическое обновление бинарных файлов при перезапуске, однако бинарные файлы собираются и выкладываются нашей командой вручную.

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

docker stop sui_node

⠀Удалить старую базу данных

rm -rf $HOME/.sui/db

⠀Скачать новый файл генезиса

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

⠀Перезапустить ноду

docker restart sui_node

⠀Дождаться скачивания нового бинарного файла

sui_log

⠀Проверить версию, должна быть 0.31.0

sui -V

Удаление

К содержанию

Linux

⠀Удалить переменную

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui_log -da

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

systemctl stop suid

⠀Убрать сервисный файл из автозапуска

systemctl disable suid

⠀Удалить файлы ноды

rm -rf $HOME/{sui,.sui} /usr/bin/{sui,sui-node,sui-faucet} \
/etc/systemd/system/suid.service

⠀Обновить список сервисных файлов

systemctl daemon-reload

Docker

⠀Удалить переменные

. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui_log -da
. <(wget -qO- https://raw.githubusercontent.com/SecorD0/utils/main/miscellaneous/insert_variable.sh) -n sui -da

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

docker rm sui_node -f

⠀Удалить файлы ноды

rm -rf $HOME/.sui /usr/bin/{sui,sui-node,sui-faucet}

⠀Удалить образ

docker rmi secord/sui

FAQ

К содержанию

Множество предупреждений и ошибок в логах, это нормально?

⠀Да, такое может быть. Главное, чтобы нода находилась в чекере.

Нода потребляет всю свободную RAM, что делать?

Причина:

⠀У ноды присутствует проблема утечки памяти.

Решение:

⠀Корень проблемы должны устранить разработчики, со своей стороны можно:

  • Запустить ноду при помощи иного метода (Systemd/Docker);
  • Периодически перезапускать ноду;
  • Установить лимит потребления RAM для Dcoker контейнера при его создании.

Почему чекер отображает 0 объектов?

Причина:

⠀Количество объектов в чекере, судя по всему, обнуляются после перезагрузки ноды.

Решение:

⠀Переустановить или обновить ноду, но работает не всегда, проще ничего не делать. Если кто-то найдёт иное решение, то поделитесь, пожалуйста, информацией в чате.

error while loading shared libraries: libssl.so.1.1

Решение:

⠀Установить недостающую библиотеку.

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.6_amd64.deb; \
sudo dpkg -i libssl1.1_1.1.1l-1ubuntu1.6_amd64.deb

Error: invalid length 0, expected an byte array of size 32

Причины:

  • Неактуальная версия бинарного файла ноды;
  • Неактуальная версия файла генезиса;

Решение:

  • Скачать актуальный генезис и перезапустить ноду
wget -qO $HOME/.sui/genesis.blob https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob; \
systemctl restart suid
  • Обновить бинарные файлы. Если проблема не исчезла, то скачать собранные нашей командой бинарные файлы:
version=`wget -qO- https://api.github.com/repos/SecorD0/Sui/releases/latest | jq -r ".tag_name"`; \
wget -qO- "https://github.com/SecorD0/Sui/releases/download/${version}/sui-linux-amd64-${version}.tar.gz" | tar -C /usr/bin/ -xzf -; \
systemctl restart suid


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

К содержанию

⠀Посмотреть лог ноды

sui_log
sudo journalctl -fn 100 -u suid
docker logs sui_node -fn100

⠀Посмотреть импортированные кошельки

sui keytool list

⠀Посмотреть объекты основного кошелька

sui client objects

⠀Посмотреть баланс основного кошелька

sui client gas

⠀Перезапустить ноду

systemctl restart suid
docker restart sui_node

Полезные ссылки

К содержанию

Сайт проекта | Русскоязычная группа Telegram

Discord | Twitter | GitHub

Официальная документация | Чекер | Чекер синхронизации | Explorer


1package

К содержанию

Telegram | Chat | Discord | Twitter | Learning | Admitix


Благодарности

К содержанию

Команда 1package — изучение проекта, написание статьи, администрирование русскоязычного сообщества