На этом этапе следующий честный узел с большой вероятностью будет продолжать строить эту цепочку, поскольку он длиннее.
Этот процесс будет продолжаться, и становится все более вероятным, что блок, содержащий двойную трату, станет частью долгосрочной консенсусной цепи.
С другой стороны, блок, содержащий транзакцию для Боба, полностью проигнорируется сетью, и теперь это будет называться сиротским блоком.
Давайте теперь пересмотрим всю эту ситуацию с точки зрения Боба-торговца.
Понимание того, как Боб может защитить себя от этой атаки двойной траты, является ключевой частью понимания безопасности биткойнов.
Когда Алиса транслирует транзакцию, которая представляет ее платеж Бобу, Боб слушает в сети и слышит об этой транзакции еще до создания следующего блока.
Если бы Боб был еще более безрассудным, чем мы описали ранее, он может завершить процесс оформления заказа на веб-сайте и позволить Алисе загрузить программное обеспечение прямо в этот момент.
Это называется транзакцией с нулевым подтверждением.
Это приводит к появлению еще большей вероятности атаки двойной траты, чем было описано до этого.
Раньше для атаки двойной траты приходилось предполагать, что злоумышленник контролирует узел, предлагающий следующий блок.
Но если Боб разрешает Алисе загружать программное обеспечение до того, как транзакция получит хотя бы одно подтверждение в цепочке блоков, тогда Алиса может немедленно транслировать транзакцию с двойной тратой, а честный узел может ее включать в следующий блок, а не транзакцию, которая платит Бобу.
С другой стороны, осторожный торговец не даст программное обеспечение Алисе даже после того, как транзакция была включена в один блок и будет продолжать ждать.
Если Боб увидит, что Алиса успешно запускает атаку двойной траты, он поймет, что блок, содержащий оплату Алисы для него, остался сиротой.
Он должен отказаться от транзакции и не позволить Алисе загрузить программное обеспечение.
Если же вместо этого, несмотря на попытку двойной траты, следующие несколько узлов будут строить блокчейн с помощью блока транзакции Алиса → Боб, тогда Боб будет уверен, что его сделка будет находиться в долгосрочной консенсусной цепочке.
В целом, чем больше существует подтверждений транзакции, тем выше вероятность того, что она будет содержаться в долгосрочной консенсусной цепочке.
Напомню, что поведение честных узлов всегда заключается в расширении самой длинной допустимой ветви, которую они видят.
Шанс, что более короткая ветка с двойной тратой догонит длинную ветку, становится все более незначительным, поскольку она растет дольше, чем любая другая ветвь.
Это предположение верно, если только меньшинство узлов является зловредными – для более короткой ветки, чтобы догнать более длинную ветку, несколько зловредных узлов должны будут подряд собирать блокчейн.
Фактически, вероятность двойного расходования экспоненциально уменьшается с количеством подтверждений.
Если транзакция, в которой вы заинтересованы, получила k подтверждений, то вероятность того, что транзакция с двойным расходованием будет в долгосрочной консенсусной цепочке, эта вероятность будет экспоненциально убывать как функция от k.
Наиболее распространенная практика, используемая в экосистеме биткойнов, – это ждать шесть подтверждений.
В числе шесть нет ничего особенного.
Это просто хороший компромисс между количеством времени, которое вы должны ждать, и вашей гарантией того, что транзакция, в которой вы заинтересованы, попадает в цепочку консенсусного блока.
Напомню, что защита от недействительных транзакций полностью криптографическая.
Но эта защита осуществляется на основе консенсуса, а это означает, что если узел попытается включить криптографически недействительную транзакцию, то единственная причина, по которой транзакция не окажется в долгосрочной консенсусной цепочке, заключается в том, что большинство узлов являются честными и не будут включать недопустимую транзакцию в цепочку блоков.
С другой стороны, защита от двойных трат осуществляется исключительно и только на основе консенсуса.
Криптографии нечего сказать об этом, и две транзакции, которые представляют собой попытку двойной траты, действительны с криптографической точки зрения.
Но именно консенсус определяет, какая из них окажется в долгосрочной консенсусной цепочке.
И, наконец, вы никогда на 100 процентов не можете быть уверены, что транзакция, в которой вы заинтересованы, находится в консенсусной ветке.
Но экспоненциальная вероятностная гарантия этого довольно хорошая.
После шести транзакций практически нет шансов, что вы ошибетесь.
Стимулы и доказательства работы
Теперь у нас есть базовое представление консенсусного алгоритма Биткойна и представление, почему мы считаем, что это безопасно.
Но вспомним, что децентрализация Боткойна – это с одной стороны технический механизм, а с другой стороны умная стимуляция.
До сих пор мы в основном рассматривали технический механизм.
Теперь давайте поговорим о стимулах, которые применяются в Биткойне.
Также вспомним, что мы сделали предположение, что мы можем выбрать случайный узел и, возможно, более проблематично, что, по крайней мере, в 50 процентов случаев, при этом мы выберем честный узел.
Это предположение о честности особенно проблематично, если есть финансовые стимулы того, чтобы участники хотели подорвать процесс, и в этом случае мы не можем с точностью предположить, что узел будет честным.
Тогда возникает вопрос: можем ли мы дать узлам стимул вести себя честно?
Рассмотрим снова попытку двойной траты после одного подтверждения.
Можем ли мы каким-то образом наказывать узел, который создал блок с транзакцией с двумя тратами?
Ответ – не совсем.
Как я говорил ранее, трудно понять, что является морально легитимной сделкой.
Но даже если бы мы это сделали, все равно трудно наказывать узлы, так как у них нет идентификаторов.
Поэтому вместо этого давайте подойдем с другой стороны и спросим, можем ли мы вознаградить каждый из узлов, которые создали блоки, которые в конечном итоге оказались в долгосрочной консенсусной цепочке?
И, опять же, поскольку эти узлы не раскрывают свою реальную идентичность, мы не можем отправить им наличные на их домашние адреса.
Только если бы существовала какая-то цифровая валюта, которую мы могли бы использовать для их стимулирования, возможно, децентрализованная.
Вероятно, вы уже видите, к чему я иду.
Другими словами, мы собираемся использовать биткойны, чтобы стимулировать узлы, которые создали эти блоки.
Давайте на мгновение остановимся.
Все, что мы описали до сих пор, является абстрактным алгоритмом для достижения распределенного консенсуса и не является специфичным для приложения.
Теперь мы уйдем из этой модели, и мы будем использовать тот факт, что приложение, которое мы строим с помощью этого распределенного процесса консенсуса, фактически является валютой.
В частности, мы собираемся стимулировать узлы вести себя честно, платя им в единицах этой валюты.
Как это делается?
В Биткойне есть два отдельных механизма стимулирования.
Первое стимулирование – это награда за блок.
Согласно правилам биткойна, узел, который создает блок, включает специальную транзакцию в этот блок.
Эта транзакция представляет собой транзакцию создания монет, аналогичную CreateCoins в Scroogecoin, и узел также может выбрать адрес получателя этой транзакции.
Конечно, этот узел, как правило, выбирает адрес, принадлежащий самому себе.
Вы можете думать об этом как о плате узлу в обмен на услугу создания блока в консенсусной цепочке.
На сегодняшний момент значение вознаграждения блока фиксировано на уровне 12.5 биткойнов.