Допис
Діліться своїми знаннями.
Поглиблений аналіз технічних деталей Move VM
Sui: Поглиблений аналіз технічних деталей Move VM
У сучасній галузі технологій блокчейнуMove VM, як ключовий технічний компонент, відіграє важливу роль уSui. У цій статті наведенопоглиблений аналізтехнічних деталей Move VM, зокрема:
- Процес ініціалізації
- Механізм кешування коду
- Публікація модулів та сценаріїв
- Виконання функції
- Аналіз двійкового формату
1. Перемістити ініціалізацію VM
Ініціалізація Move VM є простою та ефективною**. Loader
Для цього потрібен лише один екземпля Mutex
р - по суті кілька HashMap
захищених порожніх таблиць, таких як Vec
і.
Цей процес є недорогим і створює основу для всіх операцій VM.
Move VM використовуєзавантаження коду на вимогу. Код не попередньо завантажений; натомість він отримується під час виконання під час виконання функції або сценарію.
Після завантаження модулі/скриптикешуються та повторно використовуються, що значно підвищує продуктивність.
2. Механізм кешування коду
2.1 Перше завантаження
Коли VM завантажує модуль вперше:
Vec<u8>
Запитує сховище даних для отримання двійкових даних ()- Десеріалізує та перевіряє дані на точність та цілісність
- Завантажує всі залежності одним і тим же процесом
- Пов'язує модуль з його залежностями
- Кешує модуль через
Loader
для повторного використання протягом життєвого циклу віртуальної машини
2.2 Узгодженість кешу
-Системні транзакції(наприклад, жорсткі оновлення) можуть порушити узгодженість кешу коду.
- Клієнт повиненпризупинити обробку транзакціїі перезапустити віртуальну машину, коли це станеться.
- Клієнти повинні вирівняти свій
DataStore
вигляд із завантаженим кодом та відновити інстанцію віртуальної машини, якщо це необхідно.
3. Процес публікації модуля
Щоб опублікувати модуль, клієнт зателефонує publish_module
за допомогою:
- Серіалізовані модульні байти
- Адреса відправника
- Посилання на
GasMeter
Кроки:
1.Десеріалізація
- Якщо не вдається → повернути помилку.
2.Перевірка адреси
- Адреса модуля повинна збігатися з адресою відправника → else
MODULE_ADDRESS_DOES_NOT_MATCH_SENDER
.
3.Перевірка дублікування
DUPLICATE_MODULE_NAME
- Повторна публікація однойменного модуля → помилка.
4.Перевірка завантаження
- Забезпечує завантаження модуля пізніше. Невдається? Помилка повернення.
5.Записати в сховище
- Після перевірки серіалізований модуль зберігається і вважається дійсним.
4. Механізм виконання сценарію
Скрипт у Move по суті є одноразовою функцією, яка часто використовується для виконання транзакцій.
Кроки:
1.** Завантаження сценарію та основної функції**
- Обчислі
sha3_256
ть хеш сценарію. - Використовуйте хеш, щоб перевірити, чи є він у кеші.
- Якщо не кешовано → завантажити та перевірити.
- Перевірте параметри основного типу функції.
2.Список параметрів збірки
Signer
значення на основі облікових записів відправника.TYPE_MISMATCH
- Інші арги повинні відповідати дозволеним типам → else.
3.Виконати скрипт
- ВМ викликів інтерпретатора.
- При помилці → транзакція не вдається і повертається помилка.
- Інакше → повернути успіх.
5. Виконання функції сценарію
Представлено в Move VM версії 2.0.
- Працює як звичайний сценарій
- Джерело - це
script
видима функція всередині ланцюгового модуля
Кроки:
- Завантажте функцію за допомогою
ModuleId
і назви функції - Перевірити видимість (
script
)
- Не видно сценарію? →
EXECUTE_SCRIPT_FUNCTION_CALLED_ON_NON_SCRIPT_VISIBLE
- Виконати так само, як звичайний скрипт
6. Виконання загальної функції
Move VM дозволяє виконуватибудь-яку функціюв модулі за назвою.
Назви функцій є** унікальними**в модулі → підпис не потрібен.
Етапи виконання:
1.Модуль навантаження
- Якщо помилка → повернення збій
2.Вирішити функцію
- Якщо не знайдено →
FUNCTION_RESOLUTION_FAILURE
- Перевірте відповідність параметрам типу → помилка else
3.Список параметрів збірки
- Зіставте всі параметри до дозволених типів → інше
TYPE_MISMATCH
4.Виконати
- Інтерпретатор запускає функцію
- VM повертає результат
7. Аналіз двійкового формату
7.1 Загальна архітектура
- Всі модулі/скрипти існують удвійковій формі
- Модулі = колекції функцій і структур
- Скрипти = прості точки входу (без повернення значення)
ВикористовуєULEB128для цілочисельного стиснення тапрефіксацію розмірудля векторів.
7.2 Двійковий заголовок
3 компоненти:
-Магія: Виправлено 4 байт → 0xA1, 0x1C, 0xEB, 0x0B
-Версія: 4-байтовий літл-ендіан int
-Кількість столів: ULEB128
7.3 Заголовки таблиць
Кожен заголовок включає в себе:
TableKind
(1 байт)TableOffset
(УЛЕБ128)TableLength
(УЛЕБ128)
Таблиці повинні бутисуміжні, не перекриватися.
7.4 Деталі таблиці
Таблиці описують:
-MODULE_HANDLES
: розташування модулів за допомогою індексу
-ADDRESS_IDENTIFIERS
,IDENTIFIERS
,STRUCT_HANDLES
,FUNCTION_HANDLES
: метадані типу та функції
-FUNCTION_INSTANTIATIONS
,SIGNATURES
,CONSTANT_POOL
: екземпляри та константи
7.5 Допоміжні визначення
-Type Parameter Kind
: 1 байт →ALL
,COPYABLE
, RESOURCE
-SignatureToken
: 1 байт для представлення типів (U8
, U64``STRUCT
, і т.д.)
Bytecodes``POP
-RET
: 1 байтовий операційний код+додаткове корисне навантаження → наприклад,,, BR_TRUE
7.6 Двійкові дані для конкретних скриптів
- Відсутність скриптів
FUNCTION_DEFINITIONS
- Натомість вони вбудовують інформацію про запис безпосередньо:
- Кількість параметрів типу & типи
- Індекси типу параметра
- Довжина байт-коду та корпус
✅ Висновок
Move VMпропонуєпотужне, безпечне та ефективністьсередовище для виконання блокчейну. Розуміючи:
- Ініціалізація VM
- Стратегії кешування
- Виконання функції/модуля
- Бінарна структура
Розробники можуть оптимізувати свої додатки на основі Move**та ефективно налагоджувати проблеми, сприяючи еволюції екосистеми Sui.
- Sui
- Architecture
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

- ... SUIMeaning.Sui+22
- ... SUI0xduckmove+17
- ... SUIMoonBags+11
- ... SUIHaGiang+10
- ... SUI
- ... SUIAliabee+5
- ... SUIBekky+5
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?53
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок43
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції25
- Як обмеження здібностей взаємодіють з динамічними полями в гетерогенних колекціях?05