С другой стороны, он принимает, что при определенных условиях, хотя и в редких случаях, протокол может зависнуть и не сможет добиться какого-либо результата.
Но есть хорошие новости: эти результаты невозможности были доказаны в очень конкретных моделях.
Они были предназначены для изучения распределенных баз данных, и эти модели не очень хорошо описывают биткойн, так как биткойн нарушает многие предположения, на которых эти модели были построены.
Как ни странно, при нынешнем состоянии исследований, консенсус в Биткойне лучше работает на практике, чем в теории.
То есть мы наблюдаем за консенсусом, но не разработали теорию, чтобы полностью объяснить, почему он работает.
Но разработка такой теории важна, поскольку она может помочь нам предсказать непредвиденные атаки и проблемы, и только когда у нас будет сильное теоретическое понимание того, как работает Биткойн, мы будем иметь сильные гарантии безопасности и стабильности Bitcoin.
Какие предположения в традиционных моделях консенсуса, которые Биткойн нарушает?
Во-первых, в нем вводится идея стимулов, которая является новой для распределенного консенсусного протокола.
Это возможно только в биткойне, потому что это валюта, и поэтому он имеет естественный механизм, стимулирующий участников действовать честно.
Таким образом, биткойн не совсем решает проблему распределенного консенсуса в общем смысле, но решает ее в конкретном контексте валютной системы.
Во-вторых, биткойн включает в себя понятие случайности.
Как мы увидим далее, консенсусный алгоритм Биткойна в значительной степени зависит от рандомизации.
Кроме того, Биткойн устраняет понятие конкретной отправной точки и конечной точки для достижения консенсуса.
Вместо этого, консенсус происходит в течение длительного периода времени, около часа в реальной системе.
Но даже в конце этого периода времени узлы не могут быть уверены, что какая-либо конкретная транзакция или блок были включены в книгу.
Вместо этого, со временем, вероятность того, что прогноз будет соответствовать окончательному консенсусу, увеличивается, и вероятность расхождения консенсуса экспоненциально снижается.
Эти различия в модели являются ключевыми для способности Bitcoin обходить традиционные результаты невозможности достижения консенсуса для распределенных консенсусных протоколов.
Консенсус без идентификации: использование цепочки блоков
Далее мы рассмотрим технические детали алгоритма согласования биткойнов.
Напомним, что узлы биткойнов не имеют постоянных долгосрочных идентификаторов.
Это еще одно отличие от традиционных распределенных консенсусных алгоритмов.
Одной из причин этого недостатка идентификации является то, что в одноранговой системе нет центральной власти для назначения идентификаторов участникам и проверки того, что они не создают новые узлы по своему усмотрению.
Технический термин для этого – атака Сибиллы.
Сибиллы – это копии узлов, которые злонамеренный противник может создать, чтобы выглядеть как много разных участников, когда на самом деле все эти псевдо-участники контролируются одним и тем же противником.
Другая причина заключается в том, что псевдонимность по своей сути является целью Биткойна.
Напомню, что псевдонимность – это когда все транзакции между всеми адресами (кошельками) общедоступны, но нет данных о владельцах адресов. Однако личность владельца может быть установлена, если становится известна необходимая дополнительная информация.
Даже если бы было возможно или было легко установить идентификаторы для всех узлов или всех участников, мы бы не захотели этого делать.
Хотя Bitcoin не дает серьезных гарантий анонимности в том, что различные транзакции, которые вы делаете, часто могут быть связаны друг с другом, у него есть свойство, что никто не должен раскрывать свою реальную личность, такую как свое имя или IP-адрес, для участия в системе биткойн.
И это важное свойство и центральная особенность дизайна Биткойна.
Если бы узлы имели идентификаторы, дизайн был бы проще.
Для начала идентификаторы позволяли бы нам вводить в протокол инструкции формы: «Теперь узел с таким-то числовым идентификатором должен сделать такой-то шаг».
Без идентификаторов набор возможных инструкций более ограничен.
Но гораздо более серьезная причина для того, чтобы узлы имели идентификаторы – это для обеспечения безопасности.
Если бы узлы были идентифицированы и не нельзя было бы тривиально создавать новые идентификаторы узлов, то мы могли бы сделать предположения о числе узлов, которые являются вредоносными, и мы могли бы извлечь из этого какие-то свойства для обеспечения безопасности.
По обоим этим причинам отсутствие идентичности создает трудности для консенсусного протокола в Биткойне.
Мы можем компенсировать отсутствие идентичности, сделав не строгую идентификацию, а более слабую.
Предположим, что есть возможность выбрать случайный узел в системе.
Хорошей мотивирующей аналогией для этого является лотерея.
То, что мы можем сделать в этом контексте, – это выдавать токены или билеты или что-то вроде этого.
Это позволяет нам позже выбрать случайный идентификатор токена и вызвать владельца этого идентификатора.
Поэтому на данный момент сделаем предположение, что таким образом можно выбрать случайный узел из сети биткойнов.
Далее предположим, что этот алгоритм генерации и распределения токенов достаточно умный, так что, если противник попытается создать множество узлов Сибиллы, все эти Сибиллы вместе получат только один токен.
Это означает, что противник не сможет увеличивать свою силу, создавая новые узлы.
Позже мы удалим эти предположения и подробно рассмотрим, как реализуются свойства, эквивалентные этим, в биткойне.
Это предположение о случайном выборе узла делает возможным то, что называется неявным консенсусом.
В нашем протоколе есть множество раундов, каждый из которых соответствует блоку в цепочке блоков.
В каждом раунде каким-то образом выбирается случайный узел, и этот узел получает возможность предложить следующий блок в цепочке.
Нет никакого консенсусного алгоритма для выбора блока и нет никакого голосования.
Выбранный узел в одностороннем порядке предлагает, какой будет следующий блок в цепочке блоков.
Но что, если этот узел злонамеренный?