Иное применение блокчейнов: Смарт-контракты

    В одном из наших первых постов мы рассказывали, что блокчейн представляет собой децентрализованную систему, работа которой поддерживается множеством компьютеров, объединенных в сеть. Блокчейн, хотя и обладает определенного рода недостатками (ограниченной скоростью работы, по сравнению с централизованными базами данных, а также высоким энергопотреблением — в случае блокчейнов на основе доказательства работы), все равно остается безопасным и надежным решением. Поэтому к этой технологии присматриваются разного рода финансовые институты, банки и даже гиганты IT-индустрии (IBM, Cisco и Intel).

    В 1994 году криптограф Ник Сабо (Nick Szabo) предложил использовать компьютеры и криптографию для автоматического выполнения и аудита контрактов. Позднее это привело к появлению так называемых умных контрактов, или просто смарт-контрактов. Такие контракты оформляются в виде кода, а затем сохраняются в системе, где за их выполнением следит сеть компьютеров, управляющая блокчейном. О них мы и поговорим в нашем сегодняшнем материале.

    / изображение Jason Benjamin PD

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


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

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

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

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

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


    Выполнение смарт-контракта

    Ethereum — пожалуй, наиболее популярный блокчейн для написания сложных смарт-контрактов. Вот пример кода, написанного для контракта на специально разработанном языке смарт-контрактов Solidity (язык достаточно легок для восприятия и похож на JavaScript, только со статической типизацией). Этот код реализует простейший токен, то есть полностью цифровой актив, который можно выпускать и переводить между кошельками Ethereum. В рамках смарт-контракта при каждом запросе на перевод токенов автоматически проверяется наличие необходимого их количества. Если все в порядке, то смарт-контракт изменяет баланс токена для отправителя и получателя.

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

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

    Программирование смарт-контрактов в той или иной степени возможно в подавляющем большинстве блокчейнов. При этом объектно-ориентированный подход Ethereum — далеко не единственный. Есть и другие — зачастую вдохновленные академическими исследованиями — языки программирования, которые куда лучше реализуют ключевые требования к смарт-контрактам. Например, некоторые блокчейны вроде Synereo используют исчисление процессов (подход, используемый в Erlang и Go), представляя смарт-контракты как процессы, взаимодействующие между собой через каналы сообщений.

    На биткойн-блокчейне смарт-контракты представлены условиями, при которых можно тратить биткойны. Как уже было отмечено, биткойн-блокчейн строится на транзакциях. Эти транзакции содержат один или несколько вводов и выводов. При этом каждый ввод транзакции является неизрасходованным выводом (UTXO — Unspent Transaction Output) одной из предыдущих транзакций, записанных в блокчейне.

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

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

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

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

    <Ключ> CHECKSIG

    где:
    • <Ключ> — инструкция добавить в стек байты, соответствующие открытому ключу;
    • CHECKSIG — инструкция, которая выталкивает из стека два последних элемента (подпись и открытый ключ) и проверяет подпись.

    Отпирающий сценарий (для запирающего сценария, представленного выше) состоит из одного элемента — цифровой подписи транзакции. Алгоритм выполнения сценариев выглядит следующим образом:

    // 1. Инициализация
    сценарий: <Подпись>
    стек: пусто
    // 2. Выполняется единственная инструкция отпирающего сценария
    сценарий: пусто
    стек: <Подпись>
    // 3. Начинается запирающий сценарий
    сценарий: <Ключ> CHECKSIG
    стек: <Подпись>
    // 4. Первая инструкция — добавить ключ в стек
    сценарий: CHECKSIG
    стек: <Подпись> <Ключ>
    // 5. Вторая инструкция — проверить подпись
    сценарий:
    стек: <успех>

    В биткойне реализуемы и более сложные смарт-контракты, например, контракт депонирования средств с возможностью возврата по таймауту:

    IF
    // Требует любые 2 из 3 подписей от Алисы, Боба или арбитра.
    2 <Ключ Алисы> <Ключ Боба> <Ключ арбитра> 3 CHECKMULTISIG
    ELSE
    // Проверяет, что со времени поступления средств на адрес депонирования
    // прошло 7 дней.
    // DROP — инструкция вытолкнуть из стека элемент; здесь она нужна
    // для обратной совместимости — CHECKSEQUENCEVERIFY распознается
    // не всеми версиями узлов биткойна
    <7 дней в секундах> CHECKSEQUENCEVERIFY DROP
    // Если предыдущая проверка успешна, то средства может забрать Алиса
    <Ключ Алисы> CHECKSIG
    ENDIF

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

    В случае успешного выполнения контракта Боб получит возможность забрать средства, подписав транзакцию вместе с Алисой. Если же возникнет спорная ситуация, может вмешаться арбитр и принять сторону Алисы или Боба, подписав транзакцию вместе с одним из них. Наконец, если с момента перевода средств на адрес прошло много времени (скажем, 7 дней, как в примере выше), Алиса может вернуть депонированные средства обратно, даже без одобрения арбитра или Боба.

    В терминах стековой машины биткойна, варианты отпирающего сценария могут быть такие:

    // Перевод средств по согласию Алисы и Боба.
    // Первый 0 необходим из-за бага в инструкции MULTISIG —
    // она берет из стека на один элемент больше чем нужно.
    // Последняя единица активирует ветку IF в запирающем сценарии.
    0 <Подпись Алисы> <Подпись Боба> 1

    // Арбитр согласился с Алисой
    0 <Подпись Алисы> <Подпись арбитра> 1

    // Арбитр согласился с Бобом
    0 <Подпись Бобом> <Подпись арбитра> 1

    // Возврат средств по тайм-ауту.
    // 0 активирует ветку ELSE в запирающем сценарии.
    // Этот сценарий не будет валидным, если тайм-аут еще не прошел.
    <Подпись Алисы> 0

    Rootstock — «саженец» в блокчейн-среде


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

    Поэтому сообщество задумалось о создании сети, которая брала бы лучшее от двух миров: надежность и защищенность от биткойна и удобство работы от Ethereum. Это привело к появлению блокчейн-решения Rootstock от RSK Labs, которая 22 мая получила инвестиции в размере 3,5 млн долларов. В развитие проекта вложились Энтони ди Иорио (Anthony Di Iorio), CEO криптовалютного кошелька Jaxx, а также несколько майнинговых фирм, в том числе Bitfury и Bitmain.

    В одном из интервью генеральный директор RKS Labs Диего Зальдивар (Diego Gutierrez Zaldivar) отметил, что целью проекта является создание блокчейна, который бы получил поддержку как биткойн-майнеров, так и разработчиков приложений для смарт-контрактов, сейчас работающих с Ethereum.

    По своей сути, Rootstock представляет собой децентрализованную Тьюринг-полную платформу для смарт-контрактов. Вот только вместо того, чтобы формировать всю систему с нуля, Rootstock использует экосистему биткойна, но с некоторыми улучшениями. На сегодняшний день платформа способна обрабатывать 400 транзакций за секунду, в то время как биткойн может обрабатывать лишь семь. В перспективе RSK планирует достигнуть значения в 2 000 TPS, используя протокол LTCP (Lumino Transaction Compression Protocol).

    Самое большое преимущество Rootstock над другими платформами, использующими собственные блокчейны, – это объединенный майнинг (merged mining) с биткойном, что поднимает ее безопасность до уровня старшей блокчейн-сети. Технология пока испытывается в тестовой сети, но в скором времени будет запущена в реальную жизнь. Учитывая, что RSK использует биткойн-блокчейн, который на сегодняшний день является самым безопасным блокчейном, смарт-контракты на RSK смогут превзойти Ethereum в некоторых вопросах защиты. Например, они предоставят большую защищенность против отката транзакций в блокчейне и «атаки 51%».

    Будущее и применение умных контрактов


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

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

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

    Стоит отметить и другие индустрии, такие как кредитование и бухгалтерский учет. Здесь смарт-контракты будут использоваться для оценки рисков и проведения аудита в реальном времени. На сайте Blockchain Technologies говорится, что умные контракты будут представлять собой бумажно-электронный гибрид, когда они подтверждаются блокчейном, а затем распечатываются в виде бумажной копии.

    При этом многие участники рынка убеждены, что в будущем компании смогут полностью перейти от составления традиционных контрактов к их цифровому воплощению и даже реализации контрактов при поддержке искусственного интеллекта.
    • +14
    • 21,8k
    • 3
    Bitfury Group 64,76
    Cофтверные и хардверные решения на Blockchain
    Поделиться публикацией
    Комментарии 3
    • 0
      Я сперва думал, что умные контракты (или если пошалить умноакты) это что-то типа: у условного трактора есть номер, и умный контракт на покупку этого трактора начинает действовать, только если в системе контрактов появится информация о его доставке или выполнении иного условия с помощью сторонних средств (например растаможка трактора и его доставка транспортной компанией) и только тогда происходит перевод средств на счет продавца без участия покупателя. Своего рода заморозка средств при этом средства эти имеют отличительную метку не только покупки именного этого конкретного трактора и только на таких условиях, но и метки тех кто подписывал и заключал договор.
      • –1
        Одно из главных преимуществ использования блокчейна как транспорта для смарт-контрактов — отсутствие необходимости привлекать третью сторону в качестве гаранта соблюдения условий.

        … и дальше внезапно появляется какой-то арбитр.

        • 0
          В посте же сказано, что наличие третьей стороны необязательно, но для реализации сложных смарт контрактов можно привлекать арбитра

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое