imageBlockchain технологии в данный момент являются слишком раздутыми. О нем пишут и говорят все: от конференций Sibos и Money20/20 до популярных материалов в изданиях The Economist и Euromoney – кажется, что каждый стремится ухватить свою долю в золотой блокчейн-лихорадке.

Как определить, что у вас реальный случай применения технологии блокчейн? Мы в Web-payment.ru много пишем о технологии распределенного реестра, и по роду деятельности нашего Digital агентства, ориентированного на финтех компании, замечаем, что поднятый вопрос очень актуальный для многих игроков рынка. Эта статья, опубликованная в блоге открытой платформы для создания своих блокчейнов MultiChain, призвана помочь разобраться в этом.


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

А что не так с теми, у кого действительно есть идея проекта? Очень часто проект может быть замечательно реализован при помощи обычной реляционной базы данных. Это такие железные чудища, как Oracle и SQL Server, а для менее предубежденных – MySQL и Postgres. Так что позвольте начать, расставив все точки над «i»:

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

Почему? Потому что такие продукты, как Oracle и MySQL проверены десятилетиями разработки. Они были установлены на миллионах серверов, обрабатывающих триллионы запросов. Их код был наиболее тщательно тестирован, оптимизирован и отлажен в сравнении с другими на планете Земля. Они, не напрягаясь, обрабатывают тысячи транзакций в секунду.

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

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

1. База данных


Вот первое правило. Блокчейн – это технология для баз данных общего пользования. Поэтому вам стоит начать с понимания того, зачем вы используете базу данных. Здесь я имею ввиду структурированное хранилище информации. Это может быль традиционная реляционная база данных с одной или более электронными таблицами. Или это могут быть более трендовые базы данных NoSQL, которые работают больше как системы файлов или словари. (В любом случае, в теории базы данных NoSQL являются подмножеством реляционных баз данных.)

Регистр для финансовых активов обычно может быть выражен в виде таблицы базы данных, в которой каждая строка представляет один вид активов, принадлежащих одной конкретной сущности. Каждая строка содержит три колонки, содержащие: (а) идентификатор владельца, например, номер счета; (б) идентификатор типа активов, например, «USD» или «AAPL»; (в) количество единиц актива на счету конкретного владельца.

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

2. Множество авторов


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

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

3. Отсутствие доверия


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

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

Что именно я имею в виду говоря об отсутствии доверия? Я говорю о том, что один пользователь не желает, чтобы другой пользователь изменял строки в базе данных, которые «принадлежат» ему самому. Точно так же, когда речь идет о чтении содержимого базы данных, пользователь не будет принимать на веру «правду» другого пользователем, потому что каждый из них имеет различные экономические или политические мотивации.

4. Транзакции без посредников


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

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

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

5. Взаимодействие транзакций


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

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

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

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

6. Установка правил


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

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

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

7. Выберите своих валидаторов


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

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

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

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

Блокчейн – это цепь блоков, в которой каждый блок содержит набор транзакций, подтверждаемых как группа. Но кто несет ответственность за выбор транзакций, которые идут в каждом блоке? Для «частных блокчейнов», которые подходят для корпораций, это закрытая группа валидаторов (майнеров), оставляющих цифровую подпись в создаваемых ими блоках. Этот белый список совмещается со схемой распределенного консенсуса для того, чтобы предотвратить получение контроля над блокчейном меньшинством валидаторов.

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

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

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

8. Обеспечивайте свои активы


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

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

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

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

Заключение


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

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

Поделиться с друзьями
-->

Комментарии (18)


  1. rumkin
    27.05.2016 14:58
    -1

    Кажется, вы и сами не понимаете что такое блокчейн. Блокчейн не система хранения данных, это система верификации текущего состояния и защиты данных от подмены. Сами данные могут храниться в чем угодно: SQL, NoSQL, в файлах на диске. Все что касается блокчейна это формула hash1=hashsum(hash0+state1). Т.е. по сути блокчейн – последовательность хэшсумм.
    Так что не стоит путать и приписывать распределенную структуру и поддержку транзакций, как неизменное условие существования BC.


    1. cigulev
      27.05.2016 15:22
      +1

      Кажется вы написали полную чепуху. Скажите, чем это блокчейн биткоина, который хранится у меня на диске D, и который содержит сведения обо всех транзакциях, баллансах в системе не попадает под определение БД?

      Тот факт, что в блокчейне каждый блок содержит хеш предыдущего является его неотъемлем свойством, но никак не в том контексте, что написали вы.


      1. rumkin
        27.05.2016 17:10
        +1

        Я прекрасно знаю что говорю.


        То что в биткойне блокчейн неразрывно связан с БД, вовсе не делает блокчейн базой данных. Для блокчейна необходимым условием является только последовательность хешей неразрывно связанных друг с другом. Все остальное: распределенная структура, транзакции, доверенные и недоверенные источники, голосование за блоки и прочее – это прикладная реализация.


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


        1. litvin
          27.05.2016 18:02
          +2

          Пытаюсь понять — а в чем профит от цепочки хэшей без данных? Это как индекс без данных (в терминах реляционных баз данных). Можно ссылку на проект где используется blockchain без данных? Правда интересно!


          1. rumkin
            27.05.2016 18:46

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


            Примеров реальных проектов пока не приведу – все что знаю со своим хранилищем.


            1. litvin
              27.05.2016 19:13
              +1

              Хранение метаданных (например — хэшей от данных) есть частный случай хранения данных.


              1. litvin
                27.05.2016 19:19

                Я имею в виду бессмысленность создание последовательного списка не содержащего никаких атрибутов. Что то должно сохраняться, примеры: timestamp, data, metadata.


                1. rumkin
                  27.05.2016 19:38

                  Если мы храним в виде hash1=hashsum(hash0+state1), то не важно что находится в state1. Ответственность за хранение данных состояния ложится на заинтересованное лицо и не входит в задачу блокчейна. Самое главное чтобы вы могли высчитать hash1 повторно имея hash0. Опубликовав цепочку в множество узлов сети, вы даете возможность удостоверить последовательность. Это квинтэссенция блокчейна.


                  1. litvin
                    27.05.2016 19:47

                    Я согласен с «hash1=hashsum(hash0+state1)». Но state1 и есть данные!
                    А высчитать hash1 имея (только) hash0 никак не получиться (без state1). Как то так.


                    1. rumkin
                      27.05.2016 20:12

                      Ну это в том случае, если вы хотите предоставить возможность проверить хэш сумму блока. Если взять хэш от данных state1=hashsum(data) и поместить в блокчейн, тогда любой участник сможет высчитать все суммы и последовательно проверить всю цепочку. А сама цепочка будет выглядеть так:


                      hash2 state2 # state2=sum(data2),hash2=sum(state2 + hash1)
                      hash1 state1 # state1=sum(data1),hash1=sum(state1 + hash0)
                      hash0 state0 # state0=sum(data0),hash2=sum(state0 + initialhash)
                      initialhash

                      Но это уже частный случай.


                      1. litvin
                        27.05.2016 20:36

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


                        1. rumkin
                          30.05.2016 14:07

                          Для блокчейна с несколькими участниками – да метаданные неоходимы, для блокчейна с одним участником – нет.
                          Я свой комментарий написал к тому, что путать систему хранения и систему верификации данных ни к чему. А хранить данные в блокчейне вовсе не необходимость. И для начала следовало бы разобраться с понятиями. А уже потом приводить тезисы и давать советы. Это все равно что рассуждать о целесообразности приобретения автомобиля, взяв за пример болид F1.


    1. accipiter
      28.05.2016 03:31
      +2

      То, что Вы написали очень похоже на Git.


      1. rumkin
        31.05.2016 14:51

        Удачное сравнение


  1. litvin
    27.05.2016 17:55

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


    1. litvin
      27.05.2016 18:07

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


    1. jehy
      28.05.2016 14:43

      При доверии узлов теряется не столько преимущество, сколько смысл использования технологии. О чём и писалось в статье.


    1. xoralex
      30.05.2016 10:54

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