Главная / Статьи / Правда о смарт-контрактах

Правда о смарт-контрактах

24 августа 2018

Как и «блокчейн», как и «искусственный интеллект» и «облачные вычисления», «смарт-контракт» — это фраза, притягивающая хайп.

Нет, ну правда — круто иметь возможность доверять тому, что произойдет, не полагаясь на юридическую систему!

Смарт-контракты обещают нам:

  •  автоматическое, бездоверительное и беспристрастное выполнение контрактов;
  •  устранение посредников и неукоснительное выполнение условий контрактов;
  •  устранение необходимости в услугах адвокатов.

Нравится мне этот хайп. Но все же, что на самом деле такое этот смарт-контракт? И разве он не относится исключительно к проектам на Эфириуме? И правда ли за ним будущее? И почему кто-то стоит на пути прогресса?

В этой статье я разберу все эти вопросы, а заодно и технические составляющие смарт-контракта (спойлер — все отнюдь не просто, и обеспечить его безопасность нелегко).

Что такое смарт-контракт?

Обычный контракт — это соглашение двух и более сторон, которое обязывает их совершить некое действие в будущем. Алиса заплатит Бобу определенную сумму за использование его дома (аренда). Чарли дает согласие в будущем чинить машину Дениз в обмен на ежемесячный платеж (страховка).

Смарт-контракт отличается тем, что условия оцениваются и выполняются компьютером, и такая составляющая, как доверие сторон, исключена. То есть, если Алиса соглашается заплатить Бобу $500 за кушетку с доставкой через три месяца (назовем это кушеточным фьючерсом), код определяет, соответствуют ли условия сделки заложенным параметрам. И если Алиса перевела деньги Бобу и с момента договоренности прошло три месяца, то забронированная покупателем кушетка доставляется по оговоренному адресу, не оставляя сторонам шанса отыграть назад.

Ключевое качество смарт-контракта — бездоверительное выполнение. Вам не нужно подключать третью сторону, которая проследит за выполнением различных условий. Вы не полагаетесь ни на добросовестность второго участника сделки, ни на юристов и правовую систему, которые придут на помощь, если вдруг что-то пойдет не так. Смарт-контракт обеспечивает выполнение заданных условий точно и в срок.

На самом деле «умные» контракты туповаты

Использование слова smart, то есть «умный», предполагает что эти контракты обладают неким интеллектом. Но это не так.

«Ум» контракта заключается в том, что его выполнение не зависит от доброй воли другой стороны. Смарт-контракт не будет ругаться с арендаторами, которые перестали платить, он просто заблокирует им доступ в дом. Сила смарт-контракта не в интеллекте, а в выполнении оговоренных условий.

Действительно обладающий интеллектом контракт мог бы принимать во внимание сопутствующие обстоятельства, и выносить решения, которые соответствовали бы духу и букве соглашения. То есть взвешивал бы все «за» и «против», как настоящий хороший судья. Смарт-контракт этого лишен. Для него не существует духа, равно как и каких-либо вторичных обстоятельств, он придерживается исключительно буквы соглашения.

Иными словами, бездоверительный контракт означает, что у нас не остается никакой возможности для неоднозначных трактовок, что порождает следующую проблему.

Смарт-контракты — достаточно сложная штука

Благодаря маркетинговым усилиям Ethereum бытует мнение, что смарт-контракты неразрывно связаны с этой платформой. Это неправда. У платформы Биткоин с самого начала, то есть с 2009 года, был довольно развитый язык смарт-контрактов Script. Более того, смарт-контракты существовали уже в 1995 году, до Биткоина. Разница между языком смарт-контрактов Биткоина и Ethereum в том, что последний — «тьюринг-полный». Это значит, что Solidity (язык cмарт-контрактов Ethereum) позволяет создавать более сложные контракты, но за счет этого их и сложней анализировать.

Сложность влечет несколько существенных последствий. Сложные контракты могут использоваться для более сложных ситуаций, но их выполнение тяжелее обезопасить. Даже с обычными контрактами всё обстоит так же — чем сложнее условия, тем сложнее обеспечить их выполнение, и тем больше возникает неопределенности и возможностей двояких толкований. Применительно к смарт-контрактам безопасность означает «изучить все возможные варианты выполнения контракта и убедиться, что выполнение контракта даст именно тот результат, который ожидается».

Анализировать выполнение контракта, написанного на тьюринг-полном языке, — нетривиальная задача. Обезопасить выполнение такого контракта — примерно то же, что убедиться в отсутствии багов в компьютерной программе. Мы знаем, что это очень сложно, поскольку баги можно отловить практически в любой из существующих программ.
Обычный контракт составляется юристами, для этого им нужно несколько лет учиться и сдавать сложный квалификационный экзамен. Смарт-контракты требуют не меньшего уровня подготовки, однако сегодня многие из них пишут новички, не понимающие уровня требований к безопасности контрактов.

Биткоин решил для себя эту проблему, отказавшись от тьюринг-полного языка. Контракты на тьюринг-неполном языке проще анализировать и легче моделировать поведение программы на разных этапах.

Ethereum же перекладывает всю ответственность на плечи авторов смарт-контрактов. Они сами должны убедиться, что контракты делают именно то, чего от них ожидают.

Смарт-контракты не являются контрактами (во всяком случае, на Ethereum).

Перекладывание ответственности за обеспечение безопасности контрактов на плечи разработчиков — это неплохо в теории, но на практике это шаг к централизации.

Эфир запустил их под лозунгом «Код есть закон». То есть контракт на Ethereum — это последняя инстанция, и никто не может отменить его. Разработчикам смарт-контрактов таким образом говорили: «Вы — сами по себе. Если вы облажались и ваш смарт-контракт работает не так, как требуется, значит, вы это заслужили». Эта концепция вылезла боком после запуска The DAO.

DAO — это Децентрализованная Автономная Организация, а также фонд, созданный на Ethereum, чтобы продемонстрировать возможности платформы. Пользователи могли вкладывать деньги в The DAO и получать прибыль от инвестиций, сделанных The DAO. Предполагалось, что решения об инвестициях будут финансироваться за счет краудсорсинга и приниматься децентрализованно. The DAO собрало $150 млн в эфире при курсе монеты ~$20. В теории все выглядело отлично, но потом обнаружилась проблема. Код не был достаточно хорошо защищен, и некто придумал способ, как увести деньги The DAO.

Многие назвали этого человека хакером. Отчасти это правда — в том смысле, что «хакер» нашел способ, не учтенный разработчиками, как присвоить деньги, задействованные в контракте. Но в более широком понимании этот человек не был хакером. Он просто воспользовался слабыми местами смарт-контракта. В точности как ушлый юрист использует лазейки в налоговом законодательстве, чтобы сэкономить деньги своим клиентам.

В результате Ethereum решил, что код все-таки не является законом, и вернул деньги тем, кто вложил их в The DAO. Иными словами, разработчики контрактов и инвесторы сделали нечто глупое, и разработчики Ethereum решили их выручить.

Последствия этого случая известны и задокументированы. На свет появился Ethereum Classic, унаследовавший The DAO в первоначальном виде и сохранивший принцип «Код есть закон». Кроме того, разработчики стали меньше использовать тьюринг-полноту языка Ethereum, поскольку с ней безопасность контрактов обеспечить сложней. Наиболее востребованные шаблоны для смарт-контрактов — стандарты ERC20 и ERC721 — позволяют писать контракты без использования тьюринг-полноты.

Смарт-контракты работают только с цифровыми инструментами на предъявителя

Впрочем, даже без тьюринг-полноты смарт-контракты не теряют своей привлекательности. В конце концов, кому понравится ходить в суд, бездоверительно отстаивая то, что принадлежит ему по праву? Да и использовать смарт-контракты ведь проще, чем обычные?

Например, разве не выиграет сфера недвижимости от использования смарт-контрактов? Алиса может подтвердить права собственности на дом. Боб может перечислить деньги за дом и получить в обмен права на него. Никаких вопросов, связанных с правом собственности, — все сделает машина, судьи, бюрократы и страховки не нужны. Звучит изумительно, не правда ли?

Но тут кроются две проблемы. Во-первых, выполнение смарт-контракта централизованной стороной не является бездоверительным. А ведь вам придется доверить исполнение контракта централизованной стороне. Бездоверительность — одно из ключевых преимуществ, централизованное выполнение контракта лишает всю затею смысла. Чтобы смарт-контракты были действительно бездоверительными, нужна по-настоящему децентрализованная платформа.

Это подводит нас ко второй проблеме. В децентрализованном контексте смарт-контракты работают только в том случае, когда есть некая определяющая связь между цифровой и физической версиями. То есть, если цифровая версия дома меняет владельца, то это должно также произойти и в реальности. Цифровой мир должен «узнать» о существовании мира физического. Это так называемая «проблема оракула».

Когда Алиса передает дом Бобу, смарт-контракт должен знать, что она на самом деле передала этот дом. Есть несколько способов обеспечить это условие, но у всех существует одна и та же проблема. Понадобится довериться некой третьей стороне, которая подтверждает происходящие в физическом мире события.

К примеру, дом может быть представлен как уникальный токен на Ethereum. Алиса передает токен, то есть права на дом, Бобу с помощью атомарного свопа в обмен на некоторое количество эфира. И здесь возникает проблема — Боб должен быть уверен в том, что токен на самом деле представляет собой право собственности на дом в цифровом виде. То есть нужен оракул, который подтвердит, что купив токен, он действительно получает право собственности на реальный дом.

Более того, даже если орган власти подтвердит, что токен представляет собой право собственности на дом, что будет, если токен украдут? Кому тогда будет принадлежать дом — вору, укравшему токен? А что, если токен потерян? Дом больше никогда нельзя будет продать? Можно ли заново выпустить токен дома? А если можно, то кто уполномочен это сделать?

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

От этого страдают даже цифровые активы, такие как электронные версии книг, электронная медико-санитарная документация или фильмы. Права на эти активы определяет какой-то другой орган, а значит, без оракула не обойтись.

В этом свете оракулы выглядят как версии судей с заниженным интеллектом. Вместо автоматического выполнения условий контракта вы получаете сложности в виде необходимости предусмотреть и прописать все возможные последствия, причем с субъективностью и рисками, присущими человеческому мышлению. Иначе говоря, пытаясь сделать контракт «умным», вы усложняете процесс его написания, а необходимость доверять кому-то еще никуда не девается.

Единственное, что может работать без оракулов — это цифровые инструменты на предъявителя. По существу, обе задействованные в контракте стороны должны быть не просто цифровыми, они должны быть инструментами на предъявителя. То есть право собственности на токен не должно зависеть ни от чего вне платформы, где осуществляется смарт-контракт. Только в этом случае смарт-контракт может быть действительно бездоверительным.

Выводы

Хотел бы я, чтобы смарт-контракты были более полезными, чем они на самом деле есть. К сожалению, многое из того, что мы, люди, считаем контрактами, упирается в целый ряд допущений и нормы права, которые не всегда отличаются точностью формулировок.

Более того, оказывается, что использование тьюринг-полноты языка иногда ведет к тому, чтобы все испортить, и привести к непредсказуемым последствиям. Нам бы стоило назвать платформы для смарт-контрактов «тьюринг-уязвимыми», а не «тьюринг-полными». А казус с The DAO доказывает, что существует еще и дух контракта, который пользуется доверием и гораздо более полезен в разрешении споров, чем мы думаем.

Смарт-контракты слишком легко испортить, их безопасность слишком сложно обеспечить, их крайне сложно сделать бездоверительными, и они в большинстве случаев зависят от слишком многих внешних факторов.

Единственное место, где смарт-контракты действительно добавляют бездоверительности, это цифровые инструменты на предъявителя на децентрализованных платформах. Таких как Биткоин.

Автор статьи, разработчик Bitcoin Core Джимми Сонг

Поделится в: