Активация функциональных возможностей

Блокчейн-платформа Waves Enterprise поддерживает возможность активации функциональных возможностей блокчейна путем голосования нод - иными словами, механизм софт-форка блокчейна. Активация новых функциональных возможностей - необратимое действие, поскольку блокчейн не поддерживает отката софт-форка.

В голосовании могут участвовать только ноды с ролью miner, поскольку голос ноды сохраняется в созданный ей блок.

Параметры голосования

В блоке features секции node конфигурационного файла каждой ноды предусмотрен блок supported, в который вносятся идентификаторы функциональных возможностей, поддерживаемых нодой:

features {
  supported = [100]
}

Параметры голосования определяются в блоке functionality конфигурационного файла ноды:

  • feature-check-blocks-period - период проведения голосования (в блоках);

  • blocks-for-feature-activation - количество блоков с идентификатором функциональной возможности, необходимых для ее активации.

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

Внимание

Параметры голосования ноды нельзя менять во время работы блокчейна: для полной синхронизации нод они должны быть унифицированы для всей сети.

Процедура голосования

  1. В своем раунде майнига нода голосует за функциональные возможности, включенные в блок features.supported, если они еще не были активированы в блокчейне: идентификаторы возможностей вносятся в поле features блока при его создании. Затем созданные блоки публикуются в блокчейне. Таким образом в течение интервала feature-check-blocks-period происходит голосование всех нод, имеющих роль miner.

  2. По прошествии интервала feature-check-blocks-period производится подсчет голосов - идентификаторов каждой функциональной возможности в созданных блоках.

  3. Если возможность, вынесенная на голосование, набирает количество голосов, большее или равное параметру blocks-for-feature-activation, то она приобретает статус APPROVED (утверждена).

  4. Утвержденная функциональная возможность активируется по прошествии интервала feature-check-blocks-period от текущей высоты блокчейна.

Использование активированных функциональных возможностей

При активации новой функциональной возможности она может использоваться всеми нодами блокчейна, которые ее поддерживают. Если какая-либо нода не поддерживает активированную возможность, происходит отключение этой ноды от блокчейна в момент публикации первой транзакции, задействующей неподдерживаемую функциональную возможность.

При включении новой ноды в блокчейн предусмотрена автоматическая активация возможностей, набравших необходимое число голосов в прошедших периодах голосования. Активация происходит в ходе синхронизации ноды при условии поддержки этих возможностей самой нодой.

Предварительная активация функциональных возможностей

Все функциональные возможности, за которые предумотрена возможность голосования, могут быть активированы принудительно при старте нового блокчейна. Для этого предусмотрен блок pre-activated-features в секции blockchain конфигурационного файла ноды:

pre-activated-features = {
  ...
  101 = 0
  }

После знака равенства напротив каждой функциональной возможности указывается высота, на которой следует активировать ту или иную возможность.

Список идентификаторов функциональных возможностей

Идентификатор

Название

100

Алгоритм консенсуса LPoS

101

Поддержка gRPC смарт-контрактами Docker

119

Оптимизация производительности для алгоритма консенсуса PoA

120

Поддержка спонсорских транзакций

130

Оптимизация скорости работы с историей банов майнера

140

Поддержка атомарных транзакций

160

Поддержка параллельного создания liquid-block и микроблока