Блокчейн обычно связывают с криптовалютой: для того чтобы заработать ее единицу, нужно предоставить свои компьютеры для расчета некоторой функции («обеспечить майнинг»), и чем больше вычислительных ресурсов будет отдано, тем лучше. В мире имеются огромные ЦОД, которые только и занимаются, по сути, бессмысленной работой по вычислению этих функций для получения заветных монет. Однако криптовалюта — это только одно из многих потенциальных применений блокчейна, замечательное свойство которого — распределенность — очень востребовано во многих областях. В любой бизнес-системе со многими участниками возникает проблема синхронизации информации между субъектами, и блокчейн позволяет ее решать — после подтверждения транзакции результат сразу становится доступным всем участникам сети.
В рамках проекта Hyperledger консорциума Linux Foundation создается реализация блокчейна, направленная на решение бизнес-задач, но, в отличие от Bitcoin или Ethereum, Hyperledger не использует вычисления для подтверждения транзакций. Это, во-первых, увеличивает пропускную способность системы (количество транзакций в единицу времени), а во-вторых, не требует больших вычислительных мощностей, что ведет к уменьшению потребляемой энергии и, соответственно, к экономии.
В основе работы Hyperledger лежат четыре основных принципа (рис. 1).
Рис. 1. Четыре принципа платформы Hyperledger |
Распределенность и копирование. Цепочка блоков транзакций становится доступна всем участникам сети путем создания копии для них. При этом соблюдаются права доступа к транзакциям, а участники сети могут работать только с предназначенными им транзакциями. Все данные, реплицируемые на каждого участника сети, можно логически разделить на две большие части:
- цепочку блоков транзакций (blockchain);
- базу состояний (world state).
В цепочке блоков хранится только информация о транзакциях. Сами же данные, которые этими транзакциями создаются или изменяются, хранятся отдельно в базе состояний, по сути представляющей собой набор пар «ключ-значение». Логика, по которой эти ключи и значения создаются или изменяются, заключена в умных контрактах.
Умный контракт. Так называют программу, которая загружена в блокчейн и вызывается по своему постоянному адресу в момент выполнения транзакций. Именно в умных контрактах заключена бизнес-логика выполнения транзакций — результатом вызова контракта является чтение или изменение данных в базе состояний. Каждый умный контракт имеет доступ только к тем данным, которые он сам создал, и при этом существует возможность вызывать один умный контракт из другого.
Конфиденциальность. Все транзакции, записанные в блокчейн, не привязаны к его аккаунтам (аккаунт — аналог кошелька или банковского счета), а подписаны сертификатами пользователей, выполняющих эти транзакции, что позволяет обеспечить конфиденциальность.
Валидация, или консенсус. В Hyperledger транзакция считается подтвержденной, если ее одобрили по крайней мере 60% проверяющих узлов. Часть Hyperledger, в которой происходит подтверждение транзакций (consensus network), — это подсеть из нескольких проверяющих узлов (validating node), ответственных за достижение консенсуса при выполнении транзакций и обеспечение правильной синхронизации данных между участниками сети. В коробочном варианте Hyperledger для достижения консенсуса применяется алгоритм PBFT (Practical Byzantine fault tolerance), основанный на задаче о византийских генералах, хотя существует возможность подключения любого алгоритма. Византийская армия, состоящая из нескольких частей, окружила город. Каждой из частей армии командует генерал, и всем им нужно принять коллективное решение; часть генералов голосуют за атаку, остальные — за отступление. При этом все понимают, что атака только частью сил захлебнется, поэтому все согласны принять мнение большинства. Однако принятие решения усложняется тем, что среди генералов могут быть предатели, вводящие всех остальных в заблуждение, чтобы в итоге было принято неверное решение.
В качестве «генералов» в Hyperledger выступают проверяющие узлы, которые участвуют в процессе подтверждения транзакций. Предположим, что в сеть поступают три запроса на проведение транзакций: 123, 456 и 789 (рис. 2).
Рис. 2. Регистрация новых транзакций в сети |
В процессе выполнения запросов все транзакции (например, размещение нового умного контракта в сети или вызов существующего) выполняются на всех проверяющих узлах. Для объективности все транзакции должны быть выполнены в одинаковом порядке, поэтому они сортируются проверяющим лидером (validating leader), а новый порядок транзакций рассылается всем узлам (рис. 3).
Рис. 3. Сортировка транзакций |
После выполнения транзакций проверяющие узлы обмениваются между собой информацией о результатах работы, эти данные сравниваются и принимается решение о подтверждении транзакции (рис. 4). При обмене информацией появляется возможность определить «предателя», который всем остальным участникам процесса сообщил разные данные, — этот вредоносный узел помещается в карантин и в дальнейшем не учитывается.
Рис. 4. Сохранение результатов транзакций |
Помимо вредоносных узлов, в сети могут быть узлы ошибочные, на которых был получен неверный результат транзакций. Результаты, полученные с таких узлов, корректируются, затем производится синхронизация данных среди всех участников сети блокчейна. Как показано на рис. 5, результат DEF оказался ошибочным и корректируется, а результат JKL был получен в результате действия злоумышленников. Узел, на котором получен этот результат, считается вредоносным.
Рис. 5. Синхронизация участников сети |
Проект Hyperledger пока находится в разработке — выход первой рабочей версии запланирован на начало 2017 года, однако уже сегодня можно развернуть сеть Hyperledger локально либо создать облачное блокчейн-приложение в сервисе IBM Bluemix [1].
Стартовый план в Bluemix предполагает создание сети из четырех проверяющих узлов (Validating Peers) и сервиса авторизации (Membership Services). Интерфейс сервиса предлагает пользователю несколько разделов (Network, Blockchain, Demo Chaincode, APIs, Logs, Status, Support), в которых можно следить за состоянием сети и управлять работой сервиса. Если необходимо разворачивать и настраивать работу блокчейн-сети локально, то это можно сделать на сети из нескольких машин, настроив каждую из них как узел блокчейна и организовав их совместную работу. Другой способ — ограничиться вычислительными мощностями одной машины и с помощью контейнеров запустить необходимое количество элементов сети. Для ознакомительных целей этот вариант вполне годится (на странице hyperledger-fabric.readthedocs.io/en/latest/Setup/Chaincode-setup описана процедура локального запуска Hyperledger, приведены примеры настроечных файлов, а также способы размещения и вызова умных контрактов в Hyperledger).
Основной язык, на котором пишутся умные контракты в Hyperledger, — это Go, имеющий достаточно развитые интерфейсы. Чтобы умный контракт мог «жить» в блокчейне, его нужно вызывать с помощью функций Init, Query и Invoke. Функция Init вызывается при размещении контракта в блокчейне, и ее основной задачей является инициализация стартовых данных контракта. Функции Invoke и Query служат для изменения и чтения данных чейнкодом (на странице приведен пример простого чейнкода). При инициализации примера в базе состояний создаются два параметра, которые инициализируются стартовыми значениями. Функция Query возвращает значение параметра, имя которого передается через аргументы. Функция Invoke либо удаляет заданный параметр, либо изменяет значения обоих на заданную величину — увеличивая первый параметр и уменьшая второй.
При использовании платформы Hyperledger бизнес получает сокращение времени выполняемых транзакций, уменьшение затрат за счет исключения платы посредникам и устранения накладных расходов. Кроме того, повышается надежность проведения операций, поскольку исключаются фальсификация результатов выполнения транзакций и мошенничество, что способствует повышению доверия благодаря коллективному одобрению транзакций и распределенному хранению.
***
Открытый и независимый от конкретного производителя проект Hyperledger направлен на создание блокчейн-платформы для бизнеса с использованием таких присущих блокчейну особенностей, как механизм консенсуса и гибкий инструментарий по созданию бизнес-логики на основе смарт-контрактов [2]. Уже сегодня на базе данной платформы можно выполнять пилотные коммерческие проекты.
Литература
- Игорь Кулиничев. Облако для Интернета вещей // Открытые системы.СУБД. — 2015. — № 2. — С. 30–31. URL: http://www.osp.ru/os/2015/02/13046277 (дата обращения: 18.12.2016).
- Making Blockchain Real for Business. — Explained. — 2016. — URL: https://www-01.ibm.com/events/wwe/grp/grp308.nsf/vLookupPDFs/Blockchain Explained/$file/Blockchain Explained.pdf (дата обращения: 18.12.2016).
Александр Земцов (alexander.zemtsov@ru.ibm.com) — инженер-программист, IBM (Москва).