Коллатор

Менеджер коллации

Менеджер коллации это компонент ноды, который оркестрирует выпуск блоков. Он принимает события из нескольких источников:

  • DAG-мемпула с внешними сообщениями и якорями
  • процесса коллации блоков
  • процесса верификации мастер-блоков
  • состояния сети, полученного по сетевому протоколу

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

Две цепочки

В Tycho менеджер ведет коллацию для двух цепочек.

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

Менеджер хранит статусы по рабочей цепочке и по мастерчейну.

  • Коллация: коллатор продолжает попытки собрать блок текущей цепочки и при необходимости импортирует следующий якорь.
  • Ожидание мастер-блока: коллатор рабочей цепочки временно останавливает коллацию и ждет решения по выпуску мастер-блока.
  • Ожидание блока рабочей цепочки: коллатор мастерчейна ждет готовность рабочей цепочки.
  • Готовность к выпуску мастер-блока: рабочая цепочка уже готова перейти к коллации мастер-блока и больше не продолжает попытки коллации следующих блоков.

Цикл принятия решения

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

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

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

Импорт следующего якоря

Следующий якорь импортируется внутри коллатора по детерминированным условиям.

Импорт запускается, если выполняется хотя бы одно условие:

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

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

Выпуск блока рабочей цепочки

Коллатор рабочей цепочки выпускает блок, если выполнено хотя бы одно условие:

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

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

Выпуск мастер-блока

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

Менеджер учитывает следующие причины форсирования выпуска мастер-блока:

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

Также менеджер учитывает минимальный и максимальный интервалы выпуска мастер-блока.

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

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

Отмена коллации

Отмена коллации это остановка выпуска новых блоков и переход в режим синхронизации с сетью.

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

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