В традиционных денежных системах правительства печатают больше денег, когда им необходимо. В Биткоин-системе деньги не печатаются — они добываются. Компьютеры по всему миру «выкапывают» монетки, соревнуясь друг с другом.
Как происходит добыча, она же майнинг?
Люди постоянно пересылают друг другу биткоины через сеть Биткоин, но если кто-то не будет хранить записи всех транзакций, никто не сможет отследить, кто кому и сколько платил. Сеть Биткоин для этого и предназначена. Она объединяет все операции, сделанные за какой-то промежуток времени, в список, именуемый блоком. Работа майнера — принять эти транзакции и записать их в главную книгу учета.
Создаем хэши
Главная книга учета — это длинный перечень блоков, называемый цепочкой блоков. Она используется, чтобы отыскать любую транзакцию между любыми адресами в любой точке сети. Когда бы ни был открыт новый блок, он добавится в цепочку, во всё увеличивающийся список транзакций, которые имели место в сети Биткоин. Постоянно обновляющаяся копия блока раздается каждому, кто подключен к сети, чтобы все знали, что происходит.
Главная книга учета предполагает, что ей доверяют все пользователи сети Биткоин. Записи в ней хранятся в цифровом виде. Как мы можем быть уверены, что цепочка блоков никем не подделана? Вот здесь в дело вступают майнеры.
Когда блок транзакций открыт, майнеры начинают его обрабатывать. Они берут информацию из блока и совершают над ним математические операции, превращая его во что-то другое. Это что-то другое гораздо короче по длине, представляет из себя последовательность букв и цифр и называется хэшем. Хэш хранится внутри блока в конце цепочки.
У хэши интересные свойства. Насколько просто получить хэш из кучи информации, как блок биткоина, настолько же сложно узнать, что-то об исходных данных, имея на руках только хэш. Хотя получить хэш из большого количества данных очень просто, каждый хэш уникален. Если вы измените хоть один символ в блоке биткоина, хэш изменится полностью.
Для генерации хэшей майнеры используют не просто информацию о транзакциях в блоке, им нужны дополнительные данные. Например, хэш последнего блока из цепочки блоков. Поскольку хэш каждого блока производится, используя хэш блока, стоящего перед ним, он становится цифровой версией сургучной печати. Он подтверждает, что и его, и каждый предшествующий ему блок достоверны, потому что если вы его подделали, об этом узнают все.
Если вы попытаетесь провести фиктивную транзакцию, изменив блок, уже сохраненный в цепочке, хэш блока изменится. Если кто-то проверит аутентичность блока, пересчитав его хэш, он обнаружит, что хэш этого блока отличается от сохраненного в цепочке. Значит, весь этот блок — подделка. Поскольку хэш каждого блока нужен для производства следующего, подделка блока изменит хэш следующего и так далее, пока не изменится и не поломается вся цепочка.
Конкуренция за монетки
Вот так вот майнеры распечатывают блоки. Они соревнуются друг с другом, чтобы сделать это, используя специальные программы для обсчета блоков. Каждый раз, когда кто-то создает хэш, он получает награду в 25 биткоинов, цепочка блоков обновляется и каждый в сети узнает об этом. Это стимулирует продолжение майнинга и позволяет проводить транзакции.
Проблема в том, что посчитать хэш какого-то количества данных очень легко. Компьютеры отлично справляются с этим. Сеть Биткоин устроена по-другому, в ней эти вычисления более затратны. В противном случае каждый мог бы насчитывать бы сотни блоков каждую секунду, и все биткоины были бы «раскопаны» за минуты. Биткоин-код сделал вычисления более сложными, внедрив так называемую систему «доказательства выполненной работы».
Биткоин-код не примет просто любой старый хэш. Он требует, чтобы хэш блока выглядел определенным образом — начинался с некоторого количества нулей. Нельзя предсказать, как будет выглядеть хэш, пока вы его не посчитаете, и как только вы включите новые данные, хэш станет совершенно другим. Майнеры не могут влиять на данные транзакций в блоке, но они должны изменить используемые данные, чтобы хэш поменялся. Это делается другим, случайным куском данных, называемым nonce. Он используется вместе с данными о транзакции, чтобы создать хэш. Если хэш не помещается в нужный формат, nonce меняется, и весь объем данных хэшируется заново. Нужно очень много попыток, чтобы найти nonce, который будет работать. Причем все майнеры в сети пытаются сделать это одновременно. Вот так майнеры добывают свои монетки.
Источник: coindesk