BIP34, BIP66 и BIP65 должны были применяться для блоков с уникальной высотой. Почему разные источники заявляют о разной высоте блока для принудительного исполнения?

Несогласованный консенсус/активация BIP

BIP34

Активированная высота блока 227 835 ( ссылка на BitMEX )

Активированная высота блока 227 930 ( справочник разработчика биткойнов )

Активированная высота блока 227 931 ( ссылка на Github )

BIP66

Активированная высота блока 363 724 ( предыдущий вопрос )

Активированная высота блока 363 725 ( ссылка на Github )

Активированная высота блока 363 731 ( ссылка на BitMEX )

BIP65

Активированная высота блока 388 380 ( справка BitMEX )

Активированная высота блока 388 381 ( ссылка на Github )

Запутанная документация

BIP34 говорит, что он активируется, когда 950 из 1000 блоков сигнализируют о версии 2. Неясно, включает ли это текущий блок или относится к предыдущим блокам.

BIP66 говорит, что он активируется, когда 950 из предыдущих 1000 блоков сигнализируют о версии 3. Однако в примечаниях клиента говорится, что 951 из предыдущих 1001 блоков. Затем BIP66 говорит, что активируется с использованием протокола BIP34. Теперь у нас есть три возможных метода. Они не совпадают.

Любые советы о том, что здесь происходит?

Ответы (1)

Я начну с объяснения запутанной документации.

BIP34 говорит, что он активируется, когда 950 из 1000 блоков сигнализируют о версии 2. Неясно, включает ли это текущий блок или относится к предыдущим блокам.

Относится к предыдущим блокам. Чтобы определить, активны ли правила для блока на высоте n, мы проверяем, соответствуют ли 950 блоков от n-1001сигналу n-1версии 2 или выше.

BIP66 говорит, что он активируется, когда 950 из предыдущих 1000 блоков сигнализируют о версии 3. Однако в примечаниях клиента говорится, что 951 из предыдущих 1001 блоков. Затем BIP66 говорит, что активируется с использованием протокола BIP34. Теперь у нас есть три возможных метода. Они не совпадают.

Есть только два возможных метода, и они на самом деле одно и то же. 950 из предыдущего блока 1000 совпадает с методом BIP 34. И это фактически то же самое, что и 951 из предыдущего 1001, если рассматривать немного с другой точки зрения. В любом случае, BIP 66 использует тот же механизм, что и BIP 34. В частности, они используют функцию IsSuperMajority, чтобы определить, активны ли они. Таким образом, оба используют один и тот же механизм. Проблема в том, как мы описываем этот механизм.

Формулировка «950 из предыдущих 1000 блоков», используемая в BIP, описана ранее. Он определяет, применяются ли правила для блока, nпросматривая 1000 блоков, которые ему предшествуют. Так что здесь nне входит ни в счет, ни в последовательность.

Формулировка «951/1001» включает блок n. Он просматривает блоки от n-1001до блока n(включительно) и проверяет, имеют ли 951 из этих блоков правильный номер версии. Эти две формулировки идентичны, потому что 1001 включает блок активации, а 1000 — нет.

Один из способов думать о 950/1000: после просмотра последовательности из 1000 блоков, где 950 блоков сигнализируют о новой версии, следующий блок, который будет добыт, должен следовать новым правилам. Новые правила вот-вот вступят в силу.

Один из способов представить 951/1001: после просмотра последовательности из 1001 блока, где 951 блок сигнализирует о новой версии, 1001-й блок в этой последовательности уже применил новые правила, и их применение уже началось.

В основном люди не умеют описывать вещи словами. Все становится намного яснее, когда вы смотрите на код.


Теперь о расхождениях. Я написал скрипт на Python, который выполняет проверку IsSuperMajority для проверки этих чисел.

БИП 34

Я не уверен, откуда у BitMex такая высота блока. Проверка этой высоты, а также до и после нее не приводит к активации. Поэтому я считаю, что это просто неправильно.

Теперь для 277930 против 277931 это вопрос интерпретации. Как я говорил ранее с 950/100 по сравнению с 951/1001, это зависит от инклюзивности и точки зрения. На высоте 277930 была найдена последовательность из 1000 блоков, где 950 имели блок версии 2. Таким образом, это означает, что на высоте 277930 правила не применялись для этого блока, но применялись для следующего, то есть 277931. Bitcoin Core использует 277931. потому что это первый блок, для которого применяются правила BIP 34, поэтому это значение находится в исходном коде.

БИП 66

Расхождение 363724 и 363725 — это то же самое, что и 277930 и 277931 в BIP 34.

Число BitMex немного более запутанно. Единственный способ, которым это имеет смысл, — это если они смотрят на немного сложную активацию BIP 66. Из-за того, что майнеры шпионили за майнингом, при активации BIP 66 произошел непреднамеренный форк цепи. Блок 363725 был первым блоком, в котором должны были применяться новые правила. Однако майнер, который не обновился, нашел блок 363725. Поскольку он не был обновлен, этот блок был недействителен по новым правилам, и большая часть сети отклонила его. Но многие майнеры не полностью проверили этот блок и майнили поверх него. Оказалось, что это значительная часть хешрейта, и в итоге они создали форк длиной 6 блоков, прежде чем действующая основная цепь догнала и обогнала их. Это произошло с блоком 363731. Можно сказать, что именно тогда активировался BIP 66.

Но это не конец той истории. На следующий день из-за той же проблемы произошел форк из 3 блоков. Таким образом, вы также можете сказать, что BIP 66 активировался на день позже.

В любом случае, BIP 66 начал применяться с блока 363725, который стал первым блоком в соответствии с новыми правилами.

БИП 65

Расхождение 388380 и 388381 — это то же самое, что и 277930 и 277931 в BIP 34.

Я не понимаю вашего аргумента относительно активации BIP 66. Было два цепных наконечника, которые вымерли из-за несоблюдения активированных правил. Они не являются частью лучшей цепи. Как это меняет то, что правила применялись, начиная с блока 363 725?
Я больше пытался найти что-то, что имело бы смысл для их количества, но я согласен, что это не имеет особого смысла.
Это был превосходный ответ. Спасибо. Могу я процитировать вас в своем исследовании?