Летом 2016 года сообщество пользователей криптовалют взволнованно следило за новостями о взломе платформы блокчейна Ethereum, в ходе которого из распределенного реестра были похищены 55 млн долл. Это известие приковало к себе всеобщее внимание, отвлекая от голосования по выходу Великобритании из Евросоюза и предвыборной кампании в США. В конечном счете деньги вернули, но результат инцидента менее важен, чем проблемы, на которые он помог обратить внимание.

Умные контракты

«Технари» любят придумывать решения проблем, о существовании которых никто раньше и не догадывался [1], полагая, что с помощью кода можно привести в порядок хаотичный реальный мир. В «Законах» Платона, написанных примерно в 350 году до н.э., в числе прочего речь идет о договорах как о понятной и привычной части жизни гражданина Афин. Платон рассуждает о том, как поступать, если кто-то нарушит договор, и кто должен выступать в роли арбитра между спорящими сторонами. По Платону, договор может быть признан недействительным, например, если кто-то договорился о совершении незаконного деяния, если одну из сторон принудили к подписанию или если невыполнение условий произошло не по вине сторон. Все это описано не особенно подробно, но ясно, что древние греки уже достаточное время пользовались договорами.

Перенесемся в 1990-е годы, когда впервые прозвучало мнение о том, что в связи с появлением электронной коммерции назрела потребность в умных контрактах [2]. Четко описать их идею непросто, но, согласно одному из определений, это «механизм с участием двух или более сторон, которые вкладывают свои цифровые активы, а те автоматически перераспределяются между сторонами по формуле, основанной на некоторых данных, неизвестных на момент начала действия контракта» [3]. Становясь участниками контракта, исполнители соглашаются выполнять (или не выполнять) определенные задачи, а «ум» состоит в использовании технологий для снижения неопределенности по поводу условий соглашения и соответствующих транзакционных затрат. В идеале умный контракт выполняется с помощью его механизма — программы. Стороны не могут нарушить такой контракт, поскольку обеспечение и проверка соблюдения его условий подчиняются неумолимой логике компьютера, выполняющего соответствующие алгоритмы.

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

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

Опора на умные контракты

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

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

Одна из платформ поддержки распределенных реестров, Ethereum, была разработана специально с расчетом на умные контракты, но платформа также предлагает язык скриптов, позволяющий реализовать более широкий, чем криптовалюта, круг возможностей. Высшей целью является автономная организация, управляемая умными контрактами, деятельность которой минимально зависит от руководителей и владельцев, — децентрализованная автономная организация (Decentralized Autonomous Organization, DAO). Четкое определение такой организации дать трудно, идея в целом такова: благодаря децентрализованности отсутствуют узкие места и точки, сбой которых может вызвать отказ всей системы, а автономность означает полное самоуправление. В чем-то такая организация похожа на разветвленную транснациональную корпорацию. Однако в них структурные единицы принадлежат разным лицам, а общая схема владения может быть очень запутанной. Некоторые экономики, например, итальянская и южнокорейская, представляют собой обширные перекрывающиеся сети перекрестного владения. Выяснить, кто отвечает за действия конкретной компании в таких условиях не всегда возможно, а переход на DAO позволил бы исправить эту ситуацию.

Провал децентрализованной автономной организации

Единственная реальная организация такого рода так и называлась — The DAO. Это инвестиционный фонд, управлявшийся с помощью умных контрактов на основе Ethereum, который учредили, чтобы продемонстрировать жизнеспособность самой идеи. В обмен на покупку эфиркойнов инвесторы вступали в фонд, получая голоса пропорционально размеру вложения. Кандидат на финансирование должен был представить бизнес-план и умный контракт, определяющий условия взаимодействия с The DAO; затем проходило голосование инвесторов. Как только кандидат получал поддержку, контракт запускался на выполнение, перенося денежные средства согласно заданным правилам. В мае 2016 года таким способом удалось собрать 150 млн долл. — это была самая крупная в истории кампания народного финансирования.

Но уже к июню фонд развалился. На фоне массового ажиотажа вокруг The DAO раздавались и голоса скептиков, но истинную причину коллапса они не предсказали. Кто-то беспокоился, что на принятие продуманных решений об инвестициях нужно много времени, поэтому число голосов, поданных по каждому из них, будет слишком мало, чтобы в достаточной степени обосновать решение. Кроме того, еще не вложенные средства можно было легко отозвать, поэтому высказывались опасения по поводу того, что 150 млн долл. быстро исчезнут. Другие задумывались, как мировая финансовая система воспримет компанию, не зарегистрированную ни в одном государстве и не имеющую сотрудников.

Но в итоге проблема оказалась проще: злоумышленники просто воспользовались ошибкой в коде, причем потенциальная незащищенность системы не была секретом и об уязвимости Ethereum знали многие. Как следствие, из фонда исчезли 55 млн долл. в результате атаки многократного воспроизведения транзакции. Правда, взломщики перевели деньги в «дочернюю» систему на базе кода Ethereum, где они находились достаточно долго, для того чтобы программисты успели разработать и реализовать hard fork — новую версию системы, сделавшую недействительными все предыдущие транзакции и требующую установки блокчейна на все узлы p2p-сети. Это позволило вернуть деньги инвесторам, которые незамедлительно изъяли их из системы.

Но насколько этичным был метод возвращения денег? Ведь The DAO базировался на умных контрактах, то есть на коде, и по определению такой контракт отменить нельзя, а доверять системе не требуется. Однако при потерях, вызванных использованием кода умного контракта в первоначальном виде, его все же пришлось переписать. Hard fork разветвляет блокчейн, меняя правила подтверждения действительности блоков. После такой перемены цепочка делится на две, несовместимые друг с другом: одна из них работает по новым правилам, а другая — по старым. Сторонники двух ветвей, по-разному кодирующих размещения активов, к согласию не пришли, а в сообществе Ethereum многие решили, что разветвление подрывает саму идеологию умных контрактов, и продолжили придерживаться старой ветви, которой дали название Classic Ethereum.

Проблема в том, что если код — это контракт, значит, что бы ни сделали хакеры, все будет в рамках контракта. То, что в любом коде есть ошибки и что разработчики Ethereum, разумеется, не собирались разрешать атаки повторного воспроизведения, значения не имеет — ведь именно Ethereum нарушила контракт, а не хакеры. Казалось удивительным, что The DAO, в котором была собрана примерно седьмая часть всех эфиркойнов, распался, ведь он был слишком крупным для этого, но реальность оказалась иной.

Правила есть правила, кроме случаев, когда они не работают. Как однажды сказал Майк Тайсон, «у всех есть план, пока им не дадут по зубам». Вот вам и доверие без доверия. Если код — это и есть контракт, значит, у хакера в теории даже есть возможность подать в суд, чтобы попытаться вернуть украденные деньги.

Человеческий фактор

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

Можно ли полностью исключить участие человека в контракте? Предположим, что, согласно умному контракту (скажем, страховому), должна автоматически совершаться выплата при наступлении определенного события — например, погодного катаклизма. Если метеоданные распределены по блокчейну, кто или что несет ответственность за их извлечение и проверку? Какая из копий контракта должна запускать соответствующие процессы? Когда в реальном мире что-то должно происходить под действием умного контракта, участие человека, хотя бы в качестве арбитра, неизбежно — наличия доверенной третьей стороны все-таки не избежать.

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

У контрактов есть социальная функция, именно поэтому они базируются на законодательстве. Они обеспечивают возможность взаимодействия, помогая налаживать обоснованное доверие в рамках экономической системы. Общество получает пользу от надежного обмена товарами и услугами. Трудно представить работоспособную денежную экономику без контрактов, где деньги представляют собой одну из форм обязательства. В отличие от участников соглашений, опирающихся на дружбу, родство и т. д., стороны контракта нередко вне его не имеют ничего общего. Поэтому функция выстраивания доверия является ключевым фактором социальной значимости контракта. Более того, она усиливается возможностью нарушения контракта, как бы парадоксально это ни звучало. Если, допустим, заключен контракт, по которому действие A1 выполняется исполнителем X, то невыполнение условий было бы грубым нарушением с моральной точки зрения. Но законодательно обусловленные средства правовой защиты обычно не носят карательную форму и не принуждают к выполнению A1. В большинстве юрисдикций все, на что может рассчитывать другая сторона контракта с точки зрения возмещения ущерба, — это сумма, соответствующая стоимости A1. Более того, по закону другая сторона должна сама принимать меры по сведению к минимуму ущерба, обусловленного отказом X от выполнения договора. Следствие — оптимизация социальной пользы, которую приносят ресурсы X. Если тот может лучше использовать свои ресурсы, делая что-то иное, чем A1, значит, для него это выгоднее даже с выплатой компенсации другой стороне. В теории права это называют «эффективным нарушением» контракта.

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

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

Есть некий баланс между текстом, который подписывают стороны (текстовой интерпретацией), и тем, чего каждая из них хочет от соглашения (интерпретацией намерений). В пользу каждой из интерпретаций могут приводиться аргументы, справедливость которых рассматривает суд. Это не ошибка, как могли бы решить технари, это свойство контрактов. Что касается умного контракта, то его нельзя отменить (кроме как с помощью hard fork, что по очевидным причинам в общем случае неприменимо), если стороны не поняли требований, реализованных в коде, если сам код написан с ошибками или если какую-то из сторон обманным путем заставили взять на себя несправедливое обязательство.

***

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

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

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

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

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

Литература

  1. E. Morozov. To Save Everything, Click Here: Technology, Solutionism, and the Urge to Fix Problems That Don’t Exist. — Perseus, 2013.
  2. N. Szabo. Formalizing and Securing Relationships on Public Networks // First Monday. — 1997. — Vol. 2. — N 9. URL: http://frstmonday.org/ojs/index.php/fm/article/view/548 (дата обращения: 18.05.2017).
  3. V. Buterin. DAOs, DACs, DAs and More: An Incomplete Terminology Guide. Ethereum Blog, 6 May 2014. URL: https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-morean-incomplete-terminology-guide (дата обращения: 18.05.2017).

Кирон О'Хара (kmo@ecs.soton.ac.uk) — научный сотрудник, Университет Саутгемптона (Великобритания).

Kieron O’Hara, Smart Contracts — Dumb Idea. IEEE Software, March/April 2017, IEEE Internet Computing. All rights reserved. Reprinted with permission.