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