(Замечательное объяснение принципов работы сети Bitcoin от Майкла Нильсена.
Много текста, мало картинок.
Любые корявости в переводе - в личном сообщении, исправлю по мере обнаружения) Многие тысячи статей были написаны с объяснением Биткойна, онлайновой одноранговой (p2p) валюты.
Большинство этих статей поверхностно описывают суть криптографического протокола, опуская многие детали.
Даже те статьи, которые копают глубже, часто замалчивают важные моменты.
Моя цель в этом посте — объяснить основные идеи протокола Биткойн в ясной и легко доступной форме.
Мы начнем с простых принципов, перейдем к широкому теоретическому пониманию того, как работает протокол, а затем углубимся, рассматривая необработанные данные в транзакции Биткойн.
Детально разобраться в работе протокола довольно сложно.
Гораздо проще вместо этого принять Биткойн как нечто само собой разумеющееся и заняться спекуляциями о том, как разбогатеть с помощью Биткойна, является ли Биткойн пузырем, может ли Биткойн однажды отменить обязательное налогообложение и так далее.
Это все весело, но существенно ограничивает ваше понимание.
Понимание деталей протокола Биткойн открывает ранее недоступные перспективы.
В частности, это основа для понимания встроенного в Биткойн языка сценариев, который позволяет использовать Биткойн для создания новых типов финансовых инструментов, таких как смарт-контракты (см.
Новые финансовые инструменты, в свою очередь, могут быть использованы для создания новых рынков и новых форм коллективного человеческого поведения.
Я расскажу о таких понятиях, как контракты, в будущих постах.
Эта публикация посвящена объяснению внутреннего устройства протокола Биткойн.
Чтобы понять меня, вы должны быть знакомы с идеей открытый криптографический ключ и с тесно связанными идеями о цифровая подпись .
Я также предполагаю, что вы знакомы с криптографическая хэш-функция (изменение входных данных всего на один бит радикально меняет хеш-сумму, прим.
пер.
).
Все это не очень сложно.
Основные идеи можно почерпнуть из программ по математике первого курса университета или на курсах информатики.
Идеи прекрасны, поэтому, если вы с ними не знакомы, рекомендую потратить несколько часов на ознакомление.
Может показаться удивительным, что в основе Биткойна лежит криптография.
Разве Биткойн не является валютой, способом отправлять секретные сообщения? Фактически, проблемы, которые должен решить Биткойн, в основном связаны с обеспечением безопасности транзакций — обеспечением того, чтобы люди не могли воровать друг у друга или выдавать себя за другого и так далее.
В мире атомов мы достигаем этой безопасности с помощью таких устройств, как замки, сейфы, подписи и банковские хранилища.
В мире битов мы достигаем такого рода безопасности с помощью криптографии.
И именно поэтому Биткойн по своей сути является криптографическим протоколом.
Стратегия, которую я буду использовать в своей публикации, предполагает поэтапное создание Биткойна.
Я начну с объяснения очень простой цифровой валюты, основанной на почти очевидных идеях.
Мы назовем эту валюту Инфокоин, чтобы отличать ее от Биткойна.
Конечно, наша первая версия Infocoin будет иметь много недостатков, поэтому мы пройдем через несколько итераций Infocoin, причем каждая новая итерация будет представлять только одну или две простые новые идеи.
После нескольких таких итераций мы придем к полному протоколу Биткойн.
Мы заново откроем Биткойн! Эта стратегия работает медленнее, чем если бы я объяснил весь протокол Биткойна залпом.
Даже если вы сможете понять механику Биткойна с помощью такого потока объяснений, вам будет трудно понять, почему Биткойн устроен таким, какой он есть.
Преимущество медленного итеративного объяснения состоит в том, что оно дает нам гораздо более четкое понимание каждого элемента Биткойна.
Наконец, я должен упомянуть, что я новичок в Биткойне.
Я слежу за ним с 2011 года (а за криптовалютами — с конца 1990-х), но серьёзно стал относиться к деталям протокола Биткойн только в начале этого года.
Поэтому буду благодарен за исправление любых заблуждений с моей стороны.
Кроме того, в свой материал я включил ряд «проблем для автора» — заметок для себя о вопросах, возникших во время написания.
Они могут показаться вам интересными, но вы также можете пропустить их полностью, не теряя при этом основной текст.
Первые шаги: подписано соглашение о намерениях
Итак, как мы можем разработать цифровую валюту? На первый взгляд цифровая валюта кажется чем-то невозможным.Давайте представим себе человека — назовем ее Алисой — у нее есть немного цифровых денег, которые она хочет потратить.
Если Алиса может использовать последовательность битов в качестве денег, как мы можем помешать ей использовать одну и ту же последовательность битов снова и снова, создавая таким образом неограниченное количество денег? Или, если мы можем каким-то образом решить эту проблему, как мы можем предотвратить подделку такой строки битов и ее использование для кражи у Алисы? Это лишь две из многих проблем, которые необходимо преодолеть, чтобы использовать информацию в качестве денег.
В первой версии Infocoin давайте найдем для Алисы способ использовать строку битов в (очень примитивной и неполной) форме денег, но таким образом, чтобы у нее была хоть какая-то защита от подделки.
Допустим, Алиса хочет подарить другому человеку, назовем его Боб, один инфокоин.
Для этого Алиса пишет сообщение «Я, Алиса, даю Бобу один инфокоин».
.
Затем он подписывает сообщение цифровой подписью с использованием частного ключа шифрования (криптокея) и объявляет миру подписанную строку битов.
(Кстати, я пишу «Инфокойн» с заглавной буквы для обозначения протокола и общей концепции, а «Инфокойн» — с маленькой буквы для обозначения конкретной валюты.
Эта практика распространена, хотя и не универсальна, в мире Биткойн.
) Вы не будете очень впечатлены этим прототипом цифровой валюты! Но у него есть некоторые достоинства.
Любой человек в мире (включая Боба) может использовать открытый ключ Алисы, чтобы убедиться, что Алиса на самом деле была человеком, подписавшим сообщение.
«Я, Алиса, даю Бобу один инфокоин».
.
Никто другой не мог создать эту строку битов, а это значит, что Алиса не может повернуться и сказать: «Нет, я вовсе не имел в виду, что хочу подарить Бобу один инфокоин».
.
Таким образом, протокол устанавливает, что Алиса действительно намерена передать Бобу один инфокоин.
Тот же факт — никто не мог составить такое подписанное сообщение — дает Алисе некоторую ограниченную защиту от подделки.
Конечно, после того, как Алиса опубликовала свое сообщение, другие люди могут продублировать ее сообщение, поэтому в некотором смысле возможна подделка.
Но это невозможно сделать с нуля.
Эти два свойства — обнаружение намерений со стороны Алисы и ограниченная защита от несанкционированного доступа — являются действительно примечательными особенностями этого протокола.
Я (вообще) не говорил, что на самом деле существуют цифровые деньги.
Поясню: это просто само сообщение, т.е.
последовательность битов, точнее, сообщение с цифровой подписью: «Я, Алиса, даю Бобу один инфокоин».
.
В будущем протоколы будут схожи: все формы цифровых денег просто будут иметь более значимые сообщения.
Использование серийных номеров для идентификации монет
Проблема первой версии Infocoin заключается в том, что Алиса может снова и снова отправлять Бобу одно и то же подписанное сообщение.Предположим, Боб получил десять копий подписанного сообщения.
«Я, Алиса, даю Бобу один инфокоин».
.
Означает ли это, что Алиса отправила Бобу десять разных инфокоинов? Было ли ее сообщение случайно продублировано? Возможно, она пыталась обмануть Боба, притворяясь, что дала ему десять разных инфоконов, тогда как сообщение лишь доказывает миру, что она намерена подарить один инфокоин.
Нам бы хотелось найти способ сделать инфокоины уникальными.
Им нужна этикетка или серийный номер.
Алиса подпишет сообщение «Я, Алиса, даю Бобу одну инфокоину с серийным номером 8740348» .
Затем, позже, Алиса сможет подписать сообщение.
«Я, Алиса, даю Бобу одну инфокоину с серийным номером 8770431» , и Боб (и все остальные) будут знать, что был передан еще один инфокоин.
Чтобы эта схема работала, нам нужен надежный источник серийных номеров инфокоинов.
Один из способов создать такой источник — открыть банк.
Этот банк будет предоставлять серийные номера инфоконов, отслеживать, у кого какие инфокоины есть, и проверять действительность транзакций.
Более конкретно, предположим, что Алиса приходит в банк и говорит: «Я хочу вывести (вывести) один инфокоин со своего счета» .
Банк уменьшает баланс ее счета на один инфокоин и присваивает ему новый, никогда ранее не использовавшийся серийный номер, скажем, 1234567. Затем, когда Алиса хочет передать свой инфокоин Бобу, она подписывает сообщение.
«Я, Алиса, даю Бобу одну инфокоину с серийным номером 1234567» .
Но Боб не просто принимает инфокоины.
Вместо этого он связывается с банком и проверяет, что: (а) инфокоин с этим серийным номером принадлежит Алисе; и (б) Алиса еще не потратила этот инфокоин.
Если условия верны, то Боб сообщает банку, что он хочет принять этот инфокоин, и банк обновляет свои записи, чтобы отразить, что инфокоин с этим серийным номером теперь находится во владении Боба и больше не принадлежит Алисе.
Создать банк совместными усилиями
Это последнее решение выглядит весьма многообещающе.Однако оказывается, что мы можем сделать нечто гораздо более амбициозное.
Мы можем полностью удалить банк из протокола.
Это существенно меняет природу валюты.
Это означает, что больше нет единой организации, ответственной за валюту.
И если вы подумаете об огромной власти в руках центрального банка – контроле над денежной массой – это довольно большое изменение.
Идея состоит в том, чтобы каждый (все вместе) был банком.
В частности, мы предполагаем, что все пользователи Infocoin ведут полный учет того, кому принадлежат Infocoin. Вы можете думать об этом как об открытом общем реестре, показывающем все транзакции Infocoin. Мы назовем эту книгу «блокчейн», то есть Биткойн называет публичную запись всех транзакций.
Теперь предположим, что Алиса хочет передать инфокоин Бобу.
Она подписывает сообщение «Я, Алиса, даю Бобу одну инфокоину с серийным номером 1234567» и отправляет подписанное сообщение Бобу.
Боб может использовать свою копию цепочки блоков, чтобы проверить, действительно ли инфокоин принадлежит Алисе.
Если это подтверждено, оно затем отправляет сообщение Алисы и сообщение о принятии транзакции по всей сети, и каждый обновляет свои копии цепочки блоков.
У нас все еще остается проблема «откуда серийный номер», но ее решить довольно легко, поэтому я оставлю ее на потом, когда мы будем обсуждать Биткойн.
Более сложная проблема заключается в том, что этот протокол позволяет Алисе обманывать, дважды тратя свои инфокоины.
Она отправляет подписанное сообщение «Я, Алиса, даю Бобу одну инфокоину с серийным номером 1234567» Боб и сообщение «Я, Алиса, даю Чарли один инфокоин с [тем же] серийным номером 1234567».
Чарли.
И Боб, и Чарли используют свою копию цепочки блоков, чтобы убедиться, что инфокоин принадлежит Алисе.
При условии, что они проведут эту проверку одновременно (до того, как у них появится возможность услышать друг друга), оба увидят, что да, цепочка блоков показывает, что монета принадлежит Алисе.
Итак, они оба принимают перевод, а также вместе транслируют информацию о принятии транзакции.
Теперь у нас проблема.
Как другим людям следует обновлять свои блокчейны? Возможно, будет не так просто найти способ получить выверку главной книги транзакций.
И даже если бы каждый мог согласиться постоянно обновлять свои блокчейны, возникает дополнительная проблема: Боба или Чарли можно обмануть.
На первый взгляд, Алисе сложно реализовать повторное отчисление.
В конце концов, если Алиса сначала отправит сообщение Бобу, тогда Боб сможет проверить сообщение и попросить всех остальных в сети (включая Чарли) обновить свои блокчейны.
Как только это произошло, Алиса больше не могла обмануть Чарли.
Так что, скорее всего, Алиса сможет совершать повторные траты только в течение короткого периода времени.
Однако очевидно, что любой такой период времени нежелателен.
Хуже того, есть методы, с помощью которых Алиса может продлить этот период. Например, она могла бы использовать анализ сетевого трафика, чтобы определить моменты, когда у Боба и Чарли возникают большие задержки связи.
Или, возможно, она могла бы сделать что-то, чтобы намеренно саботировать их связь.
Если она сможет хотя бы немного замедлить соединение, ей будет легче повторно потратить средства.
Как решить проблему двойных расходов? Очевидным решением является то, что когда Алиса отправляет Бобу один инфокоин, Боб не должен пытаться проверить транзакцию в одиночку.
Скорее всего, он должен транслировать возможную сделку всем пользователям сети Infocoin и попросить их помочь ему определить, является ли сделка законной.
Если они коллективно решат, что сделка одобрена, тогда Боб сможет принять этот инфокоин, и все обновят свои цепочки блоков.
Этот тип протокола может помочь предотвратить проблему двойных расходов, поскольку, если Алиса попытается потратить свой инфокоин с Бобом и Чарли, другие люди в сети это заметят, и пользователи сети сообщат Бобу и Чарли, что с транзакцией возникла проблема.
и транзакция не должна быть реализована.
Более подробно, предположим, что Алиса хочет подарить Бобу один инфокоин.
Как и прежде, она подписывает сообщение «Я, Алиса, даю Бобу одну инфокоину с серийным номером 1234567» и передает подписанное сообщение Бобу.
Как и раньше, Боб выполняет доказательство работы, используя свою копию цепочки блоков, чтобы проверить, действительно ли монета принадлежит Алисе.
Но в этот момент протокол был изменен.
Боб не просто соглашается на сделку.
Вместо этого он транслирует сообщение Алисы по всей сети.
Другие участники сети проверяют, есть ли у Алисы этот инфокоин.
Если да, то они транслируют сообщение «Да, Алиса владеет инфокоином 1234567, теперь его можно передать Бобу».
Как только достаточное количество людей распространит это сообщение в Интернете, все обновят свои цепочки блоков, чтобы показать, что инфокоин 1234567 теперь принадлежит Бобу и сделка завершена.
В настоящее время этот протокол содержит много неточных элементов.
Например, что значит фраза «достаточное количество людей должно передать это сообщение»? Что значит «достаточно»? Это не может означать всех в сети, поскольку мы априори не знаем, кто находится в сети Infocoin. По той же причине это не может означать какую-то фиксированную долю пользователей в сети.
Мы не будем пытаться разобраться в этом прямо сейчас.
Вместо этого в следующем разделе я укажу на серьезные проблемы описанного нами подхода.
Уделив этому вопросу внимание, мы получим приятный побочный эффект: сделаем изложенные выше идеи более понятными.
Доказательство работы
Допустим, Алиса хочет повторно потратить деньги по протоколу, который я только что описал.Она может сделать это, взяв под свой контроль сеть Infocoin. Предположим, что она использует автоматизированную систему для настройки большого количества индивидуальных идентификаторов (пользователей), скажем, миллиарда, в сети Infocoin. Как и раньше, она пытается дважды заплатить один и тот же инфокоин Бобу и Чарли.
Но когда Боб и Чарли просят сеть проверить сделки, дополнительные пользователи Алисы наводнят сеть, объявляя Бобу, что они подтвердили его сделку, а Чарли, что они подтвердили его сделку, обманом заставляя одного или обоих одновременно принять предложение.
такая сделка.
Есть способ избежать этой проблемы, используя идею, известную как доказательство работы.
Идея противоречива здравому смыслу и включает в себя комбинацию двух других идей: (1) (искусственно) сделать подтверждение транзакций дорогостоящим для пользователей сети в форме компьютерных вычислений; и (2) вознаградить их за помощь в проверке транзакций.
Награда используется для того, чтобы побудить людей в сети попытаться помочь в проверке сделок, несмотря на то, что на этот процесс приходится тратить вычислительные мощности.
Преимущество дорогостоящей проверки транзакций заключается в том, чтобы избежать зависимости от количества личностей (пользователей сети), контролируемых кем-то.
Таким образом, только общая вычислительная мощность может оказать давление на проверку.
Как мы увидим, с помощью грамотного подхода мы можем сделать так, что мошеннику потребуется огромное количество вычислительной мощности для обмана, что сделает его непрактичным.
В этом и заключается суть доказательства корректной работы.
Но чтобы по-настоящему понять, нам нужно внимательнее присмотреться к деталям.
Предположим, Алиса транслирует новости в сеть.
«Я, Алиса, даю Бобу одну инфокоину с серийным номером 1234567» .
Услышав это сообщение, все добавляют его в очередь ожидающих транзакций: прослушаны, но еще не одобрены сетью.
Например, у другого пользователя сети по имени Дэвид может быть следующий список незавершенных сделок: Я, Том, даю Сью одну инфокоину с серийным номером 1201174. Я, Сидни, даю Синтии одну инфокоину с серийным номером 1295618. Я, Алиса, даю Бобу один инфокоин с серийным номером 1234567. Дэвид проверяет свою копию цепочки блоков и видит, что каждая сделка действительна.
Он хотел бы помочь, рассылая новости о действительности сделок по всей сети.
Однако прежде чем это сделать, в рамках протокола проверки Дэвиду необходимо решить сложную вычислительную задачу — доказать корректность работы.
Без решения этой проблемы остальная часть сети не примет подтверждение его транзакции.
Какую проблему Дэвиду нужно решить? Чтобы объяснить это, давайте представим h фиксированную хеш-функцию, известную всем в сети — она встроена в протокол.
Биткойн использует известную хэш-функцию ША-256 , но подойдет любая криптографически безопасная хэш-функция.
Давайте дадим очереди незавершенных сделок Дэвида метку L, чтобы нам было легче обращаться к ней.
Допустим, Дэвид складывает число x (называемое одноразовым номером) и вычисляет хеш-сумму из комбинации.
Например, если мы используем L = «Привет, мир!» (Очевидно, что это не список операций, а просто строка, используемая для иллюстрации) и одноразовый x = 0, затем (вывод в шестнадцатеричном формате) h("Привет, мир!0") = 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64 Проблема, которую должен решить Дэвид, заключается в следующем: доказательство правильной работы состоит в том, чтобы найти такое простое число x, чтобы при добавлении x к L и результате хеширования комбинация начиналась со строки нулей.
Задачу можно сделать более или менее сложной, изменив количество нулей, необходимых для ее решения.
Для относительно простой задачи доказательства работы может потребоваться всего три или четыре нуля в начале хеша, тогда как для более сложной задачи доказательства работы может потребоваться гораздо большее количество нулей, скажем, 15 последовательных нулей.
В любом случае описанная выше попытка найти подходящий одноразовый номер с x = 0 не удалась, поскольку результат не начинается с нуля.
Попробуем x = 1. Это тоже не сработает: h("Привет, мир!1") = e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8 Мы можем продолжать искать разные значения для x=2,3,4. наконец, при x=4250 мы получаем: h("Привет, мир!4250") = 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9 Это число дает нам строку из четырех нулей в начале вывода хэша.
Этого будет достаточно для решения простой проблемы доказательства работы, но недостаточно для решения более сложной проблемы доказательства работы.
Есть одна вещь, которая затрудняет решение этой проблемы.
Результат криптографической хэш-функции ведет себя как случайные числа: измените хотя бы один бит исходных данных, и результат будет радикально другим, настолько, что его невозможно предсказать.
Итак, если мы хотим иметь хеш-значение суммы с 10 нулями в начале, Дэвиду в среднем потребуется выполнить итерацию
различные значения x, прежде чем он найдет подходящее простое число.
Это довольно сложная задача, требующая большой вычислительной мощности.
Эту проблему можно сделать более или менее сложной для решения, имея больше или меньше нулей в выходных данных хэш-функции.
Фактически, протокол Биткойн обеспечивает довольно хороший уровень контроля над сложностью проблемы, используя небольшую вариацию головоломки доказательства работы, описанной выше.
Вместо того, чтобы требовать нулей, Биткойн в качестве доказательства корректной работы требует, чтобы хэш заголовка блока транзакции был меньше или равен числу, известному как цель .
Эта цель автоматически корректируется таким образом, что авторизация блока Биткойн занимает в среднем около десяти минут. (На практике существует значительная случайность в том, сколько времени требуется для утверждения блока: иногда новый блок утверждается всего за минуту или две, а в других случаях это может занять 20 минут или даже больше.
Это напрямую меняется в зависимости от Биткойн-протокол, поэтому время проверки обычно достигает максимум около десяти минут. Вместо решения одной проблемы нам может потребоваться решение нескольких проблем, используя тщательную разработку программного обеспечения, разница во времени для проверки блока сделок может быть значительно уменьшена.
) Хорошо, предположим, что Дэвиду повезло и он нашел правильное число x. Ура! (Он получит награду за нахождение числа, как описано ниже.
) Он передает в сеть блок операций, который утверждает, вместе со значением x. Другие участники сети Infocoin могут проверить, что x является решением и доказательством правильности проблемы.
Затем они должны обновить свои цепочки блоков, чтобы включить в цепочку новый блок транзакций.
Чтобы идея доказательства работы имела хоть какой-то шанс на успех, пользователям сети нужен стимул помогать проверять транзакции.
Без такого стимула у них нет причин тратить ценную вычислительную мощность только для проверки транзакций других людей.
И если пользователи сети не готовы тратить эту мощность, то вся система не будет работать.
Решение этой проблемы — вознаграждение людей, которые помогают проверять транзакции.
В частности, предположим, что мы вознаграждаем тех, кто успешно подтверждает блок сделок, начисляя им определенное количество инфокоинов.
Награда за инфокоины настолько велика, что это даст им стимул участвовать в проверке.
В протоколе Биткойн этот процесс подтверждения называется майнингом.
За каждый проверенный блок транзакций успешный майнер получает вознаграждение в биткойнах.
Изначально эта награда была установлена в размере 50 биткойнов.
Но за каждые 210 тысяч проверенных блоков (примерно раз в четыре года) вознаграждение уменьшается вдвое.
Это произошло только один раз.
На данный момент вознаграждение за майнинг блока составляет 25 биткойнов.
Это сокращение вдвое будет продолжаться каждые четыре года до 2140 года.
В этот момент вознаграждение за майнинг упадет ниже 10^-8 биткойнов за блок.
10^-8 биткойнов на самом деле являются минимальной единицей биткойнов и известны как сатоши.
.
Таким образом, в 2140 году общее количество биткойнов перестанет увеличиваться.
Однако это не устранит стимул продолжать проверку транзакций.
Биткойн также позволяет выделить некоторую сумму в сделке в качестве комиссии за транзакцию, которая поступает майнеру, который помогает принять сделку.
На заре существования Биткойна комиссия за транзакцию была нулевой, но по мере роста популярности Биткойна комиссия за транзакцию постепенно увеличивалась и теперь является дополнительным дополнением к вознаграждению в 25 биткойнов за майнинг блока.
Вы можете думать о доказательстве работы как о соревновании, кто быстрее всех сможет принять транзакции.
Каждое участие в конкурсе стоит немного вычислительной мощности.
Шанс майнера на победу в соревновании (грубо говоря, с некоторыми оговорками) равен общей мощности хэширования, которую он контролирует. Так, например, если майнер контролирует один процент общей вычислительной мощности, используемой для проверки биткойн-транзакций, то его шанс на победу составляет примерно один процент. То есть при условии, что в соревновании задействовано много вычислительных мощностей, у нечестного майнера, скорее всего, будет относительно небольшой шанс испортить процесс проверки, если только он не затрачивает огромное количество вычислительных ресурсов.
Конечно, хотя тот факт, что нечестная сторона имеет относительно небольшой шанс испортить блокчейн, обнадеживает, этого недостаточно, чтобы вызвать доверие к валюте.
В частности, мы еще не до конца решили вопрос текущих расходов.
Скоро проанализирую двойные расходы.
Прежде чем я это сделаю, я хочу заполнить важную деталь в описании Infocoin. В идеале было бы договориться о порядке проведения транзакций в сети Infocoin. Если у нас не будет такого порядка, то в любой момент может стать непонятно, кому какие инфокоины принадлежат. Чтобы решить эту проблему, мы потребуем, чтобы новые блоки всегда включали указатель на предыдущий блок, утвержденный в цепочке, в дополнение к списку транзакций в блоке.
(Указатель на самом деле представляет собой просто хэш предыдущего блока).
Итак, у нас есть цепочка блоков — это просто прямая цепочка блоков транзакций, идущих один за другим, где каждый блок содержит указатель на непосредственно предыдущий блок:
Иногда в цепочке блоков появляется форк.
Это может произойти, например, если два майнера случайно подтвердили блок операций одновременно — и оба транслируют свой новый проверенный блок в сеть, и некоторые люди обновляют свою цепочку блоков в одном направлении, а другие — в другом.
направление:
Казалось бы, это вызывает проблему, которую мы пытаемся избежать — больше не ясно, в каком порядке происходили транзакции, и не ясно, кто какими инфокоинами владеет. К счастью, есть простая идея, с помощью которой можно удалить любую пробку.
Правило таково: если происходит форк, люди в сети отслеживают оба форка.
Но в любой момент времени майнеры работают только над продолжением форка, в котором копия цепочки блоков длиннее.
Допустим, у нас есть форк, в котором некоторые майнеры первыми получают блок А, а некоторые майнеры получают блок Б.
Те майнеры, которые первыми получают блок А, будут продолжать работать по этому форку, а другие майнеры будут следовать форку Б.
Допустим, что майнеры работая над форком B, успешно добыли блок:
После того, как все узнают, что это произошло, майнеры, работающие на форке A, заметят, что форк B стал длиннее, и переключятся на работу на этом форке.
Вот и все! Сразу же работа на ветке А прекратится, и все будут работать по одной и той же линейной цепочке, а блок А можно будет игнорировать.
Конечно, любые неподтвержденные транзакции, включенные в блок A, по-прежнему будут ожидать в очередях майнеров, работающих на форке B, и все транзакции впоследствии будут подтверждены.
Кроме того, может оказаться, что майнеры, работающие на форке А, расширят его раньше.
В этом случае работа на ветке Б быстро остановится, и мы снова получим одну линейную цепочку.
Независимо от результата, этот процесс гарантирует, что в блокчейне будет согласованный во времени порядок блоков транзакций.
В Биткойне сделка не считается подтвержденной до тех пор, пока: (1) она не является частью блока в самом длинном форке и (2) как минимум 5 блоков последовали за ней в самом длинном форке.
В этом случае мы говорим, что транзакция имеет «6 подтверждений».
Это дает сети время прийти к последовательному порядку блоков.
Мы также будем использовать эту стратегию для Infocoin. Теперь, когда мы разобрались с порядком, давайте вернемся к размышлениям о том, что произойдет, если нечестный пользователь попытается удвоить расходы.
Допустим, Алиса дважды пытается потратить инфокоин вместе с Бобом и Чарли.
Один из возможных подходов — попытаться независимо проверить блок, включающий обе транзакции.
Если предположить, что ей принадлежит один процент от общей вычислительной мощности, ей может повезти, и она подтвердит блок, решив математическую задачу доказательства работы.
К несчастью для Алисы, повторный платеж будет немедленно замечен другими людьми в сети Ifnocoin и отклонен, несмотря на решение проблемы с доказательством корректной работы.
Так что нам не о чем беспокоиться.
Более серьезная проблема возникает, если она отдельно транслирует две сделки, в которых она держит один и тот же инфокоин с Бобом и Чарли соответственно.
Например, она могла бы транслировать одну транзакцию одной группе майнеров, а другую — другой, надеясь таким образом получить одобрение транзакций.
К счастью, в этом случае, как мы видели, сеть завершит только одну из этих транзакций, но не обе.
Так, например, сделка Боба может в конечном итоге быть подтверждена, и в этом случае Боб может быть спокоен.
Тем временем Чарли увидит, что его сделка не подтверждена, и откажется от предложения Алисы.
Так что это не проблема.
На самом деле, зная, что это произойдет, у Алисы нет особых причин пытаться это сделать.
Существует еще один важный вариант двойной траты, если Алиса = Боб, т. е.
Алиса пытается заплатить за монету Чарли, которую она также «тратит» на себя (то есть отдавая себе).
Кажется, что это легко заметить и с этим легко справиться, но в то же время, конечно, легко настроить несколько пользователей в сети, связанных с одним и тем же человеком или организацией, так что эту возможность необходимо принять во внимание.
В этом случае стратегия Алисы состоит в том, чтобы дождаться, пока Чарли примет инфокоин, что произойдет после Теги: #bitcoin #Криптовалюты #финансы #криптовалюты
-
База Данных Yahoo Answers Догоняет Википедию
19 Oct, 24 -
Glofiish M800 — Теперь Официально
19 Oct, 24