BDS
articles, resource-center

Clear: формальна система верифікації для смарт-контрактів Solidity

October 28, 2025
8 хв
Артем Зайцев
Архітектура формальної верифікаційної системи, що демонструє інтеграцію Lean proof assistant з процесом верифікації смарт-контрактів Solidity

Вступ

Спільнота розробників блокчейнів вже давно потребує потужних підходів до безпеки смарт-контрактів та їх цілісності.

## Вступ та резюме

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

Це полегшує розробникам початок роботи над створенням доказів того, що специфікації випливають з абстрактного представлення.

Вступ до структури

Фреймворк компілює комп'ютерні докази правильності смарт-контрактів Yul у підмову Lean proving assistant, а також може компілювати специфікації для їх виконання на EVM відповідно до тестів для перевірки правильності моделі.

Цей метод використовує багаті математичні бібліотеки та автоматизацію доказів екосистеми Lean, тому він вимагає більше ручного втручання, ніж інші відомі методи автоматизації, але будь-який аргумент щодо правильності, який можна записати на папері, може бути перевірений комп'ютером.

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

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

Технічна архітектура та функції

Щоб максимально сприяти формуванню довіри, ця структура отримала грантове фінансування для тестування семантики на відповідність наборам тестів відповідності Ethereum та розширення моделі відповідно до найновіших планів оновлення Ethereum. Ця вдосконалена модель буде опублікована як суспільне благо.

Фреймворк включає генератор умов верифікації, який здатний витягувати програми Yul у Lean proof assistant. Він не тільки розбиває програми на керовані блоки, які легко зрозуміти, але й генерує спрощені описи семантики цих блоків.

Фреймворк також підтримує написання доказів завдяки бібліотеці теорем та інструментам автоматизації. Докази можна перевірити за допомогою LeanCompiler, ядро перевірки доказів якого є дещо меншим, але яке на даний момент вважається без помилок у сенсі прийняття доказів хибних тверджень.

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

Композиційність та абстракція

Властивості композиційності та абстракції означають, що перевірені компоненти коду зберігаються при їх використанні в нових ситуаціях. Це дозволяє замінити великі частини складного коду простими операторами, що описують їх дії.

Він навіть може підтримувати безпечну заміну реалізацій коду альтернативними, але семантично еквівалентними, наприклад, оптимізуючи алгоритми та зберігаючи гарантії правильності.

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

Компоненти системи та робочий процес

Фреймворк має три ключові компоненти, які співпрацюють, щоб забезпечити широкі можливості перевірки:

  • Модель діалекту Yul EVM, яка пояснює семантику коду Yul у середовищі асистента доведення. Саме це надає міркуванням про поведінку програм їхню базову семантику
  • Збірка спеціальних тактик і теорем, спеціально розроблених для полегшення написання доказів про програми Yul. Ці інструменти обробляють типові шаблони та операції, які часто зустрічаються в перевірці смарт-контрактів
  • Генератор умов верифікації створює шаблони доказів з високим рівнем структури та автоматично генерує докази, що спрощують програми Yul до канонічних форм. Ці умови верифікації більше не визначаються в термінах мови Yul, а в більш доступній формі

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

Почніть перевіряти свої смарт-контракти вже сьогодні

Перетворіть свою розробку Solidity за допомогою формальної верифікації. Почніть вже зараз.

Вимоги до складання контракту

Фреймворк передбачає певну структуру кодів Yul.

Практична реалізація: функція множення

Для реалізації функції множення необхідно виконати наступні структурні вимоги, скомпілювавши наступний код із використанням певних прапорців компілятора. Цей приклад показує, як фреймворк може керувати функціями, написаними користувачем, та довільними структурами потоку управління.

Процес множення має два вхідні значення і виконує множення, додаючи одне значення до накопичувача необхідну кількість разів.

У циклах замість стандартних умов циклу використовуються умовні розриви, щоб продемонструвати можливість роботи фреймворку зі складним сценарієм управління потоком.

Процес генерації умов перевірки

Запуск генератора умов перевірки на програмі створює структуровану ієрархію файлів із згенерованими файлами. Загальна структура складається з:

  • Створені файли відповідно до кожного файлу Yul та контракту
  • Інші загальні підпапки абстрактних блоків коду

Фреймворк автоматично розкладає програми на одиниці та створює логіку інтеграції, щоб забезпечити відповідність складених одиниць оригінальній програмі. Кожен елементарний блок коду створює три типи файлів, які можна легко обґрунтувати, повторно використовувати та які забезпечують кращу продуктивність і масштабованість.

Код програми Yul та специфічні для фреймворку міркування включають умови верифікації та докази того, що виконання блоку коду призводить до умови верифікації, які представлені у згенерованих файлах сімейства. Ці файли є сполучною ланкою між специфікацією/задоволенням та виконанням коду, і слід бути особливо обережними з файлами сімейства користувача, оскільки це файли, згенеровані фреймворком, які містять логіку верифікації, яку користувач повинен виконати.

Щоб заповнити логічні прогалини, система повинна надавати специфікації умовної поведінки. Для вираження семантики управління циклами система пропонує утиліти для виконання рутинних операцій, таких як вихід з циклу та доступ до змінних у станах програми.

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

Виклики перевірки циклу

Цикли дуже важко перевірити за допомогою системи верифікації, і це частково пов'язано з індуктивним міркуванням, яке часто вимагається від такої системи. Фреймворк вирішує цю проблему, надаючи систематичні специфікації компонентів циклу.

Користувач повинен вказати:

  • Умови припинення дії
  • Поведінка після ітерації
  • Поведінка тіла циклу
  • Інваріанти циклу в цілому

Фреймворк підтримує опис семантики циклів простих оновлень змінних для розробки умовної логіки. Хоча на перший погляд така технічна деталь може здатися не дуже прозорою, вона гарантує, що всі можливості виконання будуть охоплені.

Перевірка побудови та автоматизація

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

Для обробки використовуються спеціальні тактики:

  • Зберігайте маніпуляції у змінних
  • Контроль логіки потоку
  • Інші поширені проблеми з перевіркою

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

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

Розширені функції та майбутній розвиток

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

Шаблони в міркуванні програми Yul, такі як операції зі сховищем змінних, обробляються за допомогою спеціальних процедур автоматизації.

Подальший розвиток

Подальший розвиток містить ряд помітних поліпшень:

  • Надійна хеш-модель матиме правильну семантику криптографічних операцій
  • Моделювання міжконтрактних викликів дозволить проаналізувати складні моделі взаємодії
  • Семантична точність буде перевірена за допомогою газового моделювання з урахуванням вартості виконання
  • Дотримання останніх змін у планах оновлення Ethereum забезпечить сумісність із існуючою поведінкою мережі
  • Покращення зручності використання дозволить користувачам зробити щоденне використання більш ефективним та зручним

Можна продовжити роботу, щоб витягти клієнти виконання Ethereum зі специфікацій і створити формально перевірені компілятори байт-коду Yul до EVM.

Інтеграція з математичними бібліотеками

Фреймворк базується на широкому спектрі математичних та комп'ютерних бібліотек у своїй базовій системі доказів. Ці бібліотеки пропонують формалізовані концепції, які часто зустрічаються під час міркувань про програми, що значно спрощує зусилля, необхідні для виконання складних доказів.

Спеціальні тактики базуються на потужному середовищі метапрограмування без шкоди для перевірки. Комбінований характер автоматизації, заснований на спостережуваних моделях використання, гарантує постійне поліпшення зручності використання з часом.

Архітектура для кодування Yul безпосередньо в середовищі доказу, що робить інтерфейс прозорим і природним для розробників, які звикли до мови, та пропонує можливості, яких раніше не було в автоматизованій верифікації, щоб гарантувати правильність коду.

FAQ

##formal_verification
##solidity_smart_contracts
##lean_proof_assistant
##blockchain_security
##smart_contract_auditing
Пов'язаний контент

Пов'язані статті

Дізнайтеся більше цікавої інформації та рішень у наших рекомендованих статтях

BDS

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

+1 929 560 3730 (США)
+44 2045 771515 (Великобританія)
+372 603 92 65 (Естонія)
Harju maakond, Tallinn, Lasnamäe linnaosa, Katusepapi tn 6-502, 11412, Естонія

Будьте в курсі новин

Отримуйте останні новини та оновлення про блокчейн на свою електронну пошту.