April 13, 2023

SUI смартконтракт

Sui Move — це мова з відкритим кодом для написання безпечних смарт-контрактів. Спочатку він був розроблений у Facebook для живлення блокчейну Diem. Однак Sui Move було розроблено як мову, що не залежить від платформи, щоб увімкнути загальні бібліотеки, інструменти та спільноти розробників у блокчейнах із дуже різними даними та моделями виконання.
Документація для оригінальної мови Move доступна в репозиторії Move GitHub і включає підручник і книгу з детальним описом функцій мови. Це безцінні ресурси для поглиблення вашого розуміння мови Move, але не суворі передумови для дотримання підручника Sui, який ми прагнули зробити самостійним. Крім того, Sui Move дещо відрізняється від Move, який ми тут досліджуємо.
Ви можете використовувати Sui Move для визначення, створення та керування програмованими об’єктами Sui, що представляють активи рівня користувача. Система об’єктів Sui реалізована шляхом додавання нових функцій до Move, а також накладення додаткових обмежень, створення діалекту Move (він же Sui Move), який робить певні частини оригінальної документації Move незастосовними до розробки смарт-контрактів у Sui. Отже, найкраще слідувати цьому посібнику та відповідним посиланням на документацію Move у ньому.Перш ніж поглянути на код Move, що входить до складу Sui, давайте коротко поговоримо про організацію коду Move, яка застосовується як до коду, що входить до складу Sui, так і до написаного розробниками спеціального коду.
Перемістити код організації #
Основною одиницею організації (і розподілу) коду Move є пакет. Пакет складається з набору модулів, визначених в окремих файлах із розширенням .move. Ці файли містять функції переміщення та визначення типів. Пакет має містити файл маніфесту Move.toml з описом конфігурації пакета, наприклад метаданих пакета та його залежностей. Перегляньте Move.toml для отримання додаткової інформації про файли маніфесту пакетів у Sui Move. Пакети також містять автоматично створений файл Move.lock. Файл Move.lock схожий за форматом на маніфест пакета, але не призначений для безпосереднього редагування користувачами. Перегляньте Move.lock для отримання додаткової інформації про файл блокування в Sui Move.
Структура каталогу вихідного коду мінімального пакета виглядає наступним чином і містить файл маніфесту, файл блокування та підкаталог джерел, де розташовані один або кілька файлів модуля:
мій_пакет_переміщення
├── Move.lock
├── Move.toml
├── джерела
├── my_module.move
КОПІЮВАТИ
Докладніше про макет пакета див. у розділі Макет пакета та синтаксис маніфесту.
Настав час переглянути код Sui Move. Ви можете або продовжити читання, щоб отримати вступний опис основних конструкцій мови Sui Move, або ви можете відразу перейти до коду, написавши простий пакет Sui Move і перевіривши додаткові приклади коду.Перший погляд на вихідний код переміщення #
Платформа Sui включає в себе Sui Framework, який включає основні мережеві бібліотеки, необхідні розробникам Sui Move для завантаження операцій Sui. Зокрема, Sui підтримує кілька визначених користувачем типів монет, які є спеціальними ресурсами, визначеними мовою Sui Move. Код Sui Framework містить модуль Coin, який підтримує створення та керування власними монетами. Модуль Coin знаходиться у файлі coin.move. Як і слід було очікувати, файл маніфесту з описом створення пакета, що містить модуль Coin, знаходиться у відповідному файлі Move.toml.
Давайте подивимося, як визначення модуля відображається у файлі модуля Coin:
модуль sui::coin {
...
}
КОПІЮВАТИ
Наразі не турбуйтеся про решту вмісту модуля; ви можете прочитати більше про модулі в книзі Move пізніше.
Важливо: у Sui Move назви пакетів завжди пишуться в регістрі Pascal, а псевдонім адреси – у нижньому регістрі, наприклад sui ​​= 0x2 і std = 0x1. Отже: Sui = назва імпортованого пакета (Sui = структура sui), sui = псевдонім адреси 0x2, sui::sui = модуль sui під адресою 0x2 і sui::sui::SUI = введіть модуль вище.
Коли ви визначаєте модуль, укажіть назву модуля (coin), перед якою стоїть назва пакета, у якому цей модуль знаходиться (sui). Поєднання імені пакета та імені модуля унікально ідентифікує модуль у вихідному коді Sui Move. Назва пакета є глобально унікальною, але різні пакунки можуть містити модулі з однаковою назвою