Technology Risk Modeling and Analysis Seminar - Formal Verification for Smart Contracts
-
Upload
iosif-itkin -
Category
Education
-
view
62 -
download
3
Transcript of Technology Risk Modeling and Analysis Seminar - Formal Verification for Smart Contracts
Анализумныхконтрактовспомощьюметодовформальнойверификации
Сальников Александр Святославовичм15_НоД_ИССА
Высшая школа экономики, Москва, 2015www.hse.ru
Курсовая работа на тему
Высшая школа экономики, Москва, 2015
Объект,предмет,цельизадачиисследования
• Объект исследования - умный контракт, используемый в компании CoinOffering для децентрализованного управления акциями юридического лица.
• Предмет исследования – демонстрация применимости методов формальной верификации
• Цель работы – продемонстрировать применимость методов формальной верификации к разработке умных контрактов.
Задачи• Анализ инструментов формальной верификации• Провести первичный анализ кода контракта• Построить математическую модель контракта• Описать модель на языке WhyML• Провести формальную верификацию свойств модели
Высшая школа экономики, Москва, 2015
Математическаямодельумныхконтрактовицепочкиблоков
• Идеи умных контрактов были представлены еще в 1994 году Ником Сабо(Nick Szabo).
• Реальная возможность для имплементации умных контрактов появилась с изобретением технологии цепочки блоков в статье Сатоши Накамото (2009)
• Цепочка блоков – распределенно хранимое дерево изменения состояния (state transition) системы с экономической мотивацией применения только корректных транзакций
• APPLY(S, TX) −> S′orERROR• APPLY({Alice: $50, Bob: $50}, "send$20fromAlicetoBob") = {Alice: $30, Bob: $70}• APPLY({Alice: $50, Bob: $50}, "send$70fromAlicetoBob") = ERROR
Высшая школа экономики, Москва, 2015
Методыформальнойверификации
• Одна из первых работ из области – Robinson: Resolution Theorem Proving (1965)
• Толчок в развитии ФВ –Clarke & Emerson: Model Checking (1981)
• 1990-2000 гг-коммерческая адаптация технологии: IBM, Intel создают внутренние разработки
• Практический подход –код рассматривается как математическая модель.
• Имея только код сказать можно не много, поэтому необходимы дополнительные условия.
• Код рассматривается как система переходов, состоящая из конечных и бесконечных переходов. Бесконечные переходы нужно аннотировать инвариантами
Высшая школа экономики, Москва, 2015
Записьматематическоймодели
• Основная работа по верификации – составление модели и ее запись в машиночитаемом формате для доказательства.
• Множество инструментов: Isabelle, Z3, Yices, Rodin, Why3• Для моделирования выбран Why3 c языком записи модели WhyML:
• Использование всех типов ML и переменных• Использование логики предикатов• Возможности объявления изменяемых
(mutable) полей в структурах• Объявление алгебраических инвариантов• Использование программных конструкций
• Редактирование изменяемых полей• Условные переходы• Циклы• Исключения• Анонимные функции• Аннотации: пред- и постусловия, операторы
контроля (assertions), инварианты циклов.
Высшая школа экономики, Москва, 2015
Формальнаяверификацияиумныеконтракты
• Предметно ориентированный язык контрактов (DSL)• Транзакции – чистые функции• Строгая типизация• Высокие требования к безопасности (DAO Problem)• Невозможность редактирования кода после инициализации контракта• Простота кода (сложность выполнения повышает стоимость)
Высшая школа экономики, Москва, 2015
Построениематематическоймоделиконтракта
• Контракт предназначен для децентрализованного управления акциями и голосования:
• Структуры данных:• Общее количество акций.• Словарь балансов пользователей • Словарь проголосовавших держателей
• Функции:• Перевод средств со счета на счет• Проголосовать за предложение• Подсчет результатов голосования
• Инварианты:• Сохранение общего количества акций при передаче• Контроль количества проголосовавших акций
Высшая школа экономики, Москва, 2015
Записьмоделиконтракта(TokenContract)
Состояние:constant total : inttype state = {
mutable _balance: array uint256}
Функция передачи:let transfer (_from : Address.address) (_to : Address.address) (_val : uint256) (this : account) : accountПредусловия:
assert { 0 <= Address.to_int _to };assert { Address.to_int _to <= Address.max_address };
Инвариант:invariant {self.storage._balance.length = Address.max_address + 1 /\ BalanceSum.sumself.storage.balance 0 (Address.max_address + 1) = total }
Высшая школа экономики, Москва, 2015
Заключение
• Основные результаты работы:• Реализация алгоритма контроля акций и голосования в виде умного контракта
• Построение математической модели цепочки блоков и умных контрактов
• Формальная верификация некоторых свойств математической модели
• Потенциальные пути для дальнейшей деятельности• Расширение использования средств языка WhyML в верификации более сложных структур данных
• Формализация правил трансляции с языка Solidity на язык WhyML• Расширение функциональности существующего транслятора.