Блок
Блок — перманентно записываемые файлы в сети 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 клиент сравнивает, насколько быстрее (медленнее) находились блоки по сравнению со стандартными значениями и, на основании этих данных, происходит регуляция сложности в большую (меньшую) сторону.
Форк
- Основная статья: Block chain
Так как каждый блок имеет в своем заголовке отсылку к предыдущему, можно сказать, что они образуют цепь. Существует вероятность, что эта цепь может разделиться, например, если 2 майнера найдут решение для нового блока в одно и то же время. Bitcoin сеть настроена таким образом, что бы решать подобные разветвления цепи в кратчайшие сроки, оставляя лишь одну ветку. Вознаграждение за блок, который был заброшен, не начисляется.
Bitcoin-клиент воспринимает верной самую длинную цепь блоков. «Длина» всей цепи блоков рассчитывается как сумма сложностей всех блоков в этой цепи, а не как сумма количества блоков. Подобный способ расчета не позволяет кому-либо сделать «главной» цепь с большим количеством блоков маленькой сложности, что позволяет избежать подделки транзакций.