Полная история консенсусных форков биткоина: обновление за 2022 год

По просьбам наших читателей представляем обновленную версию статьи «Полная история консенсусных форков биткоина», опубликованной в декабре 2017 года. Обновленный список теперь включает инцидент безопасности 2018 года и активацию Taproot в 2021 году.

(Источник: gryb25)

Терминология

Термин Определение
Разделение блокчейна (Chainsplit)

Разделение блокчейна, в результате которого образуются две отдельные сети (блокчейна) с общей основой. Разделение блокчейна может быть вызвано как хардфорком, так и софтфорком или ни тем, ни другим.

Изменение правил консенсуса

 Хардфорк

Смягчение правил консенсуса в отношении действительности блоков, в результате которого некоторые блоки, ранее считавшиеся недействительными, считаются действительными.

Существующие в сети узлы должны установить обновление, чтобы остаться в новом блокчейне с хардфорком.

 Софтфорк

Ужесточение правил консенсуса в отношении действительности блоков, в результате которого некоторые блоки, ранее считавшиеся действительными, считаются недействительными.

Существующим в сети узлам необязательно установить обновление, чтобы остаться в новом блокчейне с софтфорком.

Примечание. Принято считать, что эти термины появились в апреле 2012 года и были официально приняты в BIP99 и BIP123.

Список консенсусных форков биткоина

Дата

Номер блока активации

 

Номер BIP или версия ПО

Описание Тип Результат

28 июля 2010 г.

н/д1 0.3.5 Отключен опкод OP_RETURN, исправлена критическая ошибка, которая позволяла всем желающим тратить любой биткоин. Софтфорк

Во время обновления не было обнаружено никаких проблем.

31 июля 2010 г. н/д1 0.3.6 Отключены опкоды OP_VER и OP_VERIF.3 Софтфорк У некоторых пользователей возникли проблемы с обновлением; узлы, которые невозможно обновить, было рекомендовано отключить.2
Добавлены функции OP_NOP. Хардфорк
1 августа 2010 г. н/д1 0.3.7 Разделены оценки scriptSig и scriptPubKey.  Исправлена критическая ошибка, которая позволяла всем желающим тратить любой биткоин Хардфорк

Нет данных о каких-либо проблемах во время/в результате обновления.

15 августа 2010 г. 74,638 0.3.10 Исправлена ошибка превышения значения выхода после инцидента с тратой биткоинов на $184,5 млрд. 0,5 BTC, которые были вводом в этой транзакции, остаются нерастраченными по сей день. Софтфорк Произошло разделение блокчейна. Примерно через пять часов после этого инцидента было выпущено исправление, клиент 0.3.10. По некоторым данным, 51 блок был сгенерирован в «неправильном блокчейне», прежде чем «правильный» блокчейн вернул себе контроль над алгоритмом PoW.
Отключен опкод OP_CAT, что устранило риск DoS; также отключены 14 других функций. Софтфорк
7 сентября 2010 г. н/д1 0.3.12 Неверный способ добавления ограничения операций на 20 000 подписей. Это неверное ограничение существует до сих пор. Софтфорк

Нет данных о каких-либо проблемах во время/в результате обновления.

12 сентября 2010 г. 79,400 н/д

Добавлено ограничение размера блока на уровне 1 МБ.

Строка «MAX_BLOCK_SIZE = 1000000» добавлена в репозиторий программного обеспечения 15 июля 2010 года, выпущенного в версии 0.3.1 rc1 19 июля 2010 года.

Добавление строки, обеспечивающей соблюдение правила в отношении лимита 1 МБ, произошло 7 сентября 2010 года и было активировано в блоке 79 400. 20 сентября 2010 года Сатоши удалил эту логику активации, но сохранил ограничение размера блока 1 МБ.

Софтфорк

Нет данных о каких-либо проблемах во время/в результате обновления.

15 марта 2012 г. 171,193 BIP30

Запрещены транзакции с одинаковым значением TXID; исключение допускается только в том случае, если более ранняя транзакция была полностью израсходована. В сентябре 2012 года это правило было применено ко всем блокам, кроме 91 842 и 91 880, которые нарушали это правило.

Софтфорк

Это был софтфорк с запуском в определенный день. Нет данных о каких-либо проблемах во время/в результате обновления.

1 апреля 2012 г. 173,805 BIP16 Хэш сценария погашения P2SH (Pay-to-script hash) позволяет отправлять транзакции, используя хэш сценария (адрес, начинающийся с 3) а не хэш открытого ключа (адреса, начинающиеся с 1). Софтфорк Порог активации — 55% по блокам, добытым за семь дней до 1 февраля 2012 года. Майнеры не успели своевременно обновить ПО, поэтому оценка была перенесена на 15 марта.  Пользователи версии 0.6.0 rc1, которые не обновились из-за задержки, активировали софтфорк раньше времени и застряли на блоке 170 060, когда была сгенерирована недействительная, по мнению их узлов, транзакция.    После активации возникли проблемы, поскольку оставшиеся 45% майнеров добывали недействительные блоки в течение нескольких месяцев после активации софтфорка.
24 марта 2013 г.  227,835 BIP34 Введено требование включать уровень (высоту) блока в транзакцию coinbase. Софтфорк 95% порог активации. Софтфорк был успешно развернут.
11 марта 2013 г. 225,430 0.8.0 Это был незапланированный хардфорк, вызванный переходом с Berkeley DB на LevelDB, в результате которого было случайно удалено неизвестное ограничение блокировки базы данных на уровне 10 000 BDB (больших блоков). Это привело к разделению блокчейна 11 марта 2013 года, хотя ПО, вызвавшее ошибку, было выпущено на 20 дней раньше, 20 февраля 2013 г. Это изменение было отменено, когда экономика биткоина и майнеры перешли обратно на правила версии 0.7.2.

Правила консенсуса не изменились

Произошло разделение блокчейна с разрывом как минимум на 24 блока, при этом блокчейн 0.8.0 имел максимальный перевес в 13 блоков. Также произошло успешное двойное расходование выхода. Блокчейн с первоначальными правилами в конечном итоге вернул себе контроль над алгоритмом PoW.

18 марта 2013 г. н/д 0.8.1 Это был временный софтфорк, который вводил новое правило, требующее, чтобы входы в блоке ссылались не более чем на 4500 TXID. Это более строгое правило, чем ограничение на блокировку на уровне 10 000 BDB. Правила перестало действовать 15 мая 2013 года, в запланированный день хардфорка. Софтфорк

Нет данных о каких-либо проблемах во время/в результате обновления.

15 мая 2013 г. или 16 августа 2013 г.

252,451 или раньше

BIP50 В августе 2013 года мог быть создан блок, нарушающий первоначальное правило об ограничении на уровне 10 000 BDB, которое было смягчено 15 мая 2013 года. Хардфорк

Нет данных о каких-либо проблемах во время/в результате обновления.

4 июля 2015 г.

 363,731 BIP66

В результате обязательного обновления подписи в кодировке DER биткоин перестал зависеть от синтаксического анализа подписи OpenSSL. 

Софтфорк 95% порог активации за период добычи 1000 блоков. Произошло разделение блокчейна, продлившееся шесть блоков, так как некоторые майнеры сигнализировали о поддержке BIP66, но не обновили ПО и занимались шпионским майнингом. Блокчейн с новыми правилами софтфорка в итоге победил.
14 декабря  2015 г.  388,380 BIP65 Добавлена функция Check Lock Time Verify, которая позволяет резервировать (блокировать) средства до определенного времени в будущем. Это первая новая функция биткоина. Софтфорк

Успешное развертывание с порогом активации  95%.

4 июля 2016 г.

 419,328 BIP68
BIP112
BIP113

Добавлена возможность запретить выход транзакции в течение некоторого времени после ее проведения.

Добавлена функция CheckSequenceVerify.

Добавлен показатель Median Time Past (MTP) (среднее время добычи последних 11 блоков), который устраняет стимул для майнера использовать временную метку будущего блока для получения большей комиссию за транзакцию.

Софтфорк

Успешное развертывание с 95% сигнализированием versionbits.

23 июля  2017 г.   477,800 BIP91

Этот временный софтфорк делает обязательной сигнализацию о поддержке обновления SegWit. 

Софтфорк

Софтфорк успешно активирован, порог активации — 80% майнеров за период добычи 336 блоков, хотя лишь незначительное меньшинство пользователей применяли правила BIP91, срок действия которых с тех пор истек.  Поэтому риск разделения блокчейна в этот период был повышенным.

01 августа 2017 г.  478,479 BIP148

Этот временный софтфорк делает обязательной сигнализацию о поддержке обновления SegWit в течение 2 недель после 1 августа.

Софтфорк

Софтфорк с запуском в определенный день был активирован без проблем, хотя лишь меньшинство пользователей применяли правила BIP148, которые с тех пор перестали применяться. Поэтому риск разделения блокчейна в этот период был повышенным.

24 августа 2017 г.  481,824 BIP141
BIP143
BIP147
Обновление Segregated-Witness (SegWit). Софтфорк

Развертывание с 95% сигнализированием versionbits.

14 сентября 2017 г. Н/д 0.15.0 Случайно добавлена критическая ошибка инфляции, которая была исправлена больше чем год спустя, 17 сентября 2018 года.

Случайный клиент хардфорка

Не было создано ни одного блока с использованием ошибки, поэтому можно сказать, что хардфорк в сети биткоина не состоялся.
14 ноября 2021 г. 709,632  BIP341

В обновлении Taproot реализованы такие идеи, как подписи Шнорра (BIP340) и синтаксис MAST (BIP114BIP117)

Софтфорк Этот софтфорк был активирован с использованием концепции «ускоренного тестирования» (Speedy Trial), предложенной Расселом О’Коннором для разрешения споров о лучшей методологии активации. Был успешно использован 90% порог активации в течение фиксированного периода добычи 2 016 блоков. Софтфорк был закреплен 12 июня 2021 года на уровне блока 687 283.
Год 2262  13,440,000 BIP42 Исправлена ошибка, касающаяся ограничения количества ВТС 21 млн монет.  Программное обеспечение было обновлено для исправления этой ошибки в апреле 2014 г., но новое правило будет применяться только с XXIII века. Софтфорк

Софтфорк еще не применяется. 

(Источники: BitMEX Research, GitHub, блокчейн биткоина)

Примечания

  1. Если не считать правила ограничения размера блока в 1 МБ, до софтфорка BIP16 2012 года не существовало методологии активации, поэтому если форк прошел гладко, без разделения блокчейна, то конкретный уровень блока или дата, когда произошел консенсусный форк, не всегда известны.
  2. «Если вы не можете сразу обновиться до версии 0.3.6, лучше отключите свой биткоин-узел, пока не сделаете это», — Сатоши Накамото 
  3. До удаления OP_VER каждое обновление ПО потенциально могло считаться недетерминированным хардфорком; такие обновления не включены в этот список. Если определение хардфорка  включает такое обновление, такое определение слишком педантично.
  4. В таблице выше не используются единообразные определения, потому что в каждом случае может быть более уместным другое определение даты возникновения хардфорка, в зависимости от обстоятельств.
  5. Существует мнение, что изменения в протоколе P2P также можно считать хардфорками, если в результате таких изменений предыдущие версии программного обеспечения стали непригодными для использования, т.к. больше не могут  подключаться к сети. Но, строго говоря, они не отменяют правила действительности блоков; да и старые узлы можно синхронизировать, настроив серию промежуточных версий программного обеспечения. Эти изменения не включены в  приведенный выше список.
  6. Некоторые эксперты считают обновление BIP90 хардфорком, но поскольку оно лишь смягчило правила, связанные с активацией софтфорков, которые произошли в прошлом, то оно лишено многих характеристик или рисков, обычно связанных с консенсусными форками. Используя ту же логику, введение схемы контрольных точек блоков можно также отнести к софтфоркам. 
  7. В июле 2010 года правило выбора цепочки было изменено с целью перехода от количества блоков к количеству выполненной работы. Формально это не является изменением правил определения действительности блоков, но все же сопряжено с некоторыми рисками, связанными с изменением правил консенсуса.

CC by 4.0