Несогласованный консенсус/активация 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. Теперь у нас есть три возможных метода. Они не совпадают.
Любые советы о том, что здесь происходит?
Я начну с объяснения запутанной документации.
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 для проверки этих чисел.
Я не уверен, откуда у BitMex такая высота блока. Проверка этой высоты, а также до и после нее не приводит к активации. Поэтому я считаю, что это просто неправильно.
Теперь для 277930 против 277931 это вопрос интерпретации. Как я говорил ранее с 950/100 по сравнению с 951/1001, это зависит от инклюзивности и точки зрения. На высоте 277930 была найдена последовательность из 1000 блоков, где 950 имели блок версии 2. Таким образом, это означает, что на высоте 277930 правила не применялись для этого блока, но применялись для следующего, то есть 277931. Bitcoin Core использует 277931. потому что это первый блок, для которого применяются правила BIP 34, поэтому это значение находится в исходном коде.
Расхождение 363724 и 363725 — это то же самое, что и 277930 и 277931 в BIP 34.
Число BitMex немного более запутанно. Единственный способ, которым это имеет смысл, — это если они смотрят на немного сложную активацию BIP 66. Из-за того, что майнеры шпионили за майнингом, при активации BIP 66 произошел непреднамеренный форк цепи. Блок 363725 был первым блоком, в котором должны были применяться новые правила. Однако майнер, который не обновился, нашел блок 363725. Поскольку он не был обновлен, этот блок был недействителен по новым правилам, и большая часть сети отклонила его. Но многие майнеры не полностью проверили этот блок и майнили поверх него. Оказалось, что это значительная часть хешрейта, и в итоге они создали форк длиной 6 блоков, прежде чем действующая основная цепь догнала и обогнала их. Это произошло с блоком 363731. Можно сказать, что именно тогда активировался BIP 66.
Но это не конец той истории. На следующий день из-за той же проблемы произошел форк из 3 блоков. Таким образом, вы также можете сказать, что BIP 66 активировался на день позже.
В любом случае, BIP 66 начал применяться с блока 363725, который стал первым блоком в соответствии с новыми правилами.
Расхождение 388380 и 388381 — это то же самое, что и 277930 и 277931 в BIP 34.
Марч
Эндрю Чоу
Аман Саггу