# Протокол активации
# Фичи
Новая версия программного обеспечения Waves содержит новые фичи (features), которые должны быть активированы многими нодами одновременно. Раньше функции активировались по временным отметкам, и это ставило владельцев нод в жесткие рамки по срокам проведения обновления. Неспособность обновить ноду вовремя приводила к непреднамеренным форкам. Протокол активации дает сообществу Waves возможность применять новые фичи в своем темпе или совсем не применять некоторые из них.
# Идентификация фич
Каждая новая фича имеет уникальный идентификатор — порядковый номер. Список новых фич с номерами обычно представлен в новом релизе.
Новые фичи поставляются с новыми версиями программного обеспечения ноды. До активации новых фич разные версии могут работать одинаково. После активации фич сеть делится на две части: ноды, которые поддерживают эту функцию, и ноды, которые этого не делают.
# Статусы фич в блокчейне
Статус фичи хранится в блокчейне. Первоначальный статус фичи — Voting
, которое затем может измениться на Approved
— это означает, что фича получила необходимое количество голосов от генераторов блоков. По истечении определенного периода (количества блоков) фича в статусе Approved
получает статус Activated
. С этого момента (блока) ноды, которые поддерживают эту фичу, начинают работать по-новому.
# Голосование
Голосование осуществляется нодами, которые генерируют блоки. Если генератор блоков поддерживает фичу и хочет проголосовать за нее, он должен указать номер фичи в списке поддерживаемых фич в разделе features
файла конфигурации ноды. После этого каждый блок, сгенерированный этой нодой, будет содержать номера поддерживаемых фич. Подробнее о разделе features
в файле конфигурации ноды см. в подразделе Настройки фич статьи Конфигурация ноды.
В Mainnet каждые 10000 блоков нода суммирует количество блоков с поддержкой фичи. Если фича поддерживается в более чем 80% блоков в течение последнего периода голосования, она становится утвержденной. В противном случае голосование продолжается и может занять другой период голосования или более.
Note: См. условия голосования в Stagenet и Testnet.
Каждые 10 000 блоков на Mainnet нода суммирует количество блоков с поддержкой фичи. Если фича поддерживается в более чем 80% блоков в течение последнего периода голосования, она становится утвержденной. В противном случае голосование продолжается и может занять другой период голосования или более.
⚠️ См. [условия голосования](/ru/waves-node/features#активация новых фич) на Testnet и Stagenet.
Если нода видит, что новая фича была утверждена, но нода не поддерживает ее, она зарегистрирует предупреждающее сообщение о предстоящей активации неподдерживаемой функции.
Прежде чем утвержденная фича будет активирована, должны быть сгенерированы еще 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 и выше.
Ноды более ранних версий перестанут работать.