Горькая правда о личной жизни смарт контрактов
Для большинства обывателей мир блокчейн технологий сегодня неразрывно связан с темой биткоина и трейдинга криптовалютами (складывается ощущение, что весь мир скоро овладеет свечным анализом, а когда прилив сменится отливом — все эти великолепные трейдеры-учителя превратятся в тыкву, о чем знает любой хоть немного знакомый с фондовым рынком профессионал).
Однако, блокчейн это немножко больше.
В первую очередь — это технология, для которой многие прогнозируют (ну, или просто “продают”) стать фундаментом новой зарождающейся индустрии (чтобы придать уверенности и веса в глазах людей, авторы часто употребляются слово “blockchain” в контексте таких модных слов, как “big data”, “artificial intelligence”, “internet of things”, “machine learning”, “computer vision”, “any other marketing buzz-word”, хотя связи чуть меньше, чем нисколько, ха-ха).
С момента выхода на рынок платформы Ethereum об этом заговорили еще больше, ведь стало возможным каждому желающему создавать новые приложения с использованием технологии смарт контрактов. Для обывателя смарт контракт можно описать вот такой картинкой:
То есть по сути нам говорят: начиная с сегодняшнего дня мы избавим мир от коррупции и ошибок человеческого фактора, все решения будет принимать безэмоциональная и честная математика/машина, а приложения и мир взаимоотношений между людьми и организациями выйдут на абсолютно новый уровень. Споры и разногласия исчезнут, договоренности будут исполняться автоматически, а мир избавится от посредников и десятка ненужных профессий. Если копнуть чуть-чуть глубже оголтелого маркетинга и попытки “впарить” массам новую идею на разных уровнях - политическом, экономическом и социальном - можно убедиться: что-то пошло не так (с). Позвольте приоткрою немножко занавес и честно расскажу то, о чем говорю на своих закрытых воркшопах и мероприятиях, посвященных технологии блокчейна и ее применении на практике.
Что такое смарт-контракт
Смарт-контракт — это всего лишь кусок программного кода, который описывает бизнес-логику приложения. Ровно такой же, как и любой кусок бизнес-логики внутри web-сайта, мобильного приложения или другого программного продукта.
Принципиальным отличием от приложений, которые пишутся уже более 40 лет разными программистами, является исполнение этого кода в блокчейн-среде, то есть единожды написанный и выложенный код будет иметь уникальный адрес, и пользователь, использующий публичные функции данного контракта, может быть твердо уверен: код контракта не менялся, а логика внутри ровно та, с которой он согласился, и которая четко и точно исполнит требуемую “математику взаимоотношений”.
Отсюда вытекает первое правило: смарт-контракт, чтобы быть “смартом”, должен абсолютно точно описываться простой математикой и логикой, исключающей разные трактовки. Если кто-то видел реальные договоры, то помимо ссылок на внешние спецификации и законодательные акты, он содержит форс-мажорные ситуации и ситуации, которые в случае несогласия будут рассматриваться различными судебными инстанциями. Мир, к сожалению или к счастью, не является “бинарным”: только да или нет.
Конечно, это мелочь, и, вероятно, в будущем всех нас “измерят” цифрами и бинарной логикой (надеюсь, не доживу), но есть еще нюансы.
Человеческий фактор по-прежнему есть
Как и любой другой кусок программного кода, код смарт-контракта не рождается сам по себе. Код смарт-контракта пишут программисты. К сожалению, у всех программистов (кроме меня, конечно) есть одно свойство:
Шутка, они — совершают ошибки. Помните TheDAO или совсем свежий Parity? Опишу одной картинкой:
Кто-то может бесконечно долго рассказывать о внешнем аудите, но это лишь маленькая часть верификации логики программного кода: легковесные peer review или более тяжеловесная процедура Fagan Inspeciton всего лишь уменьшают вероятность нахождения ошибки в промышленной эксплуатации. Единственный способ гарантировать отсутствие ошибки в коде — не писать его. Даже более строгие и дорогостоящие процедуры типа Formal modelling не спасут гиганта мысли и отца русской демократии.
Изолированность системы
Ладно, допустим, я слишком пессимистичен: у вас в штате есть программист, который не совершает ошибок (типа меня). Однако, возникает новая проблема: помимо блокчейна и кода в нем — существует внешний мир. Тот самый мир, с которым необходимо иметь плотный контакт и взаимодействие вашему “бесчеловечному” и “справедливому” смарт-контракту. И здесь тот же Ethereum оказывается бессилен: он не умеет вылезать за пределы своей лампы Алладина.
Приведу хороший классический пример смарт-контракта, когда во внешнем мире для принятия решения нет необходимости — система голосования. Жители выбирают (ок, не будем “давить” на больные точки типа где хранятся ключи пользователя и как предотвратить использование разных ключей одним жителем) кандидатов, и 18 марта в 20:00 система перестает принимать голоса, объявив победителя в режиме реального времени: честно и беспристрастно.
Приведу плохой классический пример смарт контракта: Вася и Петя поспорили на результат матча Спартак-ЦСКА. Система по окончании матча посмотрит результат и переведет деньги победителю. Проблема — как посмотрит? Не умеет сегодня смарт-контракт выбираться наружу. Мне опять можно возразить и напомнить о проекте типа Chain Link, или, возможно, дать пример другой платформы, смарт контракты которой более смарт, чем в Ethereum. Ладно, я неправ и отстал от жизни. Хотя…
Проблема оракула
У меня остался еще один козырь: так называемая “oracle problem”. У вас все еще идеальный программист (причем он остается идеальным с каждой новой версией смарт-контракта, и все аудиты никогда не ошибаются), ваша блокчейн-платформа умеет “залезать” во внешний мир и брать оттуда данные, но верите ли вы этим внешним данным?
Приведу опять классический пример смарт-контракта: при достижении неприемлемого температурного режима на борту самолета все пассажиры получают компенсацию (в криптовалюте, конечно же, ведь в светлом будущем нет места фиатной валюте, или есть?). Вы написали простой смарт контракт, где трудно ошибиться:
if (t > 30) {
transferMoney(passengerAddress);
}
Однако, что если датчик сломался (техника выходит из строя, да)? Смарт-контракт абсолютно честно выполнил свою работу, система получила от него данные, но данные оказались недостоверными. Неужели нужно заводить отдельную комиссию? А как обеспечить отсутствие подмены датчика (конечно новым блокчейном, надо все положить в блокчейн!)? Или беспристрастность комиссии (и комиссию тоже положим в блокчейн и отправим на шахты добывать золото для достижения консенсуса внутри группы)?
В другом классическом примере ЭДО переход на статус осуществляется….нажатием кнопки человеком! А ведь может и не нажать…или нажать не тогда, когда нужно. Да и вообще, “телефонное право” никто не отменял в любой точке этой планеты.
Вместо заключения
Включайте вашу голову, проблем и вопросов гораздо больше, чем решений и ответов на них. Это не последняя заметка из серии “темная сторона блокчейна”, скоро мы еще обязательно поговорим об “идеальном” White Paper, и даже об архитектуре блокчейн приложений. Сегодня принято ругать bitcoin за те архитектурные проблемы, которые он в себе несет, но каждое принятое решение — было неслучайным и абсолютно правильным. Все последующие попытки изменить свойства и “улучшить” их приводят к тому, что блокчейн превращают в классическую распределенную базу данных, а смарт-контракты в обычную бизнес-логику приложений.
И то и другое работает уже давно, а проблемы, которые мы пытаемся решить, лежат далеко за пределами применения блокчейна.
Просто делайте сервис, который решает проблему пользователя, и работайте на свою репутацию, которая обеспечит доверие и любовь к вам выше, чем к любому блокчейну и ICO, многие из которых продолжают оставаться обычным скамом:
Не лучше ли при жизни быть
Приличным человеком
(с) Владимир Высоцкий