# Протокол активации
# Фичи
Новая версия программного обеспечения Waves содержит новые фичи (features), которые должны быть активированы многими нодами одновременно. Раньше функции активировались по временным отметкам, и это ставило владельцев нод в жесткие рамки по срокам проведения обновления.Неспособность обновить ноду вовремя приводила к непреднамеренным форкам. Протокол активации дает сообществу Waves возможность применять новые фичи в своем темпе или совсем не применять некоторые из них.
# Идентификация фич
Каждая новая фича имеет уникальный идентификатор — порядковый номер. Список новых фич с номерами обычно представлен в новом релизе.
Новые фичи поставляются с новыми версиями программного обеспечения ноды. До активации новых фич разные версии могут работать одинаково. После активации фич сеть делится на две части: ноды, которые поддерживают эту функцию, и ноды, которые этого не делают.
# Статусы фич в блокчейне
Статус фичи хранится в блокчейне. Первоначальный статус фичи — Voting
, которое затем может измениться на Approved
— это означает, что фича получила необходимое количество голосов от генераторов блоков. По истечении определенного периода (количества блоков) фича в статусе Approved
получает статус Activated
. С этого момента (блока) ноды, которые поддерживают эту фичу, начинают работать по-новому.
# Голосование
Голосование осуществляется нодами, которые генерируют блоки. Если генератор блоков поддерживает фичу и хочет проголосовать за нее, он должен указать номер фичи в списке поддерживаемых фич в разделе features
файла конфигурации ноды. После этого каждый блок, сгенерированный этой нодой, будет содержать номера поддерживаемых фич. Подробнее о разделе features
в файле конфигурации ноды см. в подразделе Настройки фич статьи Конфигурация ноды.
Каждые 10 000 блоков на Mainnet, в диапазоне высоты с N × 10 000 + 1
по (N + 1) × 10 000
включительно, нода суммирует количество блоков с поддержкой фичи. Если фича поддерживается не менее чем в 80% блоков в этом диапазоне, она становится утвержденной. В противном случае голосование продолжается и может занять другой период голосования или более.
⚠️ См. условия голосования на Testnet и Stagenet.
Если нода видит, что новая фича была утверждена, но нода не поддерживает ее, она зарегистрирует предупреждающее сообщение о предстоящей активации неподдерживаемой функции.
# Активация
Прежде чем утвержденная фича будет активирована, должны быть сгенерированы еще 10 000 блоков. Этот период предназначен для обновления нод до новой версии. Таким образом, активация происходит на высоте (N + 2) × 10 000
. Валидация транзакций в этом блоке выполняется уже с учетом того, что фича активирована.
Если была активирована новая фича, но нода не была обновлена для ее поддержки, нода автоматически отключится (поведение по умолчанию) и зарегистрирует ошибку об активации неподдерживаемой фичи.
# Пример
Допустим, в версии 1.0.0 была введена новая фича № 123.
Генерирующий пул SuperMiners
с общей долей владения 40% поддерживает фичу. Администратор SuperMiners
обновляет ноду с версии 0.9.9 до 1.0.0 и добавляет 123
в список поддерживаемых фич в файле конфигурации. Нода SuperMiners
начинает добавлять номер фичи 123
в каждый сгенерированный блок, начиная с высоты 1228765. Другие майнеры не поддержали фичу, и только некоторые из них обновили ноды до версии 1.0.0.
На блоке номер 1230000 ноды посчитали, что только 50% блоков поддерживают фичу 123
. Таким образом, статус фичи остается неизменным, голосование за этот период не увенчалось успехом и, следовательно, продолжается.
В течение следующих 10 000 блоков SuperMiners
убедили некоторых майнеров поменьше поддержать эту фичу. На блоке 1240000 оказывается, что функция поддерживается в 9102 из последних 10 000 блоков, то есть в 91%. Таким образом, фича становится утвержденной. В этот момент ноды версии 0.9.9 и более ранних предупреждают своих владельцев об утверждении неподдерживаемой фичи.
На момент генерации 1250000 блока фича 123
будет активирована и ее начнут использовать ноды версии 1.0.0 и выше.
Ноды более ранних версий перестанут работать.