Обратная связь с мемпулом
Менеджер коллации передает в мемпул обновления по мастерчейну, чтобы тот вовремя переключал конфигурацию, наборы валидаторов и границы обработанных якорей.
Назначение
В стандартной реализации мемпул применяет состояние мастерчейна только после отдельного подтверждения от менеджера коллации.
- обновлять конфигурацию консенсуса
- обновлять наборы валидаторов
- понимать, до какого якоря блокчейн уже обработан
- очищать кэш старых якорей
Сигнал в режиме коллации
Во время коллации менеджер коллации обычно передает в мемпул новое состояние мастерчейна сразу после сборки мастер-блока.
В этом сигнале есть:
- идентификатор мастер-блока и его время цепочки
- граница обработанных якорей
- данные консенсуса и текущая конфигурация консенсуса
- признак перемешивания валидаторов при выборе подмножества
- предыдущий, текущий и следующий наборы валидаторов
Эта информация нужна мемпулу, чтобы заранее подготовить переход на следующее состояние. В стандартной реализации такое обновление еще не считается окончательно подтвержденным. Оно попадает во внутреннюю очередь и применяется только после отдельного сигнала о продвижении сети.
Сигнал после продвижения сети
Когда менеджер коллации уже знает, что сеть продвинулась по мастерчейну, он сообщает мемпулу подтвержденное состояние.
Это происходит в двух основных случаях:
- во время синхронизации, когда менеджер переходит на состояние по уже примененному мастер-блоку
- после того как менеджер завершил обработку сколлированного мастер-блока и может подтвердить его номер для мемпула
Это особенно важно при изменении конфигурации консенсуса. В таком случае менеджер коллации не отправляет обновление в мемпул сразу после сборки блока, а откладывает его до успешной обработки подтвержденного мастер-блока.
После этого мемпул применяет накопленные обновления для подтвержденного номера блока, продвигает безопасную верхнюю границу известных якорей и удаляет из кэша якоря до подтвержденной границы.
Очередь обновлений
В стандартной реализации мемпула обновления состояния сначала попадают во внутреннюю очередь и ждут подтверждения соответствующего мастер-блока.
Если подтвержден номер N, очередь сразу выпускает все накопленные обновления до N включительно. Это защищает мемпул от преждевременного перехода на состояние неподтвержденного мастер-блока и одновременно не теряет промежуточные подтвержденные версии.
Очередь также отбрасывает устаревшие обновления, не дает повторно применить уже пройденный номер блока и может заменить более раннюю неподтвержденную версию обновления для того же номера блока.