Коллатор

Очереди сообщений

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

Внутренние сообщения

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

Для обработки этого потока коллатор одновременно ведет две очереди.

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

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

Внешние сообщения

Внешние сообщения поступают в коллацию через якоря DAG-мемпула.

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

Правила чтения внешних сообщений и проверка их срока годности заданы единым алгоритмом и одинаково выполняются на всех нодах сети.

Синхронизация

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

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

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