
Введение
Сообщество разработчиков блокчейнов давно нуждается в крутых подходах к безопасности и целостности смарт-контрактов.
## Введение и аннотация
Эта новая система формальной верификации изменит то, как разработчики проверяют правильность своих смарт-контрактов Solidity. Она более гибкая, чем другие обычные автоматизированные методы доказательства теорем, поскольку более программируемая человеком, а также обеспечивает большую гибкость в выражении и демонстрации свойств правильности, чем раньше.
Это дает разработчикам более удобную отправную точку для построения доказательств того, что спецификации вытекают из абстрактного представления.
Введение в структуру
Фреймворк компилирует проверяемые компьютером доказательства правильности смарт-контрактов Yul в подязык Lean proving assistant и может компилировать спецификации для их выполнения на EVM в соответствии с тестами для проверки правильности модели.
Он использует богатые математические библиотеки и автоматизацию доказательств экосистемы Lean, поэтому этот метод требует большего ручного вмешательства, чем другие известные методы автоматизации, но любой аргумент правильности, который можно записать на бумаге, может быть доказан с помощью компьютера.
Фреймворк использует эффективные библиотеки математической формализации и опции автоматизации для конкретных областей. Но, как показывают многие основные математические теоремы, всегда будут утверждения, которые нельзя доказать в любой системе, даже если она достаточно мощная.
Это должно дать возможность проверять правильность сложных смарт-контрактов. Эта структура особенно хороша для того, чтобы показать свои сильные стороны, проверяя сложные свойства алгоритмов численного приближения, которые используются в децентрализованных финансовых приложениях и верификаторах с нулевым разглашением в цепочке.
Техническая архитектура и особенности
Чтобы максимально укрепить доверие, эта структура получила грант на тестирование семантики по наборам тестов на соответствие Ethereum и на расширение модели до последних планов обновления Ethereum. Эта улучшенная модель будет опубликована как общественное достояние.
В структуре есть генератор условий проверки, который может извлекать программы Yul в помощник Lean proof. Он не только разбивает программы на удобные блоки, которые легко проанализировать, но и создает упрощенные описания семантики этих блоков.
Эта структура также помогает писать доказательства, предоставляя библиотеку теорем и инструменты для автоматизации. Доказательства потом можно проверить с помощью LeanCompiler, ядро проверки доказательств которого немного меньше, но которое сейчас считается без ошибок в том смысле, что не принимает доказательства ложных утверждений.
Этот подход хорош тем, что позволяет записывать любые свойства, которые можно формально описать и доказать на бумаге, и проверять их с помощью LeanCompiler, который имеет относительно небольшое ядро проверки доказательств и в настоящее время считается свободным от ошибок в смысле принятия доказательств ложных утверждений. Эта гибкость сильнее, чем у большинства автоматизированных методов, которые ограничены встроенными методами рассуждений.
Композиционность и абстракция
Свойства композиционности и абстракции означают, что проверенные части кода сохраняются, когда их используют в новых ситуациях. Это позволяет заменять большие части сложного кода простыми описаниями их действий.
Он даже может поддерживать безопасную замену реализаций кода альтернативными, но семантически эквивалентными, например, оптимизируя алгоритмы и сохраняя гарантии корректности.
Эта структура дает возможность расширяемой автоматизации с помощью настраиваемых процедур, которые дают доказательства, проверенные базовой системой. Это значительно сокращает ручную работу, а гарантии проверки сохраняются.
Компоненты системы и рабочий процесс
У этой системы есть три ключевых компонента, которые вместе дают широкие возможности для проверки:
- Модель диалекта Yul EVM, которая объясняет, как работает код Yul в среде доказательств. Это то, что помогает понять, как программы себя ведут
- Набор специальных тактик и теорем, которые помогают писать доказательства для программ Yul. Эти инструменты обрабатывают типичные шаблоны и операции, которые часто встречаются в проверке смарт-контрактов
- Генератор условий проверки создает шаблоны доказательств с высокоуровневой структурой и автоматически генерирует доказательства, которые упрощают программы Yul до канонических форм. Эти условия проверки больше не задаются на языке Yul, а описываются более понятным способом
Проверка — это структурированный процесс. Пользователи начинают с программы Yul и компилируют ее со специальными опциями компилятора, чтобы получить код, который соответствует структурным требованиям фреймворка. Затем этот код обрабатывается генератором условий проверки, чтобы создать нужную инфраструктуру доказательства.
Начни проверять свои смарт-контракты уже сегодня
Сделайте свою разработку на Solidity лучше с помощью формальной верификации. Начните прямо сейчас.
Требования к составлению контракта
В рамках этой структуры предполагается, что коды Yul имеют определенную структуру.
Практическая реализация: функция умножения
Чтобы реализовать функцию умножения, нужно выполнить следующие структурные требования, скомпилировав код с определенными флагами компилятора. Этот пример показывает, как фреймворк может управлять функциями, написанными пользователем, и произвольными структурами управления потоком.
Процесс умножения имеет два входа и делает умножение, добавляя одно значение в аккумулятор столько раз, сколько нужно.
Условные разрывы используются в циклах вместо стандартных условий цикла, чтобы показать, что фреймворк может работать со сложными сценариями управления потоком.
Процесс генерации условий проверки
Запуск генератора условий проверки на программе создает структурированную иерархию файлов с сгенерированными файлами. Общая структура состоит из:
- Созданные файлы для каждого файла Yul и контракта
- Другие общие подпапки абстрактных блоков кода
Фреймворк автоматически разбивает программы на части и создает логику интеграции, чтобы все части вместе составляли исходную программу. Каждый элементарный блок кода создает три типа файлов, которые легко понимать, можно повторно использовать и которые обеспечивают лучшую производительность и масштабируемость.
Код программы Yul и специфические для фреймворка рассуждения включают условия верификации и доказательства того, что выполнение блока кода приводит к условию верификации, которые представлены в сгенерированных файлах семейства. Эти файлы связывают спецификацию/соответствие и выполнение кода, и следует с особой осторожностью относиться к файлам семейства пользователя, поскольку это файлы, сгенерированные фреймворком, которые содержат логику верификации, которую пользователь должен завершить.
Чтобы заполнить логические пробелы, системе нужно дать спецификации условного поведения. Чтобы выразить семантику управления циклом, система предлагает утилиты для выполнения рутинных операций, таких как выход из цикла и доступ к переменным в состояниях программы.
Спецификации не обязательно должны быть неправильными, но они могут не отражать предполагаемое поведение, если в них не указаны важные моменты. Проблемы со спецификациями обычно являются самой сложной частью формальной верификации, иногда даже более сложной, чем само написание доказательств.
Задачи по проверке циклов
Циклы очень сложно проверить с помощью системы верификации, и это отчасти связано с индуктивным мышлением, которое часто требуется для такой системы. Фреймворк решает эту проблему, предоставляя систематические спецификации компонентов циклов.
Пользователь должен указать:
- Условия прекращения
- Поведение после итерации
- Как работает тело цикла
- Не меняйте инварианты циклов в целом
Фреймворк поддерживает описание семантики циклов простых обновлений переменных для разработки условной логики. Хотя сначала такие технические детали могут показаться не очень понятными, они гарантируют, что все возможности выполнения будут учтены.
Проверка конструкции и автоматизация
После того, как все требования определены, нужно показать, что условия проверки подтверждают эти требования. Эта платформа предлагает полную автоматизацию для обработки типичных шаблонов доказательств.
Для обработки используются пользовательские тактики:
- Храните манипуляции в переменных
- Рассуждения о контроле потока
- Другие распространенные проблемы с проверкой
Эти автоматические методы значительно сокращают количество ручной работы, нужной для проверки, и при этом сохраняют высокий уровень проверки.
Процесс проверки обычно начинается с развертывания соответствующих абстракций, так как эти доказательства напрямую связаны с пользовательскими свойствами. Он использует структуру для автоматизации большого количества условий проверки с помощью универсальных тактик очистки, которые используются для управления техническими деталями, такими как операции хранения переменных и переходы состояний.
Расширенные функции и будущие разработки
Фреймворк — это сложный инструмент, который превращает любую программу Yul в набор утверждений о том, что должна делать программа, и доказывает, что код соответствует ожиданиям. Программы сначала переводятся в программы с доказательствами согласованности в абстрактном представлении, что дает упрощенные отправные точки для дальнейших доказательств спецификаций.
Шаблоны в программном мышлении Yul, такие как операции с хранилищем переменных, обрабатываются с помощью настраиваемых процедур автоматизации.
Дальнейшее развитие
Дальнейшая разработка включает в себя ряд заметных улучшений:
- Надежная хеш-модель будет иметь правильную семантику криптографических операций
- Моделирование межконтрактных вызовов поможет разобраться в сложных схемах взаимодействия
- Семантическая точность будет проверяться с помощью газового моделирования с учетом затрат на выполнение
- Следуйте последним изменениям в планах обновления Ethereum, чтобы все работало с существующей сетью
- Улучшение удобства использования поможет людям делать повседневные вещи более эффективно и удобно
Можно поработать над извлечением клиентов Ethereum execution из спецификаций и создать официально проверенные компиляторы Yul в байт-код EVM.
Интеграция с математическими библиотеками
Фреймворк использует в своей системе доказательств широкий спектр математических и компьютерных библиотек. Эти библиотеки предлагают формализованные концепции, которые часто встречаются при рассуждениях о программах, что значительно упрощает работу по выполнению сложных доказательств.
Наши методы основаны на мощной среде метапрограммирования, без ущерба для проверки. Автоматизация, основанная на наблюдаемых моделях использования, гарантирует, что удобство использования будет со временем только улучшаться.
Архитектура для кодирования Yul прямо в среде доказательства, это делает интерфейс понятным и естественным для разработчиков, привыкших к языку, и предлагает возможности, которых раньше не было в автоматической верификации, чтобы гарантировать правильность кода.


