Биткоин-блоки. Транзакция Coinbase
До этого мы рассматривали то, как отдельные транзакции собираются и используются. Но, как мы помним из предыдущей главы, транзакции группируются в блоки. Почему так? В целом это просто вопрос оптимизации. Если бы майнерам приходилось договариваться по каждой отдельной транзакции, скорость приёма системой новых транзакций была бы чудовищно низкой. Кроме того, хэш-цепочка из блоков гораздо короче, чем такая цепочка из транзакций, ведь в один блок может помещаться сразу много транзакций.
Это делает более эффективной систему верификации структуры данных блокчейна. Блокчейн — это разумная комбинация двух основанных на хэше структур данных: первая — это хэш-чейн из блоков, у каждого из которых есть свой заголовок, указатель на данные транзакции, и указатель на предыдущий блок в последовательности, а второй — это поблоковое дерево всех транзакций, включённых в этот блок.
Фактически это дерево Меркла, которое позволяет создать дайджест из всех транзакций блока эффективным образом. Как мы показали в главе 1, для подтверждения присутствия транзакции в заданном блоке нужно указать путь по дереву, чья длина — логарифм количества транзакций блока. В целом же, блок состоит из данных заголовка, за которым следует список транзакций, собранных в древовидную структуру.
Рис. 3.7. Блокчейн биткоина имеет две разных хэш-структуры. Первая — хэш-цепочка, которая связывает разные блоки друг с другом. Другая — внутренняя для каждого блока и является деревом Меркла из транзакций внутри блоков
В заголовке главным образом содержится информация, связанная с майнинговой задачей, о которой кратко шла речь в предыдущей главе, и ещё пойдёт в лекции 5. Вспомним, что хэш заголовка блока должен начинаться с большого количества нулей, чтобы блок был валидным. Заголовок также содержит «данное время», которое майнеры могут менять, отметку времени, а также «кусочки», которые обозначают трудность нахождения этого блока.
Заголовок — единственная вещь, хэшируемая во время майнинга. Для верификации цепочки блоков нам нужно просто смотреть на заголовки. Единственные данные о транзакции, которые туда включаются — это основание дерева транзакций, поле mrkl_root.
Рис. 3.8. Транзакция Coinbase. Она создаёт новые биткоины, не высвобождая предыдущий выход, и не имеет индикации в указателе хэша. В ней есть параметр Coinbase, содержащий произвольные данные. Значение этой транзакции — вознаграждение за блок, а также все комиссии за транзакции, включённые в него
Ещё одна интересная вещь, связанная с блоками - это то, что у них есть специальная транзакция в дереве Меркла, называемая coinbase. Это аналог CreateCoins в скруджкоине. Именно здесь происходит создание новых коинов. В целом она напоминает обычную транзакцию, однако есть несколько отличий: она всегда имеет один вход и один выход, вход не высвобождает предшествующий выход и таким образом имеет нулевой указатель хэша, поскольку это чеканка новых биткоинов, а не расходование старых, и, наконец, стоимость выхода сейчас слегка превышает 25 биткоинов.
Стоимость выхода - это вознаграждение майнеру за блок, состоящее из двух компонентов - плоского вознаграждения, задаваемого системой, которое уменьшается каждые 210 000 блоков (примерно раз в 4 года), и комиссий за транзакции, собранных с каждой транзакции в блоке. И есть упомянутый ранее параметр coinbase, который совершенно произволен - майнеры могут вписать в него что захотят. Известен случай с первым блоком биткоина - в coinbase была вписана статья из лондонской The Times, в которой рассказывалось о том, как лорд-канцлер поручился за банки. Это сочли политическим комментарием в отношении причин создания биткоина.
Также это служит доказательством того, что первый блок был смайнен уже после выхода этой статьи 3 января 2009 года. Один из способов дальнейшего использования параметра coinbase - сигнализирование поддержки майнерами нововведений. Для лучшего понимания форматов блока и транзакции стоит исследовать блокчейн самостоятельно. Существует много сайтов, на которых можно получить доступ к таким данным - например, blockchain.info.
Там можно посмотреть на график транзакций, ознакомиться с тем, какие транзакции высвобождают какие другие транзакции, поискать транзакции со сложными скриптами, и взглянуть на структуру блока и на то, как они ссылаются на другие блоки. Поскольку блокчейн - публично доступная структура данных, разработчики создали множество способов для её графического отображения.
Дата добавления: 2023-05-18; просмотров: 316;