Полный анализ безопасности языка Move: хранитель следующего поколения смарт-контрактов

robot
Генерация тезисов в процессе

Анализ безопасности языка Move: революционер смарт-контрактов

Язык Move — это язык смарт-контрактов, который может компилироваться и выполняться в блокчейн-среде, реализующей MoveVM. Каковы его характеристики безопасности как языка смарт-контрактов нового поколения, основным признаком которого является безопасность? Может ли он избежать распространённых угроз безопасности виртуальных машин контрактов, таких как EVM и WASM? В этой статье мы обсудим вопросы безопасности языка Move с трёх точек зрения: особенности языка, механизм выполнения и инструменты верификации.

1. Безопасные характеристики языка Move

В отличие от многих существующих языков программирования, язык Move был разработан так, чтобы поддерживать как безопасное взаимодействие с неподтвержденным кодом, так и статическую проверку. Move отказался от нелинейной логики, основанной на гибкости, не поддерживает динамическое распределение и рекурсивные внешние вызовы, а вместо этого использует такие концепции, как обобщения, глобальное хранилище, ресурсы и т. д., для реализации альтернативных моделей программирования.

Вот пример реализации токенов на языке Move:

переместить модуль 0x1::TestCoin { используйте 0x1::signer;

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:

  1. Модульность: каждый модуль Move состоит из определения типов структур и процессов, может импортировать определения типов из других модулей и вызывать процессы других модулей.

  2. Тип ресурса: структура, определенная с помощью ключа has или метки store, определяется как тип ресурса и может храниться в постоянном глобальном хранилище ключ-значение.

  3. Глобальное хранилище: позволяет программам Move хранить постоянные данные, которые могут быть прочитаны и записаны только модулем, но хранятся в общедоступном реестре и могут быть просмотрены другими модулями.

  4. Контроль доступа: доступ к ключевым операциям может быть реализован с помощью утверждений и других средств.

  5. Редукция инвариантов: можно определить статические проверки инвариантов для формальной верификации.

  6. Проверка байт-кода: включает проверку безопасности и линейную проверку, предотвращающую незаконные операции с типами ресурсов.

Эти характеристики обеспечивают безопасность языка 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 следующая:

  1. Получение входных файлов Move, содержащих спецификации программы.
  2. Парсер извлекает спецификации, компилятор компилирует исходный код в байт-код.
  3. Преобразовать в модель объекта валидатора.
  4. Переведите на промежуточный язык Boogie.
  5. Система проверки Boogie генерирует условия проверки.
  6. Z3-решатель проверяет, является ли SMT-формула невыполнимой.
  7. Создать диагностический отчет и восстановить его до уровня исходного кода.

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(

MOVE-1.45%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 6
  • Поделиться
комментарий
0/400
NotGonnaMakeItvip
· 07-27 10:27
move это просто
Посмотреть ОригиналОтветить0
DaoGovernanceOfficervip
· 07-27 10:23
*вздох* еще одна презентация по безопасности, лишенная эмпирических метрик валидации...
Посмотреть ОригиналОтветить0
AirDropMissedvip
· 07-27 10:21
Все же доверяю Solidity.
Посмотреть ОригиналОтветить0
NFTRegretfulvip
· 07-27 10:17
Стал более популярным, чем Solidity.
Посмотреть ОригиналОтветить0
MEVHuntervip
· 07-27 10:15
Боюсь, это не газовый храм битвы!
Посмотреть ОригиналОтветить0
LadderToolGuyvip
· 07-27 10:11
Если есть проблемы с безопасностью, то я ухожу.
Посмотреть ОригиналОтветить0
  • Закрепить