Как работает блок в блокчейне Биткойн?
В этом руководстве мы расскажем о принципах работы ключевых компонентов отдельных блоков блокчейна, составляющего сеть Биткойн.
Резюме
Транзакции сети блокчейн состоят из последовательных групп данных, которые упакованы вместе в «блоки», связанные линейно. Каждый блок также содержит набор данных транзакции, которые обрабатываются после завершения блока.
Отдельные блоки, составляющие большую цепочку блоков (блокчейн), содержат важную информацию для функционирования сети. Каждый новый блок содержит криптографически проверяемые данные о транзакциях, а также числовой запрос, который необходимо выполнить, чтобы текущий блок был одобрен и добавлен в блокчейн.
Здесь мы исследуем структуру блока в блокчейне Биткойн и соответствующие роли его отдельных компонентов.
Введение в биткойн-блоки
Сеть Биткойн поддерживает распределенный публичный реестр, в котором регистрируются права собственности и транзакции всех Биткойнов (BTC), собственного цифрового актива сети Биткойн.
По мере того как транзакции происходят в сети, данные транзакций группируются в «блоки» и хронологически добавляются к текущей линейной цепочке блоков данных в сети - отсюда и термин «блокчейн».
Блоки, составляющие текущую последовательность транзакций блокчейна, должны быть структурно идентичными. Каждый блок содержит заголовок блока, а также данные транзакции - два важных набора информации, необходимых для правильного функционирования сети и способности передавать значение.
Каждый блок также должен содержать определенную конкретную информацию, чтобы быть распознанным сетью и впоследствии должным образом проверяться и добавляться в блокчейн.
Общая структура блока Биткойн всегда включает в себя следующие элементы:
- Magic number (магическое число): это 4-байтовое поле всегда содержит значение 0xD9B4BEF9, которое указывает, что формат файла соответствует структуре данных, соответствующей сети Биткойн.
- Blocksize (размер блока): это 4-байтовое поле устанавливает ограничение на количество данных, которые могут содержаться в блоке. Размер блока биткойнов ограничен одним мегабайтом (1 МБ).
- Block header (заголовок блока): это 80-байтовое поле состоит из шести отдельных компонентов, про которые более подробно мы расскажем ниже.
- Transaction counter (счетчик транзакций): это поле может иметь размер от одного до девяти байтов и представляет собой положительное целое число, которое представляет количество транзакций, содержащихся в блоке Биткойн.
- Transactions (транзакции): это поле переменного размера содержит список всех транзакций, содержащихся в блоке, и обычно заполняется достаточным количеством транзакций, чтобы заполнить ограничение на размер блока биткойнов в 1 МБ.
Заголовок блока и данные транзакции представляют две основные категории данных в любом данном блоке, к тому же, они разбиты на отдельные компоненты, которые мы обсудим более подробно для лучшего понимания процесса генерирования блока.
Заголовки блоков BTC и майнинг
Сеть Биткойн в основном полагается на децентрализованную сеть узлов, которые поддерживают распределенный публичный реестр всех транзакций Биткойнов. Сетевые узлы также могут участвовать в процессе, называемом майнингом, который защищает сеть и гарантирует подлинность новых блоков и транзакций, которые они содержат.
Майнеры несут ответственность за запись новых блоков в блокчейн, поэтому их роль в проверке целостности информации, содержащейся в предлагаемом блоке, имеет первостепенное значение.
Время создания блока Биткойнов составляет десять минут (в среднем), поэтому каждый час в блокчейн Биткойн записывается около шести новых блоков.
Заголовок блока содержит 80 байтов криптографически проверяемой информации:
- Version (версия): это 4-байтовое поле указывает номер версии используемого протокола Биткойн и обычно содержит значение «1».
- hashPrevBlock: это 32-байтовое поле содержит 256-битный хэш предыдущего заголовка блока.
- hashMerkleRoot: это 32-байтовое поле содержит 256-битный хэш корня дерева Меркла всех транзакций в текущем блоке.
- Time (время): это 4-байтовое поле содержит метку времени текущего блока, которая используется для его хронологического размещения в блокчейне.
- Bits (биты): это 4-байтовое поле содержит целевую сложность текущего блока Биткойнов, которая определяет, насколько сложно будет найти целевой хэш.
- Nonce: это 4-байтовое поле содержит 32-битное число, которое майнер должен изменить, чтобы правильно решить вычислительную задачу для текущего блока.
Биткойн-майнеры соревнуются за решение ресурсоемкой задачи Proof-of-Work (PoW). Головоломка требует взятия всех сетевых транзакций, а также информации из предыдущего блока (то есть его заголовка блока), и их «хеширования» с использованием алгоритма SHA-256.
Первому майнеру, который решит эту головоломку, разрешается создать новый блок, а взамен он получает вознаграждение в виде недавно выпущенных в обращение BTC.
Вообще говоря, хеширование - это процесс, посредством которого определенный ввод - в данном случае данные недавней транзакции и заголовок блока - вводится в алгоритм для генерации определенного типа вывода.
Майнер должен взять эти данные и угадать число, называемое «nonce», которое при вводе в хэш SHA-256 будет генерировать один вывод, который соответствует другому выводу, установленному протоколом Биткойн.
Майнинг сводится к тому, чтобы как можно быстрее угадать «nonce». Если майнер достигает указанного порогового значения вывода, он будет транслировать новый блок (который включает их одноразовый номер) другим майнерам в сети, чтобы они могли сами хешировать его и проверить предложенное решение.
Если большинство майнеров - 51% или более - достигнут консенсуса по решению, майнеру будет разрешено добавить свой новый блок в блокчейн и получить вознаграждение за блок. Этот же процесс повторяется каждые 10 минут в сети Биткойн по мере добавления новых блоков и роста цепочки данных.
Высота блока Биткойн измеряет, сколько блоков предшествовало ему в протоколе Биткойн. Например, следующее сокращение вдвое блока Биткойн (вознаграждений за майнинг) произойдет на высоте блока 840 000 в 2024 году.
Другими словами, эта веха произойдет, когда количество блоков Биткойн, записанных в протокол с момента возникновения блока в 2009 году, будет равно 840 000.
Данные транзакции в блоке Биткойнов
Другой основной компонент блока Биткойн - это данные транзакции, которые составляют большую часть информации внутри структуры данных блока блокчейна.
Первая транзакция, содержащаяся в каждом новом блоке, известна как транзакция генерации или транзакция Coinbase (не путать с Coinbase – площадкой торговли криптовалютой) и отвечает за генерацию новых BTC как часть вознаграждения за блок для успешного майнера.
Эта первоначальная транзакция четко указывает, какие биткойн-адреса имеют право на получение вознаграждения за блок.
В то время как традиционные транзакции Биткойнов содержат как входы, так и выходы, транзакция генерации создает новые Биткойны из самого протокола.
Остальная часть данных транзакции блока включает в себя адреса отправителей и получателей, количества BTC в каждой сделке, подписи приватного ключа, разрешающие отправку BTC, а также временные метки, которые криптографически подтверждают точное время совершения каждой транзакции.
Как упоминалось ранее, размер блока Биткойнов исторически ограничивался 1 МБ данных. Однако сеть Биткойн также поддерживает функцию под названием «Segregated Witness» (SegWit).
Это позволяет разделять и компилировать данные подписи транзакции эффективным способом - сохраняя размер блока в один МБ, одновременно увеличивая пространство блока для данных транзакции.
Для каждой отдельной транзакции включены следующие данные:
- Txin_count: указывает общее количество входов транзакции.
- Txins: содержит список всех входных транзакций.
- Txout_count: указывает общее количество выходов транзакции.
- Txouts: содержит список всех выходных транзакций.
- Script_witities: содержит сериализацию всех данных свидетелей для транзакций SegWit.
- Lock_time: это 4-байтовое поле устанавливает номер блока или временную метку до блокировки транзакции. Обычно он равен нулю, что означает, что транзакция становится действительной сразу после завершения блока.
- Следующие данные транзакции включены только в транзакции SegWit:
- Version (версия): это 4-байтовое поле указывает номер версии используемого протокола Биткойн и обычно содержит значение «1».
- Marker (маркер): если присутствует, то это 1-байтовое поле указывает, что транзакция использует SegWit и содержит значение «0x00». Если транзакция не использует SegWit, это поле содержит значение «null».
- Flag (флаг): если присутствует, то это 1-байтовое поле также указывает, что транзакция использует SegWit и содержит значение «0x01». Если транзакция не использует SegWit, это поле содержит значение «null».
Отправители транслируют данные своих транзакций в сеть, а майнеры, соревнующиеся за создание новых блоков Биткойнов, заинтересованы в добавлении отдельных транзакций в свои блоки из-за включенных комиссий за транзакции.
Будущее производства биткойн-блоков
Реализация технологии блокчейн в Биткойне основана на относительно простой, но элегантной системе чеканки новых блоков и поддержания сетевой безопасности.
Хотя это конкретное исследование анатомии блока специфично для блокчейна Биткойн, многие другие сети PoW используют очень похожую структуру данных блока блокчейна.
Эти сети могут иметь некоторые различия, такие как имеют разные размеры блоков или время блокировки, но их общие системы майнеров, блоков и архитектура блокчейна в целом одинаковы.