Move — это язык смарт-контрактов, разработанный для блокчейн-среды, который может работать на цепочках, поддерживающих MoveVM. Его дизайн учитывает вопросы безопасности блокчейна и смарт-контрактов и заимствует некоторые концепции безопасности из Rust. В данной статье будет проанализирована безопасность языка Move с трех аспектов: языковые особенности, механизм выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
Язык Move повышает безопасность за счет отказа от некоторой гибкости, не поддерживает динамическую диспетчеризацию и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д. для реализации альтернативных программных моделей.
Основные компоненты Move включают:
Модуль: состоит из типов структуры и определения процессов
Структура: может быть определена как тип ресурса, хранящийся в глобальном хранилище ключ-значение
Процесс: Определение логики контракта
Глобальное хранилище Move позволяет сохранять данные на постоянной основе, которые могут быть прочитаны и записаны программным способом только владельцем модуля, но могут быть просмотрены в публичном реестре.
Move обеспечивает безопасность компиляции кода двумя механизмами:
Невариантное преобразование: используется для статической проверки, определяет сохранение состояния системы.
Бит-код валидатор: принудительное выполнение безопасных типов и линейной структуры, предотвращение незаконных операций
2. Механизм работы Move
Программа Move выполняется в виртуальной машине и не может напрямую получить доступ к системной памяти. Она использует стековый модель выполнения, разделяя глобальное хранилище на память (, кучу ) и глобальные переменные ( стек ).
Состояние Move состоит из стека вызовов, памяти, глобальных переменных и операций. В процессе выполнения стек вызовов сохраняет информацию о контексте, статический переход избегает динамической диспетчеризации, тем самым предотвращая атаки повторного входа.
MoveVM отделяет хранилище данных и стек вызовов, в отличие от EVM. Этот дизайн повышает безопасность и эффективность выполнения.
3. Переместить Провер
Move Prover — это инструмент формальной верификации, использующий алгоритмы дедуктивной проверки для верификации корректности программы. Его рабочий процесс следующий:
Получение исходных файлов Move и спецификаций
Компиляция в байт-код и проверка объектной модели
Преобразовать в промежуточный язык Boogie
Сгенерировать условия проверки
Использование решателя Z3 для верификации
Генерация диагностического отчета
Язык спецификации Move используется для описания спецификаций программ и может быть написан независимо от бизнес-кода.
4. Итоги
Move учитывает все аспекты проектирования языка, выполнения виртуальной машины и средств безопасности. Он жертвует некоторой гибкостью, но повышает безопасность и проверяемость. Распространенные уязвимости EVM, такие как повторный вход, переполнение и т.д., могут быть эффективно предотвращены, но необходимо по-прежнему обращать внимание на проблемы аутентификации, логики и переполнения больших целых чисел.
Несмотря на то, что Move предлагает множество средств безопасности, разработчикам все равно рекомендуется использовать услуги стороннего аудита безопасности и передать написание и проверку стандартов профессиональным компаниям по безопасности.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
26 Лайков
Награда
26
8
Репост
Поделиться
комментарий
0/400
CountdownToBroke
· 08-04 13:47
Снова копирует брата rust, почти как если бы Тиецзы написал урезанную версию.
Посмотреть ОригиналОтветить0
TerraNeverForget
· 08-03 01:26
Снова закручиваем, да? Тогда я тоже закручиваю.
Посмотреть ОригиналОтветить0
DuckFluff
· 08-02 19:38
И взял часть от Rust, выглядит довольно сложно.
Посмотреть ОригиналОтветить0
SurvivorshipBias
· 08-01 22:52
Move слишком безопасно, теперь у акул нет еды.
Посмотреть ОригиналОтветить0
Ser_This_Is_A_Casino
· 08-01 22:50
Кажется, move немного слишком жесткий, даже более строгий, чем rust.
Посмотреть ОригиналОтветить0
SchrodingerAirdrop
· 08-01 22:50
Снова не могу учиться, голова просто разрывается.
Посмотреть ОригиналОтветить0
MetaverseMigrant
· 08-01 22:49
писать на move не так быстро, как я бегаю...
Посмотреть ОригиналОтветить0
GasFeeDodger
· 08-01 22:45
Еще лучше написать на solidity, это действительно тяжело.
Полный анализ безопасности языка Move: характеристики языка, механизмы работы и инструменты проверки
Анализ безопасности языка Move
Введение
Move — это язык смарт-контрактов, разработанный для блокчейн-среды, который может работать на цепочках, поддерживающих MoveVM. Его дизайн учитывает вопросы безопасности блокчейна и смарт-контрактов и заимствует некоторые концепции безопасности из Rust. В данной статье будет проанализирована безопасность языка Move с трех аспектов: языковые особенности, механизм выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
Язык Move повышает безопасность за счет отказа от некоторой гибкости, не поддерживает динамическую диспетчеризацию и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д. для реализации альтернативных программных моделей.
Основные компоненты Move включают:
Глобальное хранилище Move позволяет сохранять данные на постоянной основе, которые могут быть прочитаны и записаны программным способом только владельцем модуля, но могут быть просмотрены в публичном реестре.
Move обеспечивает безопасность компиляции кода двумя механизмами:
Невариантное преобразование: используется для статической проверки, определяет сохранение состояния системы.
Бит-код валидатор: принудительное выполнение безопасных типов и линейной структуры, предотвращение незаконных операций
2. Механизм работы Move
Программа Move выполняется в виртуальной машине и не может напрямую получить доступ к системной памяти. Она использует стековый модель выполнения, разделяя глобальное хранилище на память (, кучу ) и глобальные переменные ( стек ).
Состояние Move состоит из стека вызовов, памяти, глобальных переменных и операций. В процессе выполнения стек вызовов сохраняет информацию о контексте, статический переход избегает динамической диспетчеризации, тем самым предотвращая атаки повторного входа.
MoveVM отделяет хранилище данных и стек вызовов, в отличие от EVM. Этот дизайн повышает безопасность и эффективность выполнения.
3. Переместить Провер
Move Prover — это инструмент формальной верификации, использующий алгоритмы дедуктивной проверки для верификации корректности программы. Его рабочий процесс следующий:
Язык спецификации Move используется для описания спецификаций программ и может быть написан независимо от бизнес-кода.
4. Итоги
Move учитывает все аспекты проектирования языка, выполнения виртуальной машины и средств безопасности. Он жертвует некоторой гибкостью, но повышает безопасность и проверяемость. Распространенные уязвимости EVM, такие как повторный вход, переполнение и т.д., могут быть эффективно предотвращены, но необходимо по-прежнему обращать внимание на проблемы аутентификации, логики и переполнения больших целых чисел.
Несмотря на то, что Move предлагает множество средств безопасности, разработчикам все равно рекомендуется использовать услуги стороннего аудита безопасности и передать написание и проверку стандартов профессиональным компаниям по безопасности.