Поскольку все транзакции имеют временную метку, нам необходимо реализовать распределенный сервер меток времени в одноранговой сети. Это требует некоторой дополнительной реализации, и это доказательство работы, которое я сейчас опишу. Теперь к каждому блоку добавляем еще один элемент, который называется Nonce, как показано на рисунке ниже.
Nonce — это число, такое, что хэш блока соответствует определенному критерию. Этот критерий может заключаться в том, что сгенерированный хеш должен иметь свои первые четыре цифры, чтобы быть нулем.
Таким образом, сгенерированный хеш будет выглядеть как 000010101010xxx. Как правило, майнер начинает со значения Nonce, равного 0, и продолжает увеличивать его, пока сгенерированный хэш не удовлетворяет указанному критерию.
Обратите внимание, что генерация хеша работает случайным образом и находится вне вашего контроля, то есть вы не можете заставить хеш-функцию генерировать определенный хеш. Таким образом, может потребоваться несколько итераций, пока не будет создан желаемый хеш с четырьмя ведущими нулями. Ожидаемое время генерации блока в системе биткойнов составляет 10 минут. Как только майнер успешно добывает блок, он освобождает его в системе, делая его теперь последним блоком в цепочке.
Обратите внимание, что несколько майнеров соревнуются за создание легитимного блока. Система Биткойн награждает первого успешного майнера, давая ему определенные биткойны. В общем, майнер с большей вычислительной мощностью может быть первым победителем. Это может вызвать атаки на всю систему со стороны тех, кто обладает огромной вычислительной мощностью. Я опишу атаки и как они будут смягчены в конце этого урока.