Пост
Поделитесь своими знаниями.
Углубленный анализ технических деталей Move VM
Sui: углубленный анализ технических деталей Move VM
В современной сфере блокчейн-технологийMove VMкак ключевой технический компонент играет важную роль вSui. В этой статье представленуглубленный анализтехнических деталей Move VM, в том числе:
- Процесс инициализации
- Механизм кэширования кода
- Публикация модулей и скриптов
- Выполнение функций
- Анализ двоичного формата
1. Переместить инициализацию виртуальной машины
Инициализация Move VMпроста и эффективна. Loader``Mutex
Для этого требуется всего один HashMap
экземпляр — по сути, несколько Vec
защищенных пустых таблиц, таких как и.
Этот процесс является недорогим и закладывает основу для всех операций с виртуальными машинами.
Move VM используетзагрузку кода по требованию. Код не загружается заранее; вместо этого он загружается во время выполнения функции или скрипта.
После загрузки модули/скриптыкэшируются и повторно используются, что значительно повышает производительность.
2. Механизм кэширования кода
2.1 Первая загрузка
Когда виртуальная машина загружает модуль в первый раз:
Vec<u8>
Запрашивает хранилище данных для получения двоичных данных ()- Десериализует и проверяет данные на предмет их точности и целостности
- Загружает все зависимости одним и тем же процессом
- Связывает модуль с зависимостями
- Кэширует модуль через систему
Loader
для повторного использования в течение жизненного цикла виртуальной машины
2.2 Когерентность кэша
-Системные транзакции(например, аппаратные обновления) могут нарушить согласованность кэша кода.
- Клиенту следуетприостановить обработку транзакцийи перезапустить виртуальную машину, когда это произойдет.
- Клиенты должны привести свое
DataStore
представление в соответствие с загруженным кодом и при необходимости повторно создать экземпляр виртуальной машины.
3. Процесс публикации модуля
Чтобы опубликовать модуль, клиент звонит publish_module
с помощью:
- Сериализованные байты модуля
- Адрес отправителя
- ссылка на
GasMeter
Этапы:
1.Десериализация
- В случае неудачи → верните ошибку.
2.Проверка адреса
MODULE_ADDRESS_DOES_NOT_MATCH_SENDER
- Адрес модуля должен совпадать с адресом отправителя → else.
3.Проверка дублирования
DUPLICATE_MODULE_NAME
- Повторная публикация одноименного модуля → ошибка.
4.Проверка нагрузки
- Обеспечивает последующую загрузку модуля. Сбой? Ошибка возврата.
5.Запись в хранилище
- После проверки сериализованный модуль сохраняется и считается действительным.
4. Механизм выполнения сценария
Скрипт в Move — это, по сути, одноразовая функция, часто используемая для выполнения транзакций.
Шаги:
1.Загрузить скрипт и основную функцию
- Рассчитайте
sha3_256
хэш скрипта. - Используйте хэш, чтобы проверить, есть ли он в кеше.
- Если не кэшировано → загрузите и проверьте.
- Проверьте параметры основного типа функции.
2.Список параметров сборки
Signer
значения, основанные на учетных записях отправителей.TYPE_MISMATCH
- Другие аргументы должны соответствовать разрешенным типам → else.
3.Выполнить скрипт
- Интерпретатор вызовов виртуальной машины.
- В случае ошибки транзакция завершается неудачно и возвращается ошибка.
- Другое → возврат выполнен успешно.
5. Выполнение скриптовой функции
Представлено в версии Move VM 2.0.
- Работает как обычный скрипт
- Source
script
— это видимая функция в сетевом модуле
Этапы:
- Загрузите функцию, используя
ModuleId
и имя функции - Проверьте видимость (
script
)
- Скрипт не виден? →
EXECUTE_SCRIPT_FUNCTION_CALLED_ON_NON_SCRIPT_VISIBLE
- Выполняйте так же, как и обычный скрипт
6. Выполнение общих функций
Move VM позволяет выполнятьлюбую функциюв модуле по имени.
Имена функций в модулеуникальные→ подпись не требуется.
Этапы выполнения:
1.Модуль загрузки
- Если ошибка → сбой возврата
2.Функция разрешения
- Если не найдено →
FUNCTION_RESOLUTION_FAILURE
- Проверьте соответствие параметров типа → в противном случае ошибка
3.Список параметров сборки
- Сопоставьте все параметры с разрешенными типами → else
TYPE_MISMATCH
4.Выполнить
- Интерпретатор запускает функцию
- VM возвращает результат
7. Анализ двоичного формата
7.1 Общая архитектура
- Все модули/скрипты существуют вдвоичной форме
- Модули = коллекции функций и структур
- Скрипты = простые точки входа (без возвращаемого значения)
ИспользуетULEB128для сжатия целых чисел ипрефикс размерадля векторов.
7.2 Бинарный заголовок
3 компонента:
-Magic: исправлено 4 байта → 0xA1, 0x1C, 0xEB, 0x0B
-Версия: 4-байтное целое число с прямым порядком байтов
-Количество таблиц: 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``ALL
-COPYABLE
: 1 байт →,, RESOURCE
-SignatureToken
: 1 байт для представления типов (U8
, U64``STRUCT
, и т.д.)
Bytecodes``POP
-RET
: 1 байт кода операции+дополнительная полезная нагрузка → например,,, BR_TRUE
7.6 Бинарные данные, специфичные для скрипта
- Отсутствие скриптов
FUNCTION_DEFINITIONS
- Вместо этого они напрямую встраивают информацию о вводе:
- Количество и типы параметров типа
- Индексы типов параметров
- Длина и тело байт-кода
✅ Заключение
Move 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