Книга: Биткоин для всех. Популярно о первой распределенной одноранговой денежной системе
Назад: Блокчейн
Дальше: Майнинг

Блок

Базовой составляющей блокчейна является блок – единичная порция связанных в цепочку данных (информации).

Как мы уже знаем, блокчейн Биткоина – это некий бухгалтерский реестр или книга (ledger), в которой записаны абсолютно все транзакции, совершенные с монетами биткоина.

И если блокчейн – это бухгалтерская книга, то отдельные страницы этой книги – это и есть блоки блокчейна, в которых записываются финансовые транзакции, связанные между собой посредством хэшей так, что в заголовке каждого последующего блока хранится хэш-код предыдущего.

В этой громадной бухгалтерской книге невозможно ни удалить страницу (блок), ни изменить её содержание, поскольку сразу же изменится содержание заголовков всех последующих страниц (блоков) и программное обеспечение любого участника распределенной сети Биткоина, у которого хранится копия этой книги-блокчейна, сразу же заметит попытку подмены. Собственно, сама сеть Биткоина это заметит автоматически и отвергнет попытки внести все изменения в блокчейн.

.

Примечание: На самом деле речь идет не о всей сети Биткоина, а о большинстве узлов (нод) этой сети. Подробнее см. в главе «Захват управления блокчейном („атака 51%“)».

Таким образом, все блоки, записанные в блокчейн, изменить уже невозможно! Вообще, любое редактирование записанной в блокчейн информации (транзакций) запрещено. Можно только дописывать новые блоки.

Это важное свойство блокчейна, как распределенного реестра финансовых транзакций. Как невозможно исправить записи или удалить пронумерованные страницы в прошитой и скрепленной печатью бухгалтерской книге, так и невозможно это сделать в блокчейне.

При этом блокчейн гораздо надежней любой бухгалтерской книги или любого банковского реестра операций, поскольку копии блокчейна хранятся на множестве компьютеров (серверов) в распределенной одноранговой сети.



А теперь вернемся к блокам блокчейна Биткоина.

Каждый блок состоит из заголовка (Head), в котором хранится служебная информация, и полезной информации (Payload) – собственно записи транзакций.



Блоки в блокчейне и их связь между собой





В заголовке блока содержится следующая информация:

 

– версия блока;

– дата и время создания блока;

– хэш-код заголовка блока;

– хэш-код предыдущего блока;

– хэш-код всех транзакций в блоке;

– специальные параметры nonce и bits, которые записываются при майнинге (подробнее об этом я расскажу в главе «Майнинг»).

 

Для понимания нам важны хэши в заголовке.





Сам хэш-код заголовка блока – это и есть то, что связывает предыдущий блок с последующим в цепочке блокчейна. Он записывается как хэш-код предыдущего блока в заголовок последующего.

Также в заголовке хранится хэш-код транзакций текущего блока. Он подсчитывается с использованием алгоритма, известного, как дерево Мёркла (Merkle tree) или бинарное дерево хэшей.





Дерево Мёркла





Работает это так:

 

1. Сначала считаются хэши всех транзакций в блоке (нижний уровень на схеме).

 

 

2. Потом считаются хэши от суммы хэшей пар транзакций.

 

 

3. Далее считаются хэши от суммы получившихся пар хэшей и далее по такой же схеме, пока не получится один единственный хэш-код – он и будет хэшем транзакций в блоке.

 

Тут следует учесть, что поскольку дерево бинарное (подсчет идет парами), то на каждом шаге должно быть четное число элементов. Поэтому если, на каком-то этапе получается нечетное количество хэшей, то последний просто дублируется для получения пары.

Именно заголовки позволяют отслеживать целостность содержимого самих блоков.





Теперь перейдем к собственно содержимому (Payload) блока. Как уже говорилось ранее, в блокчейн Биткоина записываются транзакции. Собственно, в общем виде, сама транзакция имеет вид:

 

С <адрес 1> отправить <N> биткоинов на <адрес 2>

 

В действительности транзакция, записанная в блок блокчейна, сложнее, поскольку протокол Биткоина оперирует такими понятиями, как Входы (Inputs или In) и Выходы (Outputs или Out).





Входы (In) – это поступление на биткоин-адрес, а Выходы (Out) – это суммы, которые переводятся на другие биткоин-адреса.





Поэтому в Биткоине новая транзакция через Входы (один или несколько) ссылается на Выходы (один или несколько) предыдущих транзакций и формирует Выходы (также один или несколько) для использования в последующих транзакциях. Если после пополнения биткоин-адреса переводов с него не было, Выход транзакции считается непотраченным (т. н. UTXO – unspent transaction output).





Новая транзакция C ссылается на две входящие транзакции – A и B. В результате на входе у транзакции получается 0.008 BTC (0.005+0.003), которые потом разделяются на два выхода – на первый адрес отправляется 0.003 BTC, а на второй 0.004 BTC. Остаток (0.001 BTC) – комиссия майнеру.





Собственно структура записи транзакций в блокчейне Биткоина содержит:

 

– количество используемых Входов;

– хэш-код и индекс каждого Входа, а также служебную информацию;

– количество используемых Выходов;

– суммы Выходов, а также служебную информацию;

– метку времени транзакции.

 

Эта, на первый взгляд, сложная конструкция, на самом деле, показывает реальное движение денег между биткоин-адресами и дает возможность достаточно быстро подсчитать баланс любого биткоин-адреса на основании непотраченных Выходов (UTXO) транзакций с ним.





Возможность указать сразу несколько Выходов в транзакции – это очень важная вещь, потому что транзакцию (точнее – ее Выход) можно использовать как Вход только один раз и только целиком.

Например, если имеется входящая транзакция (Вход) на 1 биткоин (BTC), а нужно перевести куда-то 0,8 BTC, то создается транзакция с одним Входом и двумя Выходами: на 0,8 BTC – собственно перевод и на 0,2 BTC – возврат на биткоин-адрес отправителя.





Еще важный момент – это т.н. комиссия за транзакцию (transaction fee), которую получают майнеры – люди, компьютерное оборудование которых записывает новые блоки транзакций в блокчейн.

В транзакции, как правило, сумма Выходов меньше суммы Входов, а получившаяся разница отправляется на адрес майнера, записавшего блок с этой транзакцией в блокчейн. Это и есть его вознаграждение (помимо платы за создание нового блока или собственно майнинг).

Назад: Блокчейн
Дальше: Майнинг