14
Анализ умных контрактов с помощью методов формальной верификации Сальников Александр Святославович м15_НоД_ИССА Высшая школа экономики, Москва, 2015 www.hse.ru Курсовая работа на тему

Technology Risk Modeling and Analysis Seminar - Formal Verification for Smart Contracts

Embed Size (px)

Citation preview

Анализумныхконтрактовспомощьюметодовформальнойверификации

Сальников Александр Святославовичм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

Проверкамоделинакорректность

Высшая школа экономики, Москва, 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

Записьмоделиконтракта (VoteContract)

Высшая школа экономики, Москва, 2015

Записьмоделиконтракта (VoteContract)

Высшая школа экономики, Москва, 2015

Верификациямодели

Высшая школа экономики, Москва, 2015

Заключение

• Основные результаты работы:• Реализация алгоритма контроля акций и голосования в виде умного контракта

• Построение математической модели цепочки блоков и умных контрактов

• Формальная верификация некоторых свойств математической модели

• Потенциальные пути для дальнейшей деятельности• Расширение использования средств языка WhyML в верификации более сложных структур данных

• Формализация правил трансляции с языка Solidity на язык WhyML• Расширение функциональности существующего транслятора.

101000, Россия, Москва, Мясницкая ул., д. 20Тел.: (495) 621-7983, факс: (495) 628-7931

www.hse.ru