Что такое майнинг криптовалют
Майнинг криптовалют – это процесс проверки подтверждения транзакций в блокчейне. Во время майнинга также создаются новые единицы криптовалюты. Работа майнеров требует мощных вычислительных ресурсов, но именно она обеспечивает безопасность сети блокчейна. Честные и успешные майнеры получают награду за работу, которая состоит из созданных единиц криптовалюты и комиссий за транзакции.
Майнинг – это процесс, при котором транзакции с криптовалютами между пользователями проверяются и добавляются в блокчейн. Майнинг также отвечает за добавление новых монет в существующее обращение.
Майнинг является одним из ключевых элементов сети Биткоина, который позволяет ей работать как распределенный реестр. Все транзакции записываются в одноранговой сети без необходимости в центральном органе управления. В этой статье мы рассмотрим механизм майнинга в сети Биткоина, однако процесс аналогичен альткоинам с тем же механизмом добычи.
Профессиональное объяснение
Поначалу, цель майнинга немного сбивает с толку. Мы будем иметь ввиду блокчейн Биткойна в качестве примера на протяжении всей этой статьи.
Майнинг – это не создание новых биткойнов. Майнинг - это механизм, который позволяет цепочке блоков быть децентрализованной и безопасной. Он защищает сеть Биткойна и позволяет использовать систему без централизованного управления.
Не путайте вознаграждение, которое получают майнеры (создавая новые монеты) с самим процессом.
Как работает майнинг
Все новые транзакции в блокчейне отправляются в пул под названием пул памяти. Задача майнера состоит в том, чтобы проверить достоверность этих транзакций в обработке и организовать их в блоки. Блок можно представить в виде страницы реестра блокчейна, в которой записываются несколько транзакций (вместе с другими данными).
В частности, нода майнинга отвечает за сбор неподтвержденных транзакций из пула памяти и их добавление в блок-кандидат. После этого майнер попытается преобразовать этот блок-кандидат в подтвержденный блок, но для этого ему нужно найти решение сложной математической задачи. Для этого требуются большие вычислительные ресурсы, но за каждый успешно добытый блок майнер получит вознаграждение, состоящее из новых созданных криптовалют, а также комиссии за транзакцию. Ниже мы рассмотрим процесс майнинга подробнее.
Шаг 1. Хеширование транзакций
Первым этапом майнинга блока является получение транзакций в обработке из пула памяти и их поочередная отправка через хеш-функцию. При каждой отправке части данных через хеш-функцию создаются выходные данные фиксированного размера, называемые хешем. В контексте майнинга хеш каждой транзакции состоит из строки цифр и букв, которая работает как идентификатор. Хеш транзакции содержит всю информацию, содержащуюся в этой транзакции.
Помимо хеширования и подтверждения каждой транзакции по отдельности, майнер также добавляет собственную транзакцию, в которой он отправляет себе вознаграждение за блок. Эта транзакция называется coinbase, и она создает новые монеты. В большинстве случаев транзакция coinbase первой записывается в новый блок, и за ней следуют все ожидающие транзакции, которые они планируют проверить.
Шаг 2. Создание дерева Меркла
После хеширования каждой транзакции хеши организуются в структуру под названием дерево Меркла. Также известное как хеш-дерево, дерево Меркла формируется путем организации хешей транзакции в пары с последующим хешированием. Затем новые выходные данные хеша объединяются в пары и снова хешируются. Процесс повторяется до тех пор, пока не будет создан один хеш. Этот последний хеш также называется корневым (или корнем Меркла) и представляет собой хеш, включающий все предыдущие хеши, которые использовались для его создания.
Шаг 3. Поиск действительного заголовка блока (хеша блока)
Заголовок блока выступает в качестве идентификатора для каждого отдельного блока, а это означает, что каждый блок имеет уникальный хеш. При создании нового блока майнеры объединяют хеш предыдущего блока с корневым хешем своего кандидата, чтобы создать новый хеш блока. Однако, помимо этих двух элементов, им также нужно добавить произвольное число, называемое nonce.
Таким образом, при попытке подтвердить свой блок-кандидат майнер должен объединить корневой хеш, хеш предыдущего блока и число nonce и отправить их через хеш-функцию. Их цель – создать хеш, который будет считаться действительным.
Корневой хеш и хеш предыдущего блока изменить нельзя, поэтому майнерам необходимо несколько раз изменить значение nonce, пока не будет найден правильный хеш.
Чтобы считаться действительным, вывод (хеш блока) должен быть меньше определенного целевого значения, которое определяется протоколом. При майнинге биткоинов хеш блока должен начинаться с определенного количества нулей. Именно это и называется сложностью майнинга.
Шаг 4. Передача добытого блока
Итак, майнерам приходится постоянно хешировать заголовок блока с разными значениями nonce до тех пор, пока они не найдут действительный хеш блока. Нашедший его майнер передает свой блок в сеть. Все остальные ноды проверяют, является ли блок и его хеш верными. Если да, то они добавляют новый блок в свою копию блокчейна.
В этот момент блок-кандидат становится подтвержденным, и все майнеры переходят к добыче следующего. Все майнеры, которые не смогли вовремя найти действительный хеш, убирают свой блок-кандидат, и майнинг начинается заново.
Корректировка сложности майнинга
Сложность майнинга регулярно корректируется протоколом, что гарантирует постоянную скорость создания новых блоков. Именно это делает эмиссию новых монет стабильной и предсказуемой. Сложность регулируется пропорционально объему вычислительной мощности (скорости хеширования) сети.
Таким образом, каждый раз, когда к сети присоединяются новые майнеры и растет конкуренция, сложность хеширования будет увеличиваться, предотвращая уменьшение среднего времени создания блока. Если же многие майнеры решат покинуть сеть, сложность хеширования снизится, что упростит добычу. Такие корректировки поддерживают постоянное время создания блока, независимо от общей вычислительной мощности сети.
Что делать, если одновременно добываются два блока?
Иногда случается, что два майнера одновременно передают действительный блок и в сети остаются два конкурирующих блока. Затем майнеры начинают добывать следующий блок на основе того блока, который они получили первым. Это приводит к разделению сети (временно) на две различные версии блокчейна.
Конкуренция будет продолжаться до тех пор, пока не будет добыт следующий блок поверх любого из конкурирующих блоков. Когда добывается новый блок, его предыдущий блок будет считаться победителем. Другой блок называется сиротским или отцепленным. Все майнеры, выбравшие этот блок, затем переключаются на майнинг победителя.