Sui документація
  • Про Sui
    • Sui Глосарій
    • Чому Move?
    • Чим Sui Move відрізняється від Core Move
    • Зрозумійте Sui Security
    • Sui Whitepaper
  • Як працює Sui?
    • Чим Sui відрізняється від інших блокчейнів
  • Sui Токеноміка
    • Токен Sui
    • Фонд зберігання Sui
    • Proof-of-Stake
    • Токеноміка Whitepaper
Powered by GitBook
On this page
  • Об'єктно-орієнтоване глобальне сховище#
  • Адреси представляють ідентифікатори об’єктів
  • Об’єкт із ключовими можливостями, глобально унікальними ідентифікаторами
  • Ініціалізатори модулів
  • Точки входу приймають посилання на об'єкт як вхідні дані
  • Висновок
  1. Про Sui

Чим Sui Move відрізняється від Core Move

PreviousЧому Move?NextЗрозумійте Sui Security

Last updated 2 years ago

У цьому документі описується модель програмування Sui та висвітлюються відмінності між основною (раніше Diem) мовою Move і Move, яку ми використовуємо в Sui. По-перше, пам’ятайте, що Move – це мова, а Sui – платформа.

Загалом код Move, написаний для інших систем, працюватиме в Sui за цими винятками:

Ось короткий перелік основних відмінностей:

  1. Sui використовує свій власний

  2. Адреси

  3. Sui об'єкти мають

  4. Sui має

  5. 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. Щоб отримати повну інформацію, перегляньте технічний документ .

Глобальні оператори зберігання
Ключові здібності
object-centric global storage
represent Object IDs
globally unique IDs
module initializers (init)
entry points take object references as input
операторів глобального сховища
object.move
здатність ключа
функції введення
Sui Smart Contracts Platform