Nakamoto Consensus — название способа, которым Bitcoin формирует общую допустимую историю транзакций без центрального арбитра. Full Node, компьютер с программой, самостоятельно проверяющей правила, сначала отбрасывает недопустимые блоки. Затем среди допустимых ветвей выбирает ту, где накоплено больше всего работы. Новые подтверждения при определённых предпосылках безопасности повышают уверенность в платеже, но не делают его мгновенно необратимым.
Анна платит Петру. Однако она могла бы подписать ещё одну транзакцию, расходующую те же средства в пользу Евы. Подписать здесь означает с помощью закрытого ключа, секретного числового значения, создать проверяемое доказательство разрешения на платёж. Другие могут проверить подпись, не зная этого секрета. Обе подписи могут быть подлинными, но оба платежа не могут войти в одну допустимую историю. Кроме того, Пётр и Ева могут получить сообщения в разном порядке. Поэтому системе Bitcoin нужна не только проверка подписей, но и способ согласовать порядок и предотвратить двойную трату. Nakamoto Consensus объединяет правила, Proof of Work, выбор ветви и вознаграждения майнерам. В белой книге Сатоши, исходном техническом описании Bitcoin, этого более позднего названия нет. [1] [4]
Full Node Петра — не избирательный бюллетень. Блок объединяет транзакции в пакет, добавляемый в общую историю. Выход транзакции записывает сумму и условия, при которых её можно потратить позже. Программа Full Node самостоятельно проверяет транзакции и блоки: не потрачены ли уже используемые выходы транзакций, выполнены ли условия их траты и не создаётся ли больше биткоинов, чем разрешено. Майнер может предложить блок, но не произвольно обойти проверки. Недопустимый блок остаётся таким даже при огромной работе за ним. Выбор ветви сравнивает только допустимые варианты; общая история предполагает совместимые правила участников. [2] [3]
Если бы каждый подключённый компьютер имел голос, атакующий мог бы создать множество якобы независимых участников. Это Sybil Attack. Вместо подсчёта имён Proof of Work связывает вес ветви с проверяемой вычислительной работой. Майнеры многократно вычисляют хеши, цифровые отпечатки данных, в поисках результата, отвечающего заданному условию. Попытки требуют энергии и оборудования, а найденный результат легко проверить. Множество сетевых идентичностей само по себе не добавляет работы. Это не проверка паспортов и не голосование всех узлов. [1] [4]
Майнер собирает блок-кандидат и меняет его заголовок, краткое представление блока, пока числовое значение хеша заголовка не станет меньше или равно допустимой цели. Он не решает полезное уравнение и не взламывает шифрование, а ищет редкий результат. Два майнера могут преуспеть почти одновременно. Часть сети сначала увидит один блок, другая — второй, и ненадолго появятся две допустимые ветви. Само по себе это не авария. При нормальном распространении блоков дальнейшая работа позволяет узлам сойтись на более сильной общей ветви. [1] [8]
Силу ветви измеряет chainwork: сумма работы, приписанной блокам на основании их целевых значений. Это не электросчётчик и не журнал реально сделанных попыток. Одному майнеру могло повезти сразу, другой ждал долго; при одинаковой цели их допустимые блоки имеют одинаковый вес. Full Node выбирает доступную допустимую ветвь с наибольшей суммой. Поэтому «самая длинная цепь» означает наибольшую работу, не обязательно количество блоков. Переход на другую ветвь называют реорганизацией; платёж из оставленного блока может быть включён снова, если остаётся допустимым. [1] [2] [3] [7]
Когда платёж Анны входит в принятый блок, он получает одно подтверждение. Каждый следующий блок добавляет ещё одно. Чтобы заменить эту историю, конкурирующей ветви нужно догнать её работу. При честном большинстве вычислительной мощности и достаточно быстром распространении блоков риск успешного переписывания обычно падает с глубиной. Это вероятностная окончательность: растущая уверенность, а не математическая невозможность изменения. Сколько подтверждений будет ждать Пётр, зависит также от суммы и риска платежа. Нет универсального числа, гарантирующего безопасность при любых обстоятельствах. [1] [4]
Если бы с появлением более быстрых машин условие не менялось, блоки возникали бы чаще. Поэтому Difficulty Adjustment в основной сети пересчитывает цель каждые 2016 блоков по предыдущим временным меткам. Ориентир — в среднем десять минут на блок, примерно две недели на такой участок. Отдельный блок может появиться гораздо раньше или позже. Пересчёт запускает количество блоков, а не дата в календаре: после внезапной потери значительной мощности следующей корректировки придётся ждать дольше. Это не мгновенный регулятор и не точные часы. [2] [8]
Новые биткоины, то есть блоковая субсидия, и комиссии вознаграждают майнеров за блоки, остающиеся в принятой истории. Это стимулирует её продолжение, но не заменяет предпосылок безопасности. Большинство мощности может реорганизовывать допустимые ветви, пропускать платежи и пытаться отменить собственные траты. Оно не может заставить Full Node принять недопустимую подпись, сверхнормативную эмиссию или расходование чужих средств без полномочий. Порог 50% тоже не переключатель безопасности: некоторые атаки имеют шансы ниже него. Само наличие награды не создаёт честность. [1] [2] [3]
Вернёмся к Петру. Если атакующий контролирует все соединения его узла, он может показывать неполную картину событий. Eclipse Attack — именно такая сетевая изоляция; число подтверждений тогда может означать не то же самое, что при хорошей связи с остальной сетью. Разделение сети на разобщённые части также затрудняет согласие. Безопасность зависит не только от мощности противника, но и от распространения сообщений и честной проверки. Исследования Bitcoin Backbone явно моделируют эти условия. Процент мощности без сетевых предпосылок не объясняет безопасность полностью. [4]
Классические методы BFT (Byzantine Fault Tolerance) стремятся к согласию даже при неисправных или злоумышленных участниках и часто предполагают заранее известную группу. У примеров OM (Oral Messages) и PBFT (Practical Byzantine Fault Tolerance) свои условия и правила обмена сообщениями. Bitcoin обеспечивает открытое участие через работу и вероятностное закрепление истории; это не простое переименование этих методов. Выбор более сильной допустимой ветви также не меняет сами правила допустимости. Изменение правил требует принятия участниками соответствующего программного обеспечения и совместимых условий. Майнеры помогают определить, какая допустимая история продолжится, а не что все обязаны считать допустимым. [5] [6] [9]
Для полной картины прочитайте эту статью вместе с Bitcoin, Proof of Work, Difficulty Adjustment, Правила консенсуса, Майнинг, Full Node. На эту статью также ссылаются Bit Gold, Reusable Proofs of Work, Byzantine Generals Problem, Sybil Attack.