Глоссарий / Протокол и обновления
Speedy Trial
- Что такое Speedy Trial?
- Speedy Trial представляет собой схему активации, примененную для Taproot: короткое окно сигнализации майнеров с пониженным порогом 90 процентов и вступлением в силу, отложенным до фиксированной более поздней высоты блока.
Определено в BIP-341.
Speedy Trial представляет собой измененную схему развертывания версийных битов BIP-9, записанную в сам BIP-341, а не в отдельный BIP. У майнеров было 109 дней, с 24 апреля по 11 августа 2021 года, чтобы выставить бит 2 в 1815 из 2016 блоков, а вступление в силу было привязано к блоку 709 632. Эта высота вступления в силу была зафиксирована до открытия сигнализации, поэтому держатели знали точный блок, на котором изменятся правила.
Как это работает
Speedy Trial сохраняет метод подсчета BIP-9, меняет два его числа и добавляет один параметр, которого у BIP-9 никогда не было.
BIP-9 подсчитывает сигнализирующие блоки в каждом периоде пересчета из 2016 блоков и переводит развертывание из STARTED в LOCKED_IN, как только в одном периоде их оказывается достаточно. Порог составляет 1916 блоков, 95 процентов периода, а собственный ориентир для окна равен одному году, 31 536 000 секунд после времени начала. И начало, и окончание срока читаются из медианного времени прошлого, медианы отметок времени блока и десяти его предшественников, поэтому часы принадлежат цепи, а не чьим-либо наручным часам.
Развертывание Taproot снизило порог до 1815 блоков, 90 процентов, и дало окну 9 417 600 секунд, от отметки времени эпохи 1619222400 до 1628640000. Добавлен был параметр min_activation_height. При обычном BIP-9 развертывание, зафиксированное в LOCKED_IN, становится ACTIVE на следующей границе пересчета, поэтому фиксация привязывает высоту вступления в силу лишь к 2016 блокам, которые за ней следуют. При Speedy Trial состояние LOCKED_IN повторяется, пока цепь не достигнет указанной высоты, и только тогда переходит в ACTIVE. Высота в основной сети составила 709 632, что равно ровно 352 периодам пересчета и потому является границей периода. Развертывание действительно активировалось на этой высоте.
Весь замысел состоит в разделении. Сигнализация быстро отвечает на один вопрос, а долгий промежуток после нее нужен для того, чтобы все остальные успели обновиться, а не для споров.
Где это видно
Параметры Speedy Trial читаются в поле версии каждого блока, добытого в окне сигнализации 2021 года.
Сигнализирующий блок несет старшие биты 001 плюс собственный бит развертывания, поэтому сигнал Taproot на бите 2 читается как версия 0x20000004. Майнеры, запрашивающие работу, встречают то же развертывание через getblocktemplate, чей ключ "rules" называет уже активные мягкие форки, а ключ "vbavailable" сопоставляет каждому ожидающему свой бит. Имя, которое BIP-341 дает этому развертыванию, а значит и строка, которую читает майнер, является просто "taproot".
Запуск того же развертывания в testnet3 показывает, для чего была нужна задержка. Там использовались те же отметки времени начала и окончания, порог в 1512 блоков при 75 процентах и min_activation_height 0, поэтому ничего не откладывалось сверх собственного промежутка BIP-9 в один период, и развертывание стало активным на высоте 2 011 968. Основная сеть получила дополнительное ожидание; у тестовой сети не было экономики, которую нужно защищать. В signet правила были активны всегда, поэтому испытания там не было.
Speedy Trial vs UASF
Мягкий форк, активированный пользователями, навязывает результат со стороны узлов, и Speedy Trial намеренно отказался от такой власти.
Механизм принуждения записан в BIP-8 как lockinontimeout. Если установить его в true, развертывание получает период MUST_SIGNAL перед окончанием срока, в котором блоки без сигнала становятся недействительными, как только исчерпан допуск периода на несигнализирующие блоки, что гарантирует фиксацию независимо от того, сотрудничают майнеры или нет. BIP-8 рекомендует этот флаг для любого мягкого форка, который, как ожидается, встретит политическую оппозицию со стороны заметной доли майнеров, и в том же документе предупреждает, что узлы, запустившие его, могут в течение длительного времени следовать за цепью с меньшей работой и могут нуждаться в том, чтобы предпочтительно соединяться друг с другом.
В Speedy Trial такого флага не было. Недостижение порога до окончания срока переводило развертывание в FAILED и больше ничего не делало, и на такой компромисс он пошел: никакой гарантии активации, никакого риска разделения цепи и дешевый ответ в любом случае.