Биллинг на блокчейн – ServiceNow такого еще не умел

В нашем корпоративном блоге мы описали, как решили перейти от биллнговой системы на Excel и разработали собственное решение на базе платформы ServiceNow. Дальнейшее развитие проекта привело к использованию технологии блокчейн, об этом мы решили рассказать читателям Компьютерры.

Зачем блокчейн в биллинге?

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

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

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

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

Давайте разберемся, что такое блокчейн

Но для начала уточним, что блокчейн – это не биткоин. Биткоин – это система для обмена ценностями на основе технологии блокчейн (одноразовая электронная система наличных денег).

Итак, по данным Википедии: 

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

Блокчейн – это способ безопасного хранения данных, так как каждый новый элемент данных полагается на своего предшественника для проверки самого себя.

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

{

  «key»: «value»,

  «key»: «value»,

  «key»: «value»,

  «key»: «value»,

 «key»: «value»

}

JSON выбран, потому что с ним легче работать и его можно рассматривать как строку полезной нагрузки (payload) для блока в блокчейне.

Далее определимся, какие нужны данные для каждого блока в цепочке.

Далее определимся, какие нужны данные для каждого блока в цепочке.

  • **Index** (Индекс) – обозначает положение блока в блочной цепочке. Каждая новая цепочка начинается с Genesis-блока с индексом 0. Обычно он не содержит важной информации и является жестко запрограммированным, тогда как все остальные блоки создаются во время выполнения.
  • **Timestamp** (Временная метка) – записывается при создании блока. Это может быть важно, поскольку блокчейн может использоваться для хранения данных временных рядов.
  • **Hash** (Хеш) – является хеш-значением всего блока, после того как он прошел через хеширующий алгоритм, обычно это, как и в нашем случае, SHA256.
  • **Previous Has** (Предыдущий хеш) – это поле относится к хеш-значению, сохраненному в предыдущем блоке.
  • **Nonce** (число, которое может быть использовано один раз) – представляет собой поле, значение которого задано так, чтобы хеш блока содержал последовательность ведущих нулей. Используется для обозначения доказательства работы (сложности алгоритма), подробнее об этом поговорим немного позже.
  • **Data/Payload** (Данные / полезная нагрузка) – в нашем случае это запись биллинга в формате JSON, описанная выше.

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

цепь в блокчейне

На следующем рисунке подробнее показана схема, используемая в нашем биллинге.

хема, используемая в нашем биллинге

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

Реклама на Компьютерре

Дерево хешей

Поскольку данных для биллинга с каждым разом становится все больше, для вертикального хеширования используется дерево Меркла.

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

Дерево хешей

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

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

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

Lightning Network – это платежный протокол, который оперирует над блокчейнами (обычно используется биткоин). Он позволяет проводить моментальные транзакции между участвующими нодами и предлагается как решение проблемы масштабирования биткоина.

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

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

Итоги

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

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