Коллатор

Обратная связь с мемпулом

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

Назначение

В стандартной реализации мемпул применяет состояние мастерчейна только после отдельного подтверждения от менеджера коллации.

  • обновлять конфигурацию консенсуса
  • обновлять наборы валидаторов
  • понимать, до какого якоря блокчейн уже обработан
  • очищать кэш старых якорей

Сигнал в режиме коллации

Во время коллации менеджер коллации обычно передает в мемпул новое состояние мастерчейна сразу после сборки мастер-блока.

В этом сигнале есть:

  • идентификатор мастер-блока и его время цепочки
  • граница обработанных якорей
  • данные консенсуса и текущая конфигурация консенсуса
  • признак перемешивания валидаторов при выборе подмножества
  • предыдущий, текущий и следующий наборы валидаторов

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

Сигнал после продвижения сети

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

Это происходит в двух основных случаях:

  • во время синхронизации, когда менеджер переходит на состояние по уже примененному мастер-блоку
  • после того как менеджер завершил обработку сколлированного мастер-блока и может подтвердить его номер для мемпула

Это особенно важно при изменении конфигурации консенсуса. В таком случае менеджер коллации не отправляет обновление в мемпул сразу после сборки блока, а откладывает его до успешной обработки подтвержденного мастер-блока.

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

Очередь обновлений

В стандартной реализации мемпула обновления состояния сначала попадают во внутреннюю очередь и ждут подтверждения соответствующего мастер-блока.

Если подтвержден номер N, очередь сразу выпускает все накопленные обновления до N включительно. Это защищает мемпул от преждевременного перехода на состояние неподтвержденного мастер-блока и одновременно не теряет промежуточные подтвержденные версии.

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