Базовой составляющей блокчейна является блок — единичная порция связанных в цепочку данных (информации).
Как мы уже знаем, блокчейн Биткоина — это некая бухгалтерская книга (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) — комиссия майнеру.
Собственно структура записи транзакций в блокчейне Биткоина содержит:
- количество используемых Входов;
- хэш-код и индекс каждого Входа, а также служебная информация;
- количество используемых Выходов;
- суммы Выходов, а также служебная информация;
- метка времени транзакции.
Эта, на первый взгляд сложная конструкция, на самом деле показывает реальное движение денег между биткоин-адресами и дает возможность достаточно быстро подсчитать баланс любого адреса на основании его Входов и Выходов.
Возможность указать сразу несколько Выходов в транзакции — это очень важная вещь, потому что транзакцию (точнее — ее Выход) можно использовать как Вход только один раз и только целиком.
Например, если имеется входящая транзакция (Вход) на 1 биткоин (BTC), а нужно перевести куда-то 0,8 BTC, то создается транзакция с одним Входом и двумя Выходами: на 0,8 BTC — собственно перевод и на 0,2 BTC — возврат на биткоин-адрес отправителя.
Еще важный момент — это т.н. комиссия за транзакцию (transaction fee), которую получают майнеры — люди, которые записывают новые блоки транзакций в блокчейн.
В транзакции, как правило, сумма Выходов меньше суммы Входов, а получившаяся разница отправляется на адрес майнера, записавшего блок с этой транзакцией в блокчейн. Это и есть его вознаграждение (помимо платы за создание нового блока или собственно майнинг).
Как происходит запись нового блока в блокчейн, я опишу в статье «Биткоин за 5 минут: Майнинг».
Подписывайтесь и читайте!
Предыдущие статьи по теме «Биткоин за 5 минут»:
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
gidlark, kukusru, vika-teplo, gradovskih, sergiusduke
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
@uanix Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество полученных голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@uanix Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
Спасибо за интересный цикл. Было бы неплохо хотя бы вкратце описать отличие блокчейна биткоина от блокчейна на Graphen'е (BitShares, Steem, Голос).