Перейти к содержимому
buybitcoinsmart

Глоссарий / Транзакции и комиссии

Высота блока в поле Coinbase

Что такое высота блока в поле Coinbase?
Высота блока в поле coinbase представляет собой высоту самого блока, записанную в первых байтах поля coinbase; BIP34 требует этого от каждого блока с марта 2013 года.

Определено в BIP-34.

Это самое дешевое решение биткоина для реальной ошибки. До появления правила два блока с идентичными транзакциями coinbase давали идентичные идентификаторы транзакций, что произошло на блоках 91 842 и 91 880 в 2010 году. Запись высоты делает каждую транзакцию coinbase уникальной и позволяет любому прочитать позицию блока из самого блока.

Как это работает

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

Число записывается в порядке little endian и минимальным кодированием, так же как скрипт биткоина кодирует любое целое число. При нынешних высотах оно занимает три байта, поэтому операция push читается как 03, а затем идет высота. Блок 840 000, блок халвинга, поэтому открывает свое поле coinbase последовательностью 03 40 d1 0c: push трех байт, затем 840 000 с его младшим байтом впереди. Три байта охватывают все высоты до 8 388 607, что при десятиминутных блоках наступит более чем через век, и кодирование само расширится до четырех байт, когда этот день наступит.

BIP34 был развернут как мягкий форк, активируемый майнерами (miner-activated soft fork), привязанный к номеру версии блока. Блоки, объявляющие версию 2, учитывались в скользящем окне из 1000: при 750 из последних 1000 блок версии 2 без своей высоты становился недействительным, а при 950 прежний формат версии 1 отклонялся сразу. Последним блоком версии 1, который вообще был принят, стал 227 835 с отметкой времени 24 марта 2013 года, и Bitcoin Core до сих пор жестко прописывает высоту активации, 227 931.

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

Где это видно

Любой обозреватель блоков показывает расшифрованное поле coinbase, и высота стоит в нем первой.

Заметнее всего это в майнинге. Пул собирает собственную транзакцию coinbase из шаблона, который предоставляет его узел, и пул, вставляющий неверную высоту, обычно в гонке с только что пришедшим блоком, создает блок, который каждый узел отбрасывает с ошибкой bad-cb-height. Электричество израсходовано, доказательство работы действительно, а вознаграждение равно нулю.

Это также важно для всех, кто доказывает что-либо о блоке, не имея всей цепочки. Заголовок блока не указывает свою собственную высоту; ее узнают, отсчитывая назад до генезис-блока. Полный блок указывает ее, причем в месте, охваченном корнем Меркла и, следовательно, доказательством работы, поэтому утверждение о высоте, подкрепленное полем coinbase и ветвью Меркла, держится само по себе. Боковые цепочки, сервисы отметок времени и протоколы легких клиентов все опираются на это свойство.

Высота блока в поле Coinbase vs высота блока

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

Не путать с

Часто задаваемые вопросы

Почему блок должен указывать высоту, которую можно было бы просто посчитать?

Потому что подсчет требует всей цепочки, и потому что идентичные транзакции coinbase раньше давали идентичные идентификаторы транзакций. Запись высоты внутри блока делает каждую транзакцию coinbase уникальной и позволяет доказать высоту по одному блоку.

Что происходит, если майнер записывает неверную высоту?

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

Читайте далее

Связанные термины

Еще в разделе «Транзакции и комиссии»

Читать эту страницу на английском