Повний аналіз безпеки смартконтрактів мови Move: характеристики, механізми та верифікація

Аналіз безпеки мови Move

Мова Move як нове покоління мов смарт-контрактів була спочатку спроектована з урахуванням безпеки. У цій статті буде проаналізовано безпеку мови Move з трьох аспектів: мовні характеристики, механізм виконання та інструменти верифікації.

1. Безпекові характеристики мови Move

Мова Move відмовилася від деяких більш гнучких, але менш безпечних характеристик, таких як динамічне викликанння, рекурсивні зовнішні виклики тощо. Натомість вона вводить концепції, такі як узагальнення, глобальне зберігання, ресурси тощо, для реалізації безпечних моделей програмування.

Ось простий приклад реалізації токена:

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

const ADMIN: адреса = @0x1;

struct Coin має ключ { значення: u64 }
struct Info має key { total_supply: u64 }

інваріант для всіх a: адреса, де існує<coin>(a):
    глобальний<coin>019283746574839201a(.value <= глобальний<info>)ADMIN(.total_supply;

Публічні веселощі initialize)account: &signer( {
    assert!)signer::address_of(account( == ADMIN, 0);
    перемістити в ) обліковий запис, Інформація { загальна_емісія: 0 } (;
}

публічні веселощі mint)account: &підписувач, кількість: u64(: Coin {
    assert!)signer::address_of(account( == ADMIN, 0);
    Нехай пропозиція = borrow_global_mut<info>)ADMIN(;
    supply.total_supply = supply.total_supply + сума;
    Монета { значення: сума }
}

Публічні веселощі value_mut)coin: &mut Coin(: &mut u64 {
    &mut coin.value  
}

}

Цей приклад демонструє деякі важливі особливості мови Move:

  1. Модульність: код організований у модулях, можна імпортувати типи та функції з інших модулів.

  2. Структура: використовуйте struct для визначення структури даних, можна додати маркери можливостей, такі як ключ.

  3. Глобальне зберігання: керуйте глобальним станом за допомогою операцій move_to та borrow_global_mut.

  4. Безпека ресурсів: забезпечення безпечного використання ресурсів через систему можливостей та лінійні типи.

  5. Невизначеність: можна визначити правила невизначеності для статичного перевірки.

Мова Move забезпечує безпеку під час компіляції за допомогою віртуальної машини байт-коду та перевірки інваріантів:

  • Віртуальна машина: перевірка легітимності структур, семантики процесу, помилок зв'язку тощо.

  • Перевірка інваріантів: перевірка, чи задовольняє стан програми попередньо визначеним правилам інваріантів.

![Аналіз безпеки Move: зміна правил гри у мовах смарт-контрактів])https://img-cdn.gateio.im/webp-social/moments-419437619d55298077789e6eca578b48.webp(

2. Механізм роботи Move

Програма Move виконується у віртуальній машині, її стан під час виконання складається зі стеку викликів, пам'яті, глобальних змінних та стеку операндів. Основні характеристики включають:

  1. Виконувати в контрольованому середовищі, без прямого доступу до системної пам'яті.

  2. Використання стекового інтерпретатора, що полегшує реалізацію та контроль.

  3. Ресурси можуть лише переміщуватися, їх не можна копіювати.

  4. Стек викликів реєструє контекст виконання, підтримує статичний перехід.

  5. Розділення логіки зберігання даних і виклику, підвищення безпеки та ефективності виконання.

Цей дизайн уникає деяких поширених проблем безпеки, таких як атаки повторного входу.

![Аналіз безпеки Move: грайзння для мови смарт-контрактів])https://img-cdn.gateio.im/webp-social/moments-69101617731b12c40620802eecf76caf.webp(

3. Рух Ровер

Move Prover є інструментом формальної верифікації, який допомагає розробникам перевіряти правильність смарт-контрактів. Його робочий процес виглядає наступним чином:

  1. Отримати вихідний код Move та специфікації як вхідні дані.

  2. Аналіз вихідного коду, витягування специфікацій.

  3. Перетворити код і специфікації в модель об'єкта валідатора.

  4. Генерація проміжного коду мови Boogie.

  5. Використання Z3 SMT-решателя для перевірки, чи є специфікація дійсною.

  6. Генерація діагностичного звіту, вказуючи на потенційні проблеми.

Move Prover використовує Move Specification Language для опису специфікацій поведінки програми, що дозволяє писати їх незалежно від бізнес-коду. Це забезпечує потужну підтримку формальної верифікації для смарт-контрактів.

![Аналіз безпеки Move: зміна гри мовою смарт-контрактів])https://img-cdn.gateio.im/webp-social/moments-372ff914a241634ca57784dc9685a03d.webp(

Підсумок

Мова Move була спроектована з урахуванням безпеки, забезпечуючи всебічний захист на всіх етапах - від особливостей мови і виконання віртуальної машини до інструментів валідації. Вона може ефективно уникнути багатьох поширених вразливостей смарт-контрактів, таких як повторний вхід, переповнення тощо. Проте, логічні помилки та проблеми з управлінням правами все ще потребують особливої уваги розробників. Рекомендується розробникам смарт-контрактів на Move, окрім використання особливостей мови та інструментів валідації, також звертатися до послуг стороннього аудиту безпеки для подальшого забезпечення безпеки контракту.

![Аналіз безпеки Move: революційна мова смарт-контрактів])https://img-cdn.gateio.im/webp-social/moments-f7cd11fef1c66709b219e1a1e8d2e4da.webp(

MOVE2.09%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
FalseProfitProphetvip
· 8год тому
що може зробити move, просто хвалити безпеку
Переглянути оригіналвідповісти на0
OPsychologyvip
· 8год тому
Ще один, хто розповідає про Move.
Переглянути оригіналвідповісти на0
MissedAirdropAgainvip
· 9год тому
Знищити цю групу мов з низьким рівнем безпеки
Переглянути оригіналвідповісти на0
  • Закріпити