Реализация диалога с блокчейн (Blockchain) с помощью запросов HTTP сервера

М.В. Смирнов

Реализация диалога с блокчейн (Blockchain) с помощью запросов HTTP сервера
Основные положения связанные с технологией блокчейн (Blockchain), революционные ожидания и перспективы использования, широко представлены в Интернет, например [1-4]. Даже Сбербанк анонсировал блокчейн-лабораторию для исследования новых технологий на основе блокчейн. Вместе с тем, вопросы программной реализации на практическом уровне слабо затронуты [5,6]. Для реализации блокчейн можно использовать любой язык программирования с функциями криптографии - JavaScript, Perl, Python, C#, PHP. В блокчейн применяется достаточно простая криптография (md5, SHA1, SHA256) [7,8].

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

На базе блокчейн может быть реализованы такие распределенные данные как складская логистика, имущественные права, системы голосования, тендеры и аукционы, интеллектуальная собственность, кадастровый учет итп. Транспортным протоколом блокчейн могут послужить правила файлового обмена в пиринговых сетях (P2P), которые обеспечивают непосредственное взаимодействие между компьютерами при передаче данных (файлов) без участия посредников. Примером могут послужить файлообменники, торренты, мессенджеры, FTP протокол. Вместе с тем, клиент-серверная архитектура HTTP вполне может использоваться для организации "диалога" с блокчейн. Выполнение диалога с блокчейн реализуем на примере списка операций по карте VISA SBERBANK-ONL@IN.

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

Пример выписки операций VISA CLASSIC:

01НОЯ16 900788 GIBDD.A-3              RUR          289.00      289.00
                        A-3.RU        RU                                          
02НОЯ16 900794 SBERBANK ONL@IN VKLAD- RUR         2400.00     2400.00CR
                        KARTA                                                        
02НОЯ16 900790 STOLOVAJA TARELKA      RUR          230.00      230.00
                        SANKT-PETERBU RU                                          
02НОЯ16 900787 AZS 004                RUR         1294.80     1294.80
                        SPETERSBURG   RU                                          
03НОЯ16 900800 SBERBANK ONL@IN VKLAD- RUR        33000.00    33000.00CR
                     KARTA                                                        
03НОЯ16 900796 STOLOVAJA TARELKA      RUR          185.00      185.00
                        SANKT-PETERBU RU                                          
03НОЯ16 900802 SBOL                   RUR        30000.00    30000.00
                        MOSCOW        RU                                          
04НОЯ16 900803 OKEY                   RUR         1171.00     1171.00
                        SANKT-PETERBURRU                                          
04НОЯ16 900799 STOLOVAJA TARELKA      RUR          185.00      185.00
                        SANKT-PETERBU RU                                          
04НОЯ16 900805 OKEY                   RUR          221.50      221.50
                        SANKT-PETERBURRU                                          
08НОЯ16 900813 SBERBANK ONL@IN VKLAD- RUR         3700.00     3700.00CR
                     KARTA                                                        
08НОЯ16 900811 STOLOVAJA TARELKA      RUR          190.00      190.00
                        SANKT-PETERBU RU                                          
08НОЯ16 900812 OKEY                   RUR          572.50      572.50
                        SANKT-PETERBURRU                                          
08НОЯ16 900814 SBERBANK ONL@IN PLATEZ RUR         3680.14     3680.14
                     H                                                            
09НОЯ16 900820 DIXY-78903             RUR          501.10      501.10
                        SANKT-PETERBURRU                                          
09НОЯ16 900816 STOLOVAJA TARELKA      RUR          190.00      190.00
                        SANKT-PETERBU RU                                          
09НОЯ16 900829 SBERBANK ONL@IN VKLAD- RUR         3000.00     3000.00CR
                     KARTA                                                        
09НОЯ16 900821 OKEY                   RUR          303.50      303.50
                        SANKT-PETERBURRU                                         
   Существует множество способов создания блокчейна. Обычно, блокчейн формируют как массив переменных типа
$Block={index, 
previous.hash, timestamp,
data, current.hash},
для перебора которого используется простой цикл [9]. В ряде случаев перебор данных в цикле не желателен. Более удобный вариант - ассоциативный массив
$Block[key] = value
, устанавливающий соответствие между значением и ключом. Его можно использовать как обычный массив, список (вектор), хэш-таблицу с ассоциативным доступом по ключу, словарь, очередь, реестр:

$Block[index,sender] = {
                index,
                previous.hash,
                amount,
                current.hash,
                timestamp};


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

Рассматриваемая, весьма упрощенная, модель диалога с блокчейн реализована на основе обычного HTTP протокола и имеет три ступени:

И так приступим:




Источники:
[1] Что такое блокчейн, и как это работает - https://revolverlab.com/ how-its-works-
blockchain-6d0355c43bfc
[2] Перспективы применения блокчейн в музыкальной индустрии - https://vc.ru/19431-music
-blockchain
[3] Что такое блокчейн простыми словами - https://prostocoin.com/
blog/blockchain-guide
[4] Основы блокчейн. Интеллекция Александра Иванова, Waves Platform - https://www.youtube.com/
watch?v=zPiiTFvdx4E
[5] Блокчейн за 200 строк кода: пример простой реализации на JavaScript - https://tproger.ru/translations
/blockchain-explained/
[6] Изучаем блокчейн на практике - https://habrahabr.ru/company
/everydaytools/blog/339280/
[7] Криптография в блокчейнах: о хеш-функциях, ключах и цифровых подписях -
  https://habrahabr.ru/company/
bitfury/blog/327272/
[8] Source code for webtoolkit.sha256.js - http://www.webtoolkit.info
/javascript_sha256.html#.
WlxiJq5l-XI
[9] Как создать своими руками рабочий прототип блокчейн - https://cripto24.ru/blokchejn
-tehnologii/kak-sdelat-
blokchejn-svoimi-rukami


Статьи:
1. Программное обеспечение. Цифровая голография. Скрытые водяные знаки. Распознавание образов.
2. Инвариантная оценка сходства двух строковых переменных методом "Трех-Множеств"
3. On-line вычисление коэффициента Джаккарда (javascript)
4. Регистрация и восстановление цифровых голограмм в традиционных носителях информации на бумажной и пластиковой основе
5. Распределение вероятностей частоты поисковых запросов