Sui | Devnet 0.31.0
⠀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
. <(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
. <(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 сервера.
Создание кошелька
Кошелёк создаётся один раз, при обновлении сети необходимо восстановить созданный ранее.
⠀Для взаимодействия с блокчейном необходимо создать кошелёк, для этого нужно запустить команду ниже и ответить на вопросы:
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
- #✅・1st-step-verify и нажать на каплю;
- #📕・2nd-step-rules и нажать галочку;
- #🚰・devnet-faucet и отправить команду с адресом кошелька:
!faucet 0x___
Создать NFT
⠀NFT-образец создаётся командой
sui client create-example-nft
Итого
⠀Должна быть сохранена в надёжном месте папка с ключами, чтобы можно было восстановить кошелёк (команда отображает путь)
echo $HOME/.sui/sui_config/
⠀За работой своей ноды можно следить в чекере, введя IP сервера.
⠀За обновлениями проекта можно следить в канале #📢・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
Официальная документация | Чекер | Чекер синхронизации | Explorer
1package
Telegram | Chat | Discord | Twitter | Learning | Admitix
Благодарности
Команда 1package — изучение проекта, написание статьи, администрирование русскоязычного сообщества