Анализ безопасности языка Move: революционер смарт-контрактов
Язык Move — это язык смарт-контрактов, который может компилироваться и выполняться в блокчейн-среде, реализующей MoveVM. Каковы его характеристики безопасности как языка смарт-контрактов нового поколения, основным признаком которого является безопасность? Может ли он избежать распространённых угроз безопасности виртуальных машин контрактов, таких как EVM и WASM? В этой статье мы обсудим вопросы безопасности языка Move с трёх точек зрения: особенности языка, механизм выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
В отличие от многих существующих языков программирования, язык Move был разработан так, чтобы поддерживать как безопасное взаимодействие с неподтвержденным кодом, так и статическую проверку. Move отказался от нелинейной логики, основанной на гибкости, не поддерживает динамическое распределение и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д., для реализации альтернативных моделей программирования.
const ADMIN: address = @0x1;
структура Coin имеет ключ, хранилище {
значение: u64
}
структура Info имеет ключ {
total_supply: u64
}
модуль спецификации {
инвариант для всех addr: адрес, где существует<coin>(addr):
глобальный<info>(ADMIN).total_supply >= глобальный<coin>0192837465657483939201addr(.value;
}
Публичные развлечения initialize)account: &signer( {
assert!)signer::address_of(account( == ADMIN, 1);
переместить_в)аккаунт, Информация { общее_количество: 0 }(
}
public fun mint)account: &signer, сумма: u64(: Монета {
assert!)signer::address_of(account( == ADMIN, 1);
let coin = Coin { value: amount };
let info =<info>borrow_global_mut )ADMIN(;
info.total_supply = info.total_supply + сумма;
монета
}
Публичные развлечения value)coin: &Coin(: U64 {
coin.value
}
}
Этот пример демонстрирует некоторые ключевые функции безопасности языка Move:
Модульность: каждый модуль Move состоит из определения типов структур и процессов, может импортировать определения типов из других модулей и вызывать процессы других модулей.
Тип ресурса: структура, определенная с помощью ключа has или метки store, определяется как тип ресурса и может храниться в постоянном глобальном хранилище ключ-значение.
Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны и записаны только модулем, но хранятся в общедоступном реестре и могут быть просмотрены другими модулями.
Контроль доступа: доступ к ключевым операциям может быть реализован с помощью утверждений и других средств.
Редукция инвариантов: можно определить статические проверки инвариантов для формальной верификации.
Проверка байт-кода: включает проверку безопасности и линейную проверку, предотвращающую незаконные операции с типами ресурсов.
Эти характеристики обеспечивают безопасность языка Move на этапе компиляции.
![Анализ безопасности Move: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-419437619d55298077789e6eca578b48.webp(
2. Механизм работы Move
Программа Move работает в виртуальной машине, не может получить доступ к системной памяти и может безопасно выполняться в ненадежной среде.
Программа Move выполняется на стеке, глобальное хранилище делится на память ) кучу ( и глобальные переменные ) стек (. Память не может хранить указатели на ячейки памяти, глобальные переменные используются для хранения указателей на ячейки памяти.
Байткод инструкций Move выполняется в стековом интерпретаторе, что облегчает реализацию и контроль, подходит для сценариев блокчейна. Значения типов ресурсов могут быть перемещены только разрушительным образом.
Состояние выполнения программы Move представляется кортежем ⟨C, M, G, S⟩, включающим стек вызовов, память, глобальные переменные и операнды. В процессе выполнения вызов функции создает новый объект стека вызовов, а инструкции ветвления выполняют статический переход, избегая динамической диспетчеризации.
MoveVM отделяет хранение данных и стек вызовов, в отличие от дизайна EVM. Хотя такой дизайн жертвует гибкостью, он повышает безопасность и эффективность выполнения.
![Анализ безопасности Move: смарт-контракты как изменяющая игру технология])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Доказывающий ход
Move Prover является инструментом формальной верификации на основе логического вывода, который использует формальный язык для описания поведения программы и алгоритмы вывода для проверки соответствия программы ожидаемым результатам.
Парсер извлекает спецификации, компилятор компилирует исходный код в байт-код.
Преобразовать в модель объекта валидатора.
Переведите на промежуточный язык Boogie.
Система проверки Boogie генерирует условия проверки.
Z3-решатель проверяет, является ли SMT-формула невыполнимой.
Создать диагностический отчет и восстановить его до уровня исходного кода.
Move использует язык спецификаций Move для описания спецификаций, который является подмножеством языка Move.
Move Prover — это полезный инструмент, который помогает разработчикам гарантировать корректность смарт-контрактов и снижать риски сделок.
![Анализ безопасности Move: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Итоги
Язык Move отлично спроектирован с точки зрения безопасности, учитывая множество аспектов, включая особенности языка, выполнение виртуальной машины и инструменты безопасности. Он жертвует частью гибкости, усиливая проверку типов и линейную логику, что облегчает компиляционную проверку и формальную верификацию. MoveVM отделяет состояние от логики, что лучше соответствует требованиям управления безопасностью активов на блокчейне.
Язык Move может эффективно избегать распространенных уязвимостей EVM, таких как повторные вызовы, переполнение, внедрение и т.д., но проблемы аутентификации, логики и переполнения больших целых чисел все еще требуют внимания разработчиков. Хотя Move учитывает безопасность, все же рекомендуется использовать услуги аудита сторонних безопасных компаний и поручить написание и проверку кода профессиональным безопасным командам.
![Move безопасность: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
13 Лайков
Награда
13
6
Поделиться
комментарий
0/400
NotGonnaMakeIt
· 07-27 10:27
move это просто
Посмотреть ОригиналОтветить0
DaoGovernanceOfficer
· 07-27 10:23
*вздох* еще одна презентация по безопасности, лишенная эмпирических метрик валидации...
Полный анализ безопасности языка Move: хранитель следующего поколения смарт-контрактов
Анализ безопасности языка Move: революционер смарт-контрактов
Язык Move — это язык смарт-контрактов, который может компилироваться и выполняться в блокчейн-среде, реализующей MoveVM. Каковы его характеристики безопасности как языка смарт-контрактов нового поколения, основным признаком которого является безопасность? Может ли он избежать распространённых угроз безопасности виртуальных машин контрактов, таких как EVM и WASM? В этой статье мы обсудим вопросы безопасности языка Move с трёх точек зрения: особенности языка, механизм выполнения и инструменты верификации.
1. Безопасные характеристики языка Move
В отличие от многих существующих языков программирования, язык Move был разработан так, чтобы поддерживать как безопасное взаимодействие с неподтвержденным кодом, так и статическую проверку. Move отказался от нелинейной логики, основанной на гибкости, не поддерживает динамическое распределение и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д., для реализации альтернативных моделей программирования.
Вот пример реализации токенов на языке Move:
переместить модуль 0x1::TestCoin { используйте 0x1::signer;
}
Этот пример демонстрирует некоторые ключевые функции безопасности языка Move:
Модульность: каждый модуль Move состоит из определения типов структур и процессов, может импортировать определения типов из других модулей и вызывать процессы других модулей.
Тип ресурса: структура, определенная с помощью ключа has или метки store, определяется как тип ресурса и может храниться в постоянном глобальном хранилище ключ-значение.
Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны и записаны только модулем, но хранятся в общедоступном реестре и могут быть просмотрены другими модулями.
Контроль доступа: доступ к ключевым операциям может быть реализован с помощью утверждений и других средств.
Редукция инвариантов: можно определить статические проверки инвариантов для формальной верификации.
Проверка байт-кода: включает проверку безопасности и линейную проверку, предотвращающую незаконные операции с типами ресурсов.
Эти характеристики обеспечивают безопасность языка Move на этапе компиляции.
![Анализ безопасности Move: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-419437619d55298077789e6eca578b48.webp(
2. Механизм работы Move
Программа Move работает в виртуальной машине, не может получить доступ к системной памяти и может безопасно выполняться в ненадежной среде.
Программа Move выполняется на стеке, глобальное хранилище делится на память ) кучу ( и глобальные переменные ) стек (. Память не может хранить указатели на ячейки памяти, глобальные переменные используются для хранения указателей на ячейки памяти.
Байткод инструкций Move выполняется в стековом интерпретаторе, что облегчает реализацию и контроль, подходит для сценариев блокчейна. Значения типов ресурсов могут быть перемещены только разрушительным образом.
Состояние выполнения программы Move представляется кортежем ⟨C, M, G, S⟩, включающим стек вызовов, память, глобальные переменные и операнды. В процессе выполнения вызов функции создает новый объект стека вызовов, а инструкции ветвления выполняют статический переход, избегая динамической диспетчеризации.
MoveVM отделяет хранение данных и стек вызовов, в отличие от дизайна EVM. Хотя такой дизайн жертвует гибкостью, он повышает безопасность и эффективность выполнения.
![Анализ безопасности Move: смарт-контракты как изменяющая игру технология])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(
3. Доказывающий ход
Move Prover является инструментом формальной верификации на основе логического вывода, который использует формальный язык для описания поведения программы и алгоритмы вывода для проверки соответствия программы ожидаемым результатам.
Архитектура Move Prover следующая:
Move использует язык спецификаций Move для описания спецификаций, который является подмножеством языка Move.
Move Prover — это полезный инструмент, который помогает разработчикам гарантировать корректность смарт-контрактов и снижать риски сделок.
![Анализ безопасности Move: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(
Итоги
Язык Move отлично спроектирован с точки зрения безопасности, учитывая множество аспектов, включая особенности языка, выполнение виртуальной машины и инструменты безопасности. Он жертвует частью гибкости, усиливая проверку типов и линейную логику, что облегчает компиляционную проверку и формальную верификацию. MoveVM отделяет состояние от логики, что лучше соответствует требованиям управления безопасностью активов на блокчейне.
Язык Move может эффективно избегать распространенных уязвимостей EVM, таких как повторные вызовы, переполнение, внедрение и т.д., но проблемы аутентификации, логики и переполнения больших целых чисел все еще требуют внимания разработчиков. Хотя Move учитывает безопасность, все же рекомендуется использовать услуги аудита сторонних безопасных компаний и поручить написание и проверку кода профессиональным безопасным командам.
![Move безопасность: смарт-контракты как изменяющий правила игры])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(