Язык Move, будучи языком смарт-контрактов нового поколения, изначально был разработан с акцентом на безопасность. В этой статье будет проведен анализ безопасности языка Move с трех сторон: характеристик языка, механизмов выполнения и инструментов верификации.
1. Безопасные характеристики языка Move
Язык Move в своем дизайне отказался от некоторых гибких, но небезопасных особенностей, таких как динамическая диспетчеризация и рекурсивные внешние вызовы. Напротив, он вводит концепции обобщений, глобального хранилища, ресурсов и т.д. для реализации безопасных моделей программирования.
const ADMIN: address = @0x1;
структура Coin имеет ключ { значение: u64 }
структура Info имеет ключ { total_supply: u64 }
инвариант для всех a: адрес, где существует<coin>(a):
глобальный<coin>(a).value <= глобальный<info>(ADMIN).total_supply;
Публичные развлечения initialize(account: &signer) {
assert!(signer::address_of(account) == ADMIN, 0);
переместить_в(аккаунт, Информация { общее_предложение: 0 });
}
public fun mint(account: &signer, сумма: u64): Монета {
assert!(signer::address_of(account) == ADMIN, 0);
let supply = borrow_global_mut<info>(ADMIN);
supply.total_supply = supply.total_supply + сумма;
Монета { значение: сумма }
}
Публичные развлечения value_mut(coin: &mut Coin): &mut U64 {
&mut coin.value
}
}
Этот пример демонстрирует некоторые важные особенности языка Move:
Модульность: код организован в модулях, можно импортировать типы и функции из других модулей.
Структура: Используйте struct для определения структуры данных, можно добавить метки возможностей, такие как ключ.
Глобальное хранилище: управление глобальным состоянием с помощью операций move_to и borrow_global_mut.
Безопасность ресурсов: обеспечение безопасного использования ресурсов через систему возможностей и линейные типы.
Инварианты: можно определить правила инвариантов для статической проверки.
Язык Move обеспечивает безопасность на этапе компиляции с помощью проверщика байт-кода и проверки инвариантов:
Верификатор байт-кода: проверяет законность структур, семантику логики процесса, ошибки связывания и т. д.
Проверка инвариантов: проверка состояния программы на соответствие заранее определенным правилам инвариантов.
2. Механизм работы Move
Программа Move выполняется в виртуальной машине, а состояние выполнения состоит из стека вызовов, памяти, глобальных переменных и стека операндов. Основные характеристики включают:
Выполнять в контролируемой среде, нельзя напрямую доступить системную память.
Используется стековый интерпретатор, что облегчает реализацию и контроль.
Ресурсы могут только перемещаться, их нельзя копировать.
Стек вызовов записывает контекст выполнения и поддерживает статический переход.
Разделение логики хранения данных и вызова, повышение безопасности и эффективности выполнения.
Этот дизайн избегает некоторых распространенных проблем безопасности, таких как атака повторного входа.
3. Переместить Провер
Move Prover — это инструмент формальной верификации, который помогает разработчикам проверять правильность смарт-контрактов. Его рабочий процесс следующий:
Получите исходный код Move и спецификации в качестве входных данных.
Анализ исходного кода, извлечение спецификации.
Преобразуйте код и спецификации в объектную модель валидатора.
Генерация промежуточного кода Boogie.
Использование Z3 SMT решателя для проверки истинности спецификации.
Генерация диагностического отчета с указанием потенциальных проблем.
Move Prover использует язык спецификации Move для описания норм поведения программы, что позволяет писать его независимо от бизнес-кода. Это предоставляет мощную поддержку формальной проверки для смарт-контрактов.
Резюме
Язык Move в своем дизайне уделяет особое внимание безопасности, предоставляя всеобъемлющую защиту на уровне языковых особенностей, выполнения виртуальной машины и инструментов проверки. Он может эффективно избегать многих распространенных уязвимостей смарт-контрактов, таких как повторный вход, переполнение и т. д. Однако логические ошибки и проблемы управления доступом все еще требуют особого внимания со стороны разработчиков. Рекомендуется, чтобы разработчики смарт-контрактов Move, помимо использования особенностей языка и инструментов проверки, также искали услуги стороннего аудита безопасности для дальнейшего обеспечения безопасности контрактов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
11 Лайков
Награда
11
3
Поделиться
комментарий
0/400
FalseProfitProphet
· 8ч назад
что может сделать move, просто говорить о безопасности
Полный анализ безопасности смарт-контрактов на языке Move: характеристики, механизмы и верификация
Анализ безопасности языка Move
Язык Move, будучи языком смарт-контрактов нового поколения, изначально был разработан с акцентом на безопасность. В этой статье будет проведен анализ безопасности языка Move с трех сторон: характеристик языка, механизмов выполнения и инструментов верификации.
1. Безопасные характеристики языка Move
Язык Move в своем дизайне отказался от некоторых гибких, но небезопасных особенностей, таких как динамическая диспетчеризация и рекурсивные внешние вызовы. Напротив, он вводит концепции обобщений, глобального хранилища, ресурсов и т.д. для реализации безопасных моделей программирования.
Вот простой пример реализации токена:
двигаться модуль 0x1::TestCoin { используйте 0x1::signer;
}
Этот пример демонстрирует некоторые важные особенности языка Move:
Модульность: код организован в модулях, можно импортировать типы и функции из других модулей.
Структура: Используйте struct для определения структуры данных, можно добавить метки возможностей, такие как ключ.
Глобальное хранилище: управление глобальным состоянием с помощью операций move_to и borrow_global_mut.
Безопасность ресурсов: обеспечение безопасного использования ресурсов через систему возможностей и линейные типы.
Инварианты: можно определить правила инвариантов для статической проверки.
Язык Move обеспечивает безопасность на этапе компиляции с помощью проверщика байт-кода и проверки инвариантов:
Верификатор байт-кода: проверяет законность структур, семантику логики процесса, ошибки связывания и т. д.
Проверка инвариантов: проверка состояния программы на соответствие заранее определенным правилам инвариантов.
2. Механизм работы Move
Программа Move выполняется в виртуальной машине, а состояние выполнения состоит из стека вызовов, памяти, глобальных переменных и стека операндов. Основные характеристики включают:
Выполнять в контролируемой среде, нельзя напрямую доступить системную память.
Используется стековый интерпретатор, что облегчает реализацию и контроль.
Ресурсы могут только перемещаться, их нельзя копировать.
Стек вызовов записывает контекст выполнения и поддерживает статический переход.
Разделение логики хранения данных и вызова, повышение безопасности и эффективности выполнения.
Этот дизайн избегает некоторых распространенных проблем безопасности, таких как атака повторного входа.
3. Переместить Провер
Move Prover — это инструмент формальной верификации, который помогает разработчикам проверять правильность смарт-контрактов. Его рабочий процесс следующий:
Получите исходный код Move и спецификации в качестве входных данных.
Анализ исходного кода, извлечение спецификации.
Преобразуйте код и спецификации в объектную модель валидатора.
Генерация промежуточного кода Boogie.
Использование Z3 SMT решателя для проверки истинности спецификации.
Генерация диагностического отчета с указанием потенциальных проблем.
Move Prover использует язык спецификации Move для описания норм поведения программы, что позволяет писать его независимо от бизнес-кода. Это предоставляет мощную поддержку формальной проверки для смарт-контрактов.
Резюме
Язык Move в своем дизайне уделяет особое внимание безопасности, предоставляя всеобъемлющую защиту на уровне языковых особенностей, выполнения виртуальной машины и инструментов проверки. Он может эффективно избегать многих распространенных уязвимостей смарт-контрактов, таких как повторный вход, переполнение и т. д. Однако логические ошибки и проблемы управления доступом все еще требуют особого внимания со стороны разработчиков. Рекомендуется, чтобы разработчики смарт-контрактов Move, помимо использования особенностей языка и инструментов проверки, также искали услуги стороннего аудита безопасности для дальнейшего обеспечения безопасности контрактов.