Разветвления структуры данных блокчейна. Продолжение

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

Теперь предположим, например, что узел майнинга А находит решение по алгоритму доказательства выполнения работы РоУУ для блока-«треугольника», наращивающего цепочку блокчейна поверх родительского блока-«звезды». Почти одновременно узел майнинга Б, также наращивающий цепочку блокчейна поверх родительского блока-«звезды», находит решение для блока- «треугольник вершиной вниз», своего блока-кандидата. Теперь существуют два блока-кандидата: один мы обозначили как «треугольник» с узла А, другой — «треугольник вершиной вниз» с узла Б. Оба блока корректны, оба содержат правильное решение по алгоритму доказательства выполнения работы Ро\\Г, оба наращивают цепочку относительно одного родителя (блок-«звезда»). Вероятнее всего, оба блока содержат в основном одни и те же транзакции, возможно, с небольшими отличиями в порядке их расположения.

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

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

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

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

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

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