Оповещение о неустойчивом разветвлении с помощью поля версии блока

Поскольку неустойчивые разветвления позволяют клиентам без обновлений продолжать работу с механизмом консенсуса, механизм «активации» неустойчивых разветвлений предназначен для распространения среди майнеров оповещения о готовности: большинство майнеров обязательно должно подтвердить свою готовность и согласие на внедрение новых правил консенсуса. Для координации их действий существует механизм оповещения, позволяющий продемонстрировать поддержку изменений в правилах консенсуса. Этот механизм был введен вместе с принятием стандарта В1Р-34 в марте 2014 года и заменен при вводе в действие стандарта BIP-9 в июле 2016 года.

Оповещение и активация по стандарту BIP-34

Первая реализация, определенная в стандарте BIP-34, использовала поле версии блока, чтобы позволить майнерам сообщить о готовности принять конкретное изменение в правилах консенсуса. До введения стандарта BIP-34 в поле версии блока записывалось значение 1 по общему соглашению, никоим образом не зависящему отправил консенсуса.

Стандарт BIP-34 определил изменение правила консенсуса, для которого требовалось поле coinbase (входные данные) coinbase-транзакции для размещения высоты блока. До BIP-34 поле coinbase могло содержать произвольные данные по усмотрению майнера. После ввода в действие стандарта BIP-34 корректные (валидные) блоки должны были содержать определенное значение высоты блока в начале записи coinbase и идентифицироваться по номеру версии, большему или равному 2.

Для оповещения об изменениях и активации стандарта BIP-34 майнеры устанавливают номер версии блока 2 вместо 1. Но это не сделало блоки версии 1 сразу же некорректными. После активации стандарта блоки версии 1 должны были стать некорректными, а все блоки версии 2 должны были обязательно содержать высоту блока в поле coinbase для признания их корректными.

Стандарт BIP-34 определил двухэтапный механизм активации, основанный на скользящем окне с размером в 1000 блоков. Майнер должен сообщать о своей готовности к принятию стандарта BIP-34, формируя блоки с явным указанием версии 2. Строго говоря, эти блоки пока еще не обязаны были обеспечивать полную совместимость с новым правилом консенсуса при включении высоты блока в coinbase-транзакцию, так как это новое правило консенсуса еще не было активировано. Активация правил консенсуса выполняется в два этапа:

если 75% (750 из 1000 самых последних блоков) помечены номером версии 2, то блоки версии 2 обязательно должны содержать значение высоты блока в coinbase-транзакции, иначе они будут отброшены как некорректные. Блоки версии 1 продолжают приниматься сетью, но не обязаны содержать значение высоты блока. В этот период совместно действуют старые и новые правила консенсуса;

когда 95% (950 из 1000 самых последних блоков) помечены номером версии 2, блоки версии 1 перестают считаться корректными. Блоки версии 2 являются корректными, только если они содержат значение высоты блока в поле coinbase (в соответствии с предыдущим пороговым значением). С этого времени все блоки должны обеспечивать полную совместимость с новыми правилами консенсуса и все корректные блоки непременно должны содержать значение высоты блока в coinbase-транзакции.

После успешного оповещения и активации по правилам стандарта BIP-34 этот механизм использовался еще два раза для активации неустойчивых разветвлений:

стандарт BIP-66 Strict DER Encoding of Signatures был активирован по образу и подобию стандарта BIP-34 с оповещением о версии блока 3 и объявлением блоков версии 2 некорректными;

стандарт BIP-65 CHECKL0CKTIMEVERIFY был активирован по образу и подобию стандарта BIP-34 с оповещением о версии блока 4 и объявлением блоков версии 3 некорректными.

После активации стандарта BIP-65 механизм оповещения и активации BIP- 34 был отменен и заменен механизмом оповещения по стандарту BIP-9.