Консенсус и валидаторы

NeutronX использует CometBFT - BFT-консенсус с мгновенной финальностью. Блок окончателен, как только за него проголосовали валидаторы с более чем 2/3 стейка. Откатов и форков после этого нет.

Как принимается блок

  1. Предложение. Пропозер предлагает блок. Пропозеры сменяются по очереди, чаще выпадают валидаторы с большим стейком.
  2. Prevote. Валидаторы проверяют блок и голосуют за него.
  3. Precommit. Когда набирается более 2/3 стейка, валидаторы голосуют второй раз и прикладывают к голосу цены оракула (vote extension).
  4. Commit. После более 2/3 precommit блок окончателен.

Если пропозер не уложился в таймаут, начинается новый раунд с другим пропозером.

Когда что-то идёт не так

СитуацияЧто происходит
Более 2/3 стейка онлайнБлоки производятся в обычном темпе, ~0.84 с
Более 1/3 стейка офлайнСеть останавливается и ждёт. Ничего не теряется: после возвращения валидаторов производство продолжается с того же блока
Попытка создать конфликтующий блокВозможна, только если не меньше 1/3 стейка подпишет двойные голоса. Такие голоса доказуемы и наказываются

Валидаторы

  • Вес. Вес голоса равен стейку валидатора: собственному и делегированному. В активном наборе до 60 валидаторов.
  • Обязанности:
    • подписывать блоки;
    • в каждом блоке публиковать цены оракула через vote extensions.
  • Комиссия:
    • от 5% до 20%;
    • менять её можно не больше чем на 1% в сутки.
  • Как делегировать NTX - в разделе «Стейкинг».

Наказания

НарушениеНаказание
Двойная подписьSlash 5% стейка и бессрочное исключение из набора
Простой: подписано меньше 5% из последних 10 000 блоковSlash 1% стейка, jail на 10 минут
Цена оракула отклонилась от медианы больше чем на 5%Slash 0.01% стейка, не чаще раза за блок. 3 нарушения за 1 000 блоков - jail, если в наборе не меньше 5 валидаторов

Slash уменьшает весь стейк валидатора, включая делегированный. Валидатор в jail не подписывает блоки и не получает награды, пока не отправит MsgUnjail после окончания срока.