000007ac6b77f49380ea90f3544a51ef0bfbfc8304816d1aab73daf77c2099319
Заранее узнать, какой блок после применения к нему хеш-функции даст результат с нужным количеством нулей, невозможно.
SHA 256 и другие хеш-функции всегда генерируют для одинаковых входных данных один и тот же результат, поэтому каждый участник конкурса добавляет к концу блока случайное число. Криптографические хеш-функции устроены так, что любое изменение входных данных (сколь угодно малое) приводит к случайному изменению всего результата. Если первая попытка получить результат с нужным количеством нулей не привела к успеху, узел изменяет случайное число в конце блока и хеширует блок еще раз. Это повторяется до тех пор, пока один из узлов не найдет блок, хеширование которого позволит получить результат с необходимым количеством нулей. Нахождение такого блока – дело случая, но узел, способный хешировать блоки быстрее конкурентов, имеет больше шансов на победу в конкурсе – подобно тому, как приобретение дополнительных лотерейных билетов повышает шансы выиграть в лотерее.
Количество нулей в начале хеша, необходимое для выигрыша в конкурсе, изменяется в соответствии с интервалом между блоками. Если интервал сокращается, ПО Биткойна периодически корректирует условия конкурса так, чтобы получить нужный результат было сложнее (иначе говоря, он должен содержать больше нулей в начале). Если интервал между блоками становится больше 10 минут, сложность задачи уменьшается.
Запись блоков в блокчейн
Добившись нужного результата, узел-победитель отправляет полученный блок другим узлам сети, чтобы они могли убедиться в том, что задача действительно решена. После этого узлы добавляют блок-победитель с содержащимися в нем транзакциями в свою копию блокчейна. Этот блок становится официальной записью всех транзакций, выполненных с момента добавления предыдущего блока. Если в блоке-победителе отсутствуют некоторые транзакции, отправленные в сеть в предыдущем раунде конкурса, они переходят в следующий раунд. Вместе с транзакциями и случайным числом каждый добавляемый в блокчейн блок содержит также ссылку на предыдущий блок и сведения о состоянии биткойн-сети.
Этот способ достижения согласия по поводу состояния сети решает так называемую “задачу византийских генералов”, над которой долго бились ученые. По сути, она сводится к обеспечению надежности сети, если некоторым из ее участников нельзя доверять. Составление блокчейна из блоков, каждый из которых принимается от одного из участников сети, и разрешение разногласий по принципу большинства решают эту проблему.
Создание монет
Какой смысл вообще участвовать в этой гонке? Дело в том, что узел, который обнаружил блок, соответствующий условиям конкурса, получает награду, которая в первые 4 года существования Биткойна составляла 50 монет. Чтобы получить эту награду, каждый участник конкурса добавляет в список обрабатываемых транзакций дополнительную транзакцию, отправляя новые биткойны “из ниоткуда” на свой адрес. Когда конкретный блок побеждает в лотерее и добавляется в блокчейн, новые монеты отправляются по указанному в блоке адресу. Если узел попытается выписать себе больше монет, чем действующая в текущий момент награда, блок будет отвергнут другими узлами, даже если его хеш будет содержать необходимое количество нулей.