Чим Sui Move відрізняється від Core Move
Last updated
Last updated
У цьому документі описується модель програмування Sui та висвітлюються відмінності між основною (раніше Diem) мовою Move і Move, яку ми використовуємо в Sui. По-перше, пам’ятайте, що Move – це мова, а Sui – платформа.
Загалом код Move, написаний для інших систем, працюватиме в Sui за цими винятками:
Ось короткий перелік основних відмінностей:
Sui використовує свій власний
Адреси
Sui об'єкти мають
Sui має
Sui
Нижче наведено детальний опис кожної зміни.
У базовій системі Move глобальне сховище є частиною моделі програмування, і до нього можна отримати доступ за допомогою спеціальних операцій, таких як move_to, move_from і багатьох інших . І ресурси, і модулі зберігаються в основному глобальному сховищі Move. Коли ви публікуєте модуль, він зберігається у щойно згенерованій адресі модуля в Move. Коли створюється новий об’єкт (він же ресурс), він також зазвичай зберігається в адресі якогось облікового запису.
Але мережеве сховище дороге та обмежене (не оптимізоване для зберігання та індексування). Поточні блокчейни не можуть масштабуватися, щоб обробляти додатки, які займають велику кількість пам’яті, такі як маркетплейси та соціальні програми.
Тому в Sui Move немає глобального сховища. Жодна з глобальних операцій, пов’язаних із сховищем, не дозволена в Sui Move. (У нас є перевірка байт-коду для виявлення порушень.) Натомість зберігання відбувається виключно в Sui. Коли ми публікуємо модуль, щойно опублікований модуль зберігається в сховищі Sui, а не в сховищі Move. Так само новостворені об’єкти зберігаються в сховищі Sui. Це також означає, що коли нам потрібно прочитати об’єкт у Move, ми не можемо покладатися на глобальні операції зберігання, натомість Sui має явно передати всі об’єкти, до яких потрібно отримати доступ, у Move.
У Move є спеціальний тип адреси. Цей тип використовується для представлення адрес облікових записів у базовому Move. Під час роботи з глобальним сховищем Core Move має знати адресу облікового запису. Тип адреси становить 16 байт, що достатньо для базової моделі безпеки Move.
Нам потрібен спосіб відрізнити об’єкти, які є внутрішніми для Move, і об’єкти, які можна передати через межу Move-Sui (тобто об’єкти, які можна зберігати в сховищі Sui). Це важливо, оскільки ми повинні мати можливість серіалізувати/десеріалізувати об’єкти в межах Move-Sui, і цей процес робить припущення щодо форми об’єктів.
Як описано в Об’єктно-орієнтованому глобальному сховищі, модулі Move публікуються в сховищі Sui. Спеціальна функція ініціалізатора, необов’язково визначена в модулі, виконується (один раз) під час публікації модуля середовищем виконання Sui з метою попередньої ініціалізації даних, специфічних для модуля (наприклад, створення одиночних об’єктів). Функція ініціалізатора повинна мати такі властивості, щоб виконуватися під час публікації:
Ім'я init
Єдиний параметр &mut TxContext
типу
Немає повернених значень
Приватний
У Sui, оскільки ми не підтримуємо глобальне сховище в Move, нам не потрібен тип адреси для представлення облікових записів користувачів. Замість цього ми використовуємо тип адреси для представлення ідентифікатора об’єкта. Зверніться до файлу у структурі Sui, щоб зрозуміти використання адреси.
Ми використовуємо переваги ключової можливості в Move, щоб анотувати об’єкт Sui. У базовому Move використовується, щоб сказати, що тип можна використовувати як ключ для глобального зберігання. Оскільки ми не торкаємося глобального сховища в Sui Move, ми можемо перепрофілювати цю можливість. Ми вимагаємо, щоб будь-яка структура з можливістю ключа починалася з поля ідентифікатора з типом ідентифікатора. Тип ID містить як ObjectID, так і порядковий номер (він же версія). У нас є верифікатори байт-коду, щоб переконатися, що поле ідентифікатора є незмінним і не може бути передано іншим об’єктам (оскільки кожен об’єкт повинен мати унікальний ідентифікатор).
Sui пропонує функції входу, які можна викликати безпосередньо з Sui, на додаток до функцій, які можна викликати з інших функцій. Дивіться .
Підводячи підсумок, Sui використовує переваги безпеки та гнучкості Move і покращує його функціями, описаними вище, щоб значно підвищити пропускну здатність, зменшити затримки в завершенні та полегшити програмування Move. Тепер подивіться, як працює Sui. Щоб отримати повну інформацію, перегляньте технічний документ .