- PVSM.RU - https://www.pvsm.ru -

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

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

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

Иное применение блокчейнов: Смарт-контракты - 1 [7]/ изображение Jason Benjamin [8] PD [9]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<Ключ> CHECKSIG

где:

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

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

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

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

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, хакеры украли [24] порядка 64 млн долларов.

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

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

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

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

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

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

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

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

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

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

Автор: alinatestova

Источник [32]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/platezhny-e-sistemy/257231

Ссылки в тексте:

[1] рассказывали: https://habrahabr.ru/company/bitfury/blog/326340/

[2] недостатками: https://blockchaintechnologycom.wordpress.com/2016/11/21/advantages-disadvantages/

[3] IBM: https://github.com/hyperledger/fabric

[4] Cisco: https://www.wired.com/2015/12/big-tech-joins-big-banks-to-create-alternative-to-bitcoins-blockchain/

[5] Intel: http://www.coindesk.com/intel-testing-blockchain-built-fantasy-sports-game/

[6] предложил: http://firstmonday.org/ojs/index.php/fm/article/view/548/469

[7] Image: https://habrahabr.ru/company/bitfury/blog/330316/

[8] Jason Benjamin: https://www.flickr.com/photos/jason_benjamin/12795733984/

[9] PD: https://creativecommons.org/publicdomain/zero/1.0/

[10] позволяют: https://blockgeeks.com/guides/smart-contracts/

[11] Особенности консенсуса: https://habrahabr.ru/company/bitfury/blog/327468/

[12] пример кода: https://www.ethereum.org/token

[13] агенты: https://en.wikipedia.org/wiki/Agent-oriented_programming

[14] Synereo: http://synereo.com/

[15] исчисление процессов: https://en.wikipedia.org/wiki/Process_calculus

[16] Erlang: http://www.erlang.org/

[17] Go: https://tour.golang.org/concurrency/1

[18] транзакциях: https://en.bitcoin.it/wiki/Transaction

[19] употреблены: https://bitcoin.org/en/developer-guide#block-chain-overview

[20] для стековой машины: https://en.bitcoin.it/wiki/Script

[21] Forth: https://en.wikipedia.org/wiki/Forth_(programming_language)

[22] неполным по Тьюрингу: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%BF%D0%BE_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D1%83

[23] депонирования: http://dic.academic.ru/dic.nsf/fin_enc/12882

[24] украли: http://www.cbc.ca/news/technology/ethereum-hack-blockchain-fork-bitcoin-1.3719009

[25] вложились: http://www.coindesk.com/opening-testnet-to-public-rsk-announces-3-5m-funding/

[26] отметил: http://www.coindesk.com/smart-contract-1-million-bitcoin-rootstock/

[27] LTCP: https://uploads.strikinglycdn.com/files/9dcb08c5-f5a9-430e-b7ba-6c35550a4e67/LuminoTransactionCompressionProtocolLTCP.pdf

[28] использующими: https://medium.com/@CryptoIQ.ca/rootstock-smart-contracts-on-the-bitcoin-blockchain-e52b065421a8

[29] потенциальных: https://medium.com/@DomSchiener/voting-on-the-ethereum-blockchain-an-analysis-67701bd1c9f5

[30] представлять: http://www.blockchaintechnologies.com/blockchain-smart-contracts

[31] реализации: http://technode.com/2016/11/14/the-future-of-blockchain-technology-smart-contracts/

[32] Источник: https://habrahabr.ru/post/330316/