Блок

Блок — перманентно записываемые файлы в сети Bitcoin, содержащие информацию о произошедших транзакциях. Блок — это запись части или всех недавних транзакций, которые еще не были записаны в предыдущие блоки. Практически во всех случаях блоки добавляются в конец цепи, которая содержит все транзакции и носит название block chain («блокчейн»). Когда блок добавлен в конец цепи, он не может быть изменен. Каждый блок содержит информацию обо всём, что произошло в предыдущих блоках, перед тем как он был создан.

Строение блока

Поле Описание Размер
Magic no. Значение всегда равно 0xD9B4BEF9 4 байта
Размер блока (blocksize) Число последующих байтов, оставшихся до конца блока 4 байта
Заголовок блока (blockheader) Состоит из 6-ти компонентов 80 байтов
Счётчик транзакций (transaction counter) Положительное целое число VI = VarInt 1-9 байтов
Транзакции (transactions) Список транзакций Множество транзакций

Что такое блок?

Каждый блок, помимо остальных компонентов, содержит в своем заголовке запись о нескольких или всех последних транзакциях и запись о блоке, который шел непосредственно перед текущим. Для создания нового блока майнеру необходимо решить на своём оборудовании задачу, которую выдает сеть. У каждого блока — свое уникальное решение, которое так же записывается в заголовок блока. Эта задача сложна для решения и занимает большое количество времени, но как только один из пользователей (майнеров) решает задачу, остальная сеть очень быстро подтверждает, что решение верно. Существует несколько решений для каждого блока – достаточно найти хотя бы одно из них.

Так как за нахождение блока выдается награда в 12.5 BTC, блок так же содержит Bitcoin-адрес, на который отправлена награда. Запись об этой транзакции называется – generation transaction, т.е. транзакция создания Bitcoin, в списке транзакций блока она всегда находится на 1м месте. Bitcoin транзакции транслируются на всю сеть отправителем – узлы собирают информацию о них и, руководствуясь определенными условиями, включают их в найденный блок.

Сложность

Сложность задачи регулируется сетью Bitcoin таким образом, чтобы, в среднем, находилось 6 блоков в час (1 блок в 10 минут). Каждые 2016 блоков (примерно каждые 2 недели) в сети меняется сложность – каждый Bitcoin клиент сравнивает, насколько быстрее (медленнее) находились блоки по сравнению со стандартными значениями и, на основании этих данных, происходит регуляция сложности в большую (меньшую) сторону.

Форк

Так как каждый блок имеет в своем заголовке отсылку к предыдущему, можно сказать, что они образуют цепь. Существует вероятность, что эта цепь может разделиться, например, если 2 майнера найдут решение для нового блока в одно и то же время. Bitcoin сеть настроена таким образом, что бы решать подобные разветвления цепи в кратчайшие сроки, оставляя лишь одну ветку. Вознаграждение за блок, который был заброшен, не начисляется.

Bitcoin-клиент воспринимает верной самую длинную цепь блоков. «Длина» всей цепи блоков рассчитывается как сумма сложностей всех блоков в этой цепи, а не как сумма количества блоков. Подобный способ расчета не позволяет кому-либо сделать «главной» цепь с большим количеством блоков маленькой сложности, что позволяет избежать подделки транзакций.

См. также

Ссылки