Биткоин для «чайников»: Блок
Как мы уже знаем, блокчейн Биткоина — это некая бухгалтерская книга (ledger), в которой записаны абсолютно все транзакции, совершенные с монетами биткоина.
И если блокчейн — это бухгалтерская книга, то отдельные страницы этой книги — это и есть блоки блокчейна, в которых записываются финансовые транзакции и которые связаны между собой посредством хэшей так, что в заголовке каждого последующего блока хранится хэш-код предыдущего.
В этой громадной бухгалтерской книге невозможно ни удалить страницу (блок), ни изменить её содержание, поскольку сразу же изменится содержание заголовков всех последующих страниц (блоков) и любой участник распределенной сети Биткоина, у которого хранится копия этой книги-блокчейна, сразу же заметит попытку подмены. Собственно, сама сеть Биткоина это заметит автоматически и отвергнет попытки внести все изменения в блокчейн.
Таким образом, все блоки, записанные в блокчейн, изменить уже невозможно! Вообще, любое редактирование записанной в блокчейн информации (транзакций) запрещено. Можно только дописывать новые блоки.
Это важное свойство блокчейна, как распределенного реестра финансовых транзакций. Также, как невозможно исправить записи или удалить пронумерованные страницы в прошитой и скрепленной печатью бухгалтерской книге, так и невозможно это сделать в блокчейне.
При этом блокчейн гораздо надежней любой бухгалтерской книги или любого банковского реестра операций, поскольку копии блокчейна хранятся на множестве компьютеров (серверов) в распределенной одноранговой сети.
Но, вернемся к блокам блокчейна Биткоина.
Каждый блок состоит из заголовка (Head), в котором хранится служебная информация, и полезной информации (Payload) — собственно записи транзакций.
В заголовке блока содержится следующая информация:
- версия блока;
- дата и время создания блока;
- хэш-код предыдущего блока;
- хэш-код всех транзакций в блоке;
- специальные параметры, которые записываются при майнинге (подробнее об этом читайте в статье «Биткоин за 5 минут: Майнинг»).
Для понимания нам важны хэши в заголовке.
Сам хэш-код заголовка блока — это и есть то, что связывает предыдущий блок с последующим в цепочке блокчейна. Он записывается как хэш-код предыдущего блока в заголовок последующего.
Также в заголовке хранится хэш-код транзакций текущего блока. Он подсчитывается с использованием алгоритма, известного, как дерево Мёркла (Merkle tree) или бинарное дерево хэшей.
Работает это так:
- Сначала считаются хэши всех транзакций в блоке.
- Потом считаются хэши от суммы хэшей пар транзакций.
- Далее считаются хэши от суммы получившихся пар хэшей и далее по такой же схеме, пока не получится один единственный хэш-код — он и будет хэшем транзакций в блоке.
Тут следует учесть, что поскольку дерево бинарное (подсчет идет парами), то на кажом шаге должно быть четное число элементов. Поэтому если, на каком-то этапе получается нечетное количество хэшей, то последний просто дублируется для получения пары.
Именно заголовки позволяют отслеживать целостность содержимого самих блоков.
Теперь перейдем к собственно содержимому (Payload) блока…
Как уже говорилось ранее, в блокчейн биткоина записываются транзакции. Собственно сама транзакция имеет вид:
С <адрес 1> отправить <N> биткоинов на <адрес 2>
В действительности транзакция, записанная в блок блокчейна, сложнее, поскольку протокол Биткоина оперирует такими понятиями, как Входы (Inputs или In) и Выходы (Outputs или Out).
Входы (In) — это транзакции, пополняющие биткоин-адрес, а Выходы (Out) — это суммы, которые переводятся на другие биткоин-адреса.
Поэтому в Биткоине новая транзакция через Входы (один или несколько) ссылается на Выходы (один или несколько) предыдущих транзакций и формирует Выходы (также один или несколько) для использования в последующих транзакциях.
На схеме новая транзакция C ссылается на две входящие транзакции — A и B. В результате на входе у транзакции получается 0.008 BTC (0.005+0.003), которые потом разделяются на два выхода — на первый адрес отправляется 0.003 BTC, а на второй 0.004 BTC. Остаток (0.001 BTC) — комиссия майнеру.
Собственно структура записи транзакций в блокчейне Биткоина содержит:
- количество используемых Входов;
- хэш-код и индекс каждого Входа, а также служебная информация;
- количество используемых Выходов;
- суммы Выходов, а также служебная информация;
- метка времени транзакции.
Эта, на первый взгляд сложная конструкция, на самом деле показывает реальное движение денег между биткоин-адресами и дает возможность достаточно быстро подсчитать баланс любого адреса на основании его Входов и Выходов.
- Примечание: На самом деле, баланс определяется путем подсчета всех непотраченных Выходов (т.н. UTXO — unspent transaction output) этого адреса.
Возможность указать сразу несколько Выходов в транзакции — это очень важная вещь, потому что транзакцию (точнее — ее Выход) можно использовать как Вход только один раз и только целиком.
Например, если имеется входящая транзакция (Вход) на 1 биткоин (BTC), а нужно перевести куда-то 0,8 BTC, то создается транзакция с одним Входом и двумя Выходами: на 0,8 BTC — собственно перевод и на 0,2 BTC — возврат на биткоин-адрес отправителя.
Еще важный момент — это т.н. комиссия за транзакцию (transaction fee), которую получают майнеры — люди, которые записывают новые блоки транзакций в блокчейн.
Если создадется транзакция, в которой сумма Выходов меньше суммы Входов, то получившаяся разница отправляется на адрес майнера, записавшего блок с этой транзакцией в блокчейн. Это и есть его вознаграждение (помимо платы за создание нового блока или собственно майнинг).
Как происходит запись нового блока в блокчейн, читайте в статье «Биткоин за 5 минут: Майнинг».
Предыдущие статьи по теме «Биткоин за 5 минут»:
Деньги

