Книга: Основы блокчейна: вводный курс для начинающих в 25 небольших главах
Назад: Глава 17. Распространение хранилища данных в пиринговой системе. Когда компьютеры беседуют
Дальше: Глава 19. Выбор хронологии транзакций. Пусть компьютеры голосуют своими ногами

Глава 18

Методы проверки и добавления транзакций

Управление группой компьютеров с помощью кнута и пряника

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

Метафора

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

1. Все формы с ответами, требующие обработки, все решения и все обработанные (и помеченные соответствующим образом) формы с ответами в любое время доступны всем контрагентам, работающим по договору. Это обеспечивает программная система компании.

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

3. Если контрагент обнаруживает, что другой контрагент обработал и пометил форму с ответами неправильно, то контрагент, допустивший ошибку, возвращает полученную сумму, а контрагент, обнаруживший и исправивший ошибку, получает эту же сумму.

Последствия

Правила, введенные в описанном выше сценарии, приводят к нескольким заслуживающим внимания последствиям:

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

• благодаря правилу 1 все контрагенты имеют равные возможности для качественного выполнения работы и получения оплаты за нее;

• благодаря правилу 1 все контрагенты получают информацию, необходимую для проверки и корректировки работы своих коллег;

• благодаря правилу 2 каждый контрагент действительно заинтересован в том, чтобы выполнить работу как можно быстрее. Но при этом из-за спешки может пострадать качество работы;

• благодаря правилу 3 каждый контрагент заинтересован в добросовестном и качественном выполнении своей работы;

• благодаря правилу 3 каждый контрагент заинтересован в выполнении проверок и корректировок работы своих коллег.



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

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

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

Цель

Основная цель – позволить всем добавлять данные новой транзакции в хронологию транзакций с сохранением целостности.

Главная задача

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

Идея

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

Как это работает: структурные элементы системы

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

• правила проверки;

• поощрение;

• наказание;

• конкуренция;

• управление партнерами.



Правила проверки

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

• правила проверки для данных транзакций;

• правила проверки для заголовков блоков.



Правила проверки для данных транзакций

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



Правила проверки для заголовков блоков

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



Поощрение

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



Наказание

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



Конкуренция

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

• конкуренция по скорости;

• конкуренция по качеству.



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



Конкуренция по скорости

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



Конкуренция по качеству

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

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



Управление партнерами

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

Как это работает: общая схема

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

1) исследование нового блока, созданного и добавленного одним из партнеров;

2) упорная попытка стать следующим узлом, создающим новый блок, который обязательно будет исследоваться и оцениваться всеми прочими партнерами.



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

Как это работает: подробности

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

1. Новые данные транзакций и новые блоки передаются всем узлам в стиле протокола gossip.

2. Каждый узел собирает новые данные транзакций в почтовом ящике для приема сообщений и выбирает необходимые для обработки.

3. Каждый узел обрабатывает новые блоки немедленно с наивысшим приоритетом.

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

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

6. После того как узел завершает решение хэш-головоломки, он рассылает только что созданный блок всем прочим узлам.

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

8. Каждый узел добавляет корректные проверенные блоки в собственную копию структуры данных блокчейна.

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

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

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

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

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

Почему это работает

Обоснования функционирования правил из предыдущего раздела приведены ниже:

• благодаря правилу 1 все узлы получают в полном объеме информацию, необходимую для проверки и добавления данных транзакций;

• благодаря правилу 2 узлы обрабатывают полученные новые данные транзакций;

• благодаря правилу 3 блоки, созданные другими узлами, обрабатываются сразу же после прибытия их в почтовые ящики узлов;

• благодаря правилу 4 в структуру данных блокчейна добавляются только проверенные корректные данные транзакций;

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

• благодаря правилу 6 все узлы оповещаются о том, что некоторый узел решил хэш-головоломку для нового блока;

• благодаря правилам 6 и 3 все узлы получают новый созданный блок и узнают победителя состязания по решению хэш-головоломки;

• благодаря правилу 7 все узлы системы контролируют и проверяют новые созданные блоки и гарантируют, что принимаются только корректные блоки;

• благодаря правилу 8 все узлы добавляют новые блоки в собственную копию структуры данных блокчейна, следовательно, дополняют хронологию транзакций;

• благодаря правилу 9 совместно обслуживаемая хронология транзакций защищается от некорректных транзакций, таким образом обеспечивается ее целостность;

• благодаря правилу 10 данные транзакций не добавляются повторно;

• благодаря правилу 11 ни одна корректная транзакция не будет потеряна, даже если ранее обработанные блоки обрабатываются повторно;

• благодаря правилу 11 система получает возможность выполнять дополнительные ретроспективные проверки хронологии транзакций и исправлять сделанные ранее записи;

• благодаря правилу 12 узлы получают стимул для выполнения обработки транзакций и создания новых блоков как можно быстрее;

• благодаря правилу 12 все узлы получают стимул для оповещения прочих узлов о создании нового блока, потому что получение поощрения (вознаграждения) зависит от того, будут ли новые транзакции проверены и приняты всеми прочими узлами;

• благодаря правилу 13 поощряется корректная работа узлов, позволяющая избежать принятия любых некорректных данных транзакций или создания некорректных блоков;

• благодаря правилу 13 все узлы получают стимул для выполнения ретроспективных исследований и проверок блоков и транзакций.

Реакция на нечестное поведение

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

• добавление транзакций с попыткой выдать себя за другое лицо;

• подтверждение некорректных данных транзакций или блоков;

• перегрузка узла огромным объемом данных транзакций с целью вывода его из строя;

• отказ от обработки определенных данных транзакций;

• отказ от распространения информации.



Вот почти полный список средств противодействия всем перечисленным вариантам нечестного поведения:

• концепция защиты транзакций (идентификация, аутентификация и авторизация с помощью асимметричной криптографии и цифровых подписей), ограничивающая доступ к учетной записи владельца соответствующего закрытого ключа;

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

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

• алгоритм блокчейна.



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

Перспектива

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

Резюме

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

• Главная задача, решаемая алгоритмом блокчейна, – сохранение открытости системы для всех с одновременной гарантией того, что будут добавляться только корректные и авторизованные транзакции.

• Алгоритм блокчейна применяет метод «кнута и пряника» в сочетании с созданием конкуренции и самоуправления партнерами в системе.

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

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

• Алгоритм блокчейна основан на следующих принципах:

– правила проверки данных транзакций и заголовков блоков;

– поощрение создания корректных блоков;

– наказание за противодействие сохранению целостности системы;

– конкуренция между партнерами за получение вознаграждения на основе оценки скорости и качества обработки данных;

– самоуправление равных партнеров.

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

– исследование нового блока, созданного и добавленного одним из партнеров;

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

• Точное время рабочей фазы определяется по времени прибытия сообщений на отдельные узлы.

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

Назад: Глава 17. Распространение хранилища данных в пиринговой системе. Когда компьютеры беседуют
Дальше: Глава 19. Выбор хронологии транзакций. Пусть компьютеры голосуют своими ногами