Sui.

Пост

Поделитесь своими знаниями.

article banner.
Meaning.Sui.
Jul 08, 2025
Статья

Углубленный анализ технических деталей Move VM

Sui: углубленный анализ технических деталей Move VM

В современной сфере блокчейн-технологийMove VMкак ключевой технический компонент играет важную роль вSui. В этой статье представленуглубленный анализтехнических деталей Move VM, в том числе:

  • Процесс инициализации
  • Механизм кэширования кода
  • Публикация модулей и скриптов
  • Выполнение функций
  • Анализ двоичного формата

1. Переместить инициализацию виртуальной машины

Инициализация Move VMпроста и эффективна. Loader``MutexДля этого требуется всего один HashMapэкземпляр — по сути, несколько Vecзащищенных пустых таблиц, таких как и.

Этот процесс является недорогим и закладывает основу для всех операций с виртуальными машинами.

Move VM используетзагрузку кода по требованию. Код не загружается заранее; вместо этого он загружается во время выполнения функции или скрипта.

После загрузки модули/скриптыкэшируются и повторно используются, что значительно повышает производительность.


2. Механизм кэширования кода

2.1 Первая загрузка

Когда виртуальная машина загружает модуль в первый раз:

  1. Vec<u8>Запрашивает хранилище данных для получения двоичных данных ()
  2. Десериализует и проверяет данные на предмет их точности и целостности
  3. Загружает все зависимости одним и тем же процессом
  4. Связывает модуль с зависимостями
  5. Кэширует модуль через систему 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— это видимая функция в сетевом модуле

Этапы:

  1. Загрузите функцию, используя ModuleIdи имя функции
  2. Проверьте видимость (script)
  • Скрипт не виден? → EXECUTE_SCRIPT_FUNCTION_CALLED_ON_NON_SCRIPT_VISIBLE
  1. Выполняйте так же, как и обычный скрипт

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
0
Поделиться
Комментарии
.