Глоссарий / Майнинг и консенсус
Блок версии 2
Другие названия: Блок V2.
- Что такое блок версии 2?
- Блок версии 2 представляет собой блок, в заголовке которого поле версии равно 2, то есть обновление, после которого BIP34 потребовал указывать высоту самого блока первым элементом в скрипте coinbase.
Определено в BIP-34.
Раньше номера версий блоков означали нечто простое: 1 был исходным форматом, 2 добавил правило, и каждый новый номер делал более старый формат непригодным для новых блоков. Версия 2 появилась вместе с BIP34, и Bitcoin Core обеспечивает ее соблюдение начиная с блока 227 931. Для покупателя от этого ничего не зависит, но каждый обозреватель блоков показывает версию, и она объясняет, почему скрипты coinbase начинаются с числа.
Как это работает
Статус: поле версии перестало быть счетчиком в 2016 году, когда BIP9 переопределил его старшие биты как битовое поле сигнализации, поэтому современный блок показывает значение вроде 0x20000000, а не 2, 3 или 4. Правило BIP34, введенное версией 2, постоянно и по-прежнему проверяется на каждом блоке.
Блоки версии 2 существуют, чтобы решить проблему дублирования идентичности. У транзакции coinbase нет входов, которые делали бы ее уникальной, поэтому два майнера, случайно использовавшие один и тот же выходной скрипт и одни и те же произвольные байты coinbase, могли создать побайтово идентичные транзакции с одинаковым идентификатором транзакции. Это не гипотеза: блоки 91 842 и 91 880 каждый содержали транзакцию coinbase, идентичную одной из более раннего блока, и более поздняя копия перезаписала более раннюю запись в наборе неизрасходованных выходов, уничтожив монеты, которые можно было потратить. BIP30 запретил дубликаты полностью как временную меру, а BIP34 устранил саму возможность.
Механизм невелик. Блок версии 2 должен начинать свой скрипт coinbase с высоты самого блока, записанной как минимально закодированное число скрипта. Поскольку два блока не могут иметь одинаковую высоту, две транзакции coinbase больше никогда не смогут совпасть. Развертывание использовало порог, а не фиксированную дату: как только сверхбольшинство недавних блоков несло версию 2, блоки версии 1 стали недействительными, и сеть прошла эту точку в марте 2013 года.
Тот же сценарий повторился еще дважды. Блоки версии 3 сделали строгое кодирование подписей DER обязательным в блоке 363 725, а блоки версии 4 принесли OP_CHECKLOCKTIMEVERIFY в блоке 388 381. После этого последовательность прекратилась, потому что трактовка поля из 32 бит как счетчика тратила 31 бит, которые BIP9 превратил в параллельные сигналы обновлений.
Где это встречается
Версия отображается на странице блока любого обозревателя и в вызове getblock RPC в полях version и versionHex. Посмотрите на блок 2011 года, и вы увидите 1; посмотрите на блок середины 2013 года, и вы увидите 2; посмотрите на сегодняшний блок, и вы увидите битовое поле.
Высоту по BIP34 заметить легче, чем саму версию. Декодируйте любой недавний скрипт coinbase, и первые байты окажутся высотой, обычно за ней следуют идентифицирующий текст пула и дополнительное место для nonce, по которому перебирает майнинговое оборудование. Обозреватели часто печатают этот хвост как ASCII, и так coinbase блока показывает, какой пул его добыл.
Блок версии 2 vs транзакция версии 2
Блок версии 2 и транзакция версии 2 имеют общий номер и больше ничего. Версия транзакции 2 происходит из BIP68 и включает относительные блокировки по времени, позволяя входу требовать, чтобы его родительский выход имел определенный возраст до того, как его можно потратить. Lightning зависит от нее для тайм-аутов каналов. Версия блока 2 происходит из BIP34 и касается уникальности coinbase. Другой объект, другой BIP, другой год, и никакой связи, кроме совпадения: оба счетчика дошли до 2.