Коллатор

Единицы работы в коллаторе

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

Свойства

Коллатор принимает критичные решения по накопленной работе, а не по локальному времени сервера.

Это дает два свойства.

  • одинаковые решения у честных нод при одинаковом входе
  • устойчивость к разной производительности машин

Правила подсчета

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

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

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

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

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

Импорт якорей

После финализации обновляется суммарная накопленная работа после последнего якоря.

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

Конфигурация единицы работы

Значения единиц работы хранятся on-chain в параметре 28. Благодаря этому все честные ноды используют одинаковые параметры подсчета.