Продолжаем знакомство с тем, как устроена и как работает децентрализованная электронная денежная система Биткоин. Начало смотрите здесь: Введение в Биткоин: Краткое техническое руководство.
Ранее мы рассмотрели устройство и работу Биткоин-сети, а также зачем нужен Майнинг, как он работает, и что такое Блокчейн. В этой публикации речь пойдет о базовых составляющих блокчейна — Блоках...
Что такое блок?
Блок — это набор транзакций, которые были добавлены в блокчейн. Блоки формируются майнерами.
Когда вы делаете биткоин-транзакцию, она не сразу добавляется в блокчейн. Сначала она хранится в пуле транзакций (или пуле памяти — memory pool или mempool).
Задача майнеров — собрать транзакции из пула транзакций в «блок-кандидат» (candidate block) и попытаться добавить этот блок-кандидат в блокчейн.
Заголовок блока
Каждый блок-кандидат помимо набора отобранных транзакций имеет также заголовок блока (block header), который в основном представляет собой набор метаданных о блоке.
Майнеры используют эти метаданные при попытке добавить блок в блокчейн.
Метаданные — это данные, описывающие другие данные, и служащие информативной меткой.
Метаданные заголовка блока состоят из нескольких полей (меток).
Поля заголовка блока
Детали этих полей сейчас не столь важны, но, в любом случае, мы кратко рассмотрим их:
Version (Версия)
Описывает структуру данных внутри блока. Это используется для того, чтобы компьютеры могли правильно считывать содержимое каждого блока.
Last block (последний блок)
Идентификационный номер предыдущего блока. Мы пытаемся получить один из них для текущего блока-кандидата.
Merkle Root (Корень дерева Меркла)
Суммарный хэш (hash) всех транзакций в блоке, полученный на основе дерева Меркла (Merkle tree). Все транзакции внутри блока хэшируются вместе, образуя один итоговый хэш. Пожалуй, из всех полей метаданных это наиболее значимая часть заголовка блока.
Time (Время)
Текущее время. Временная метка формирования блока.
Target (Цель)
Значение, с которым работают майнеры, чтобы попытаться добавить блок-кандидат в блокчейн. Оно устанавливается Биткоин-сетью и будет пояснено ниже.
Как блоки добавляются в блокчейн?
Чтобы добавить блок-кандидат в блокчейн, майнеры хэшируют данные в заголовке блока и надеются, что полученный результат окажется меньше определенного значения target.
Значение target рассчитывается исходя из сложности (difficulty), которая является значением, установленным Биткоин-сетью, чтобы регулировать, насколько сложно добавить блок транзакций в блокчейн.
Чем больше сложность (difficulty), тем меньше значение target и тем сложнее найти хэш блока, который находится ниже этого значения.
Пока это несколько сложно для понимания, но со временем все прояснится. Читайте дальше!
Difficulty — это значение, устанавливаемое Биткоин-сетью, и предназначенное для регулирования скорости добавления блоков в блокчейн. Этот параметр корректируется каждые 2016 блоков, чтобы попытаться создать интервал в среднем 10 минут между добавлением очередного блока.
Nonce
Некоторое уточнение. На самом деле хэшируется не заголовок блока (block header), а block header с некоторым добавленным дополнительным числом, называемым nonce.
Nonce — это, по большому счету, фиктивное поле (пустышка), которое майнеры используют для того, чтобы получить хеш блока ниже значения target.
Nonce — это произвольное число, используемое только один раз в криптографическом сообщении.
Майнеры, начиная с ноля и постепенно увеличивая, подбирают такое значение nonce, которое, будучи добавлено в заголовок блока, возвращает хэш блока, который меньше значения target.
Примечание: Хэш-значения кроме цифр содержат буквы (от A до F), но на самом деле это шестнадцатиричные числа, с которыми работают компьютеры.
Как только майнер найдет такой nonce, который удовлетворяет условиям (хэш блока меньше значения target), блок-кандидат считается «добытым», и он (со всеми входящими в него транзакциями) добавляется в блокчейн.
Все майнеры теперь вернутся к пулу транзакций и начнут работу над формированием следующего блока-кандидата. Они будут использовать хэш последнего блока в заголовке следующего блока, и гонка за добавление нового блока транзакций в блокчейн начинается снова.
* * *
В следующей публикации будет рассмотрен механизм регулирования времени, необходимого для «добычи» блока, в основе которого лежит Сложность (difficulty) .
Подписывайтесь на мой аккаунт @uanix и голосуйте за меня, как делегата Голоса: https://golos.id/~witnesses
Удачный пост!
Искренне ваш @fomka