Единицы работы в коллаторе
Единицы работы задают детерминированную оценку объема работы коллатора и используются как один из сигналов для импорта следующего якоря без привязки к локальному времени сервера.
Свойства
Коллатор принимает критичные решения по накопленной работе, а не по локальному времени сервера.
Это дает два свойства.
- одинаковые решения у честных нод при одинаковом входе
- устойчивость к разной производительности машин
Правила подсчета
Единицы работы считаются по общим on-chain параметрам, поэтому все честные ноды при одинаковом входе получают один и тот же результат. В расчете участвуют несколько стадий коллации: подготовка первого блока рабочей цепочки после мастер-блока, подготовка групп сообщений, выполнение групп и финализация блока.
Подготовка первого блока рабочей цепочки после мастер-блока добавляет отдельную стоимость возобновления коллации. Эта добавка зависит от состояния рабочей цепочки и учитывается только один раз, чтобы первый блок после мастер-блока сразу включал стоимость возврата к обычному ритму коллации.
Подготовка групп считает фиксированную стоимость этапа, стоимость чтения внешних сообщений, чтения уже существующих внутренних сообщений, чтения новых внутренних сообщений и операций по добавлению сообщений в группы. Этот этап дает детерминированную цену за набор данных, которые будут переданы на выполнение.
Выполнение групп состоит из двух частей. Сначала считается стоимость исполнения каждой группы в виртуальной машине. Она зависит от числа аккаунтов в группе, общего расхода газа и числа потоков, на которые можно распараллелить работу. Затем отдельно считается стоимость постобработки по числу входящих, исходящих и новых сообщений с логарифмическими множителями.
Финализация блока считает стоимость создания разницы очереди сообщений, стоимость применения этой разницы, стоимость обновления состояния аккаунтов рабочей цепочки, сборки блоков аккаунтов, словарей входящих и исходящих сообщений, построения обновления состояния и сериализации блока. Итоговая стоимость этого этапа равна стоимости создания разницы очереди сообщений плюс максимум между стоимостью применения разницы очереди сообщений и полной стоимостью финализации блока.
Импорт якорей
После финализации обновляется суммарная накопленная работа после последнего якоря.
Если накопленная работа превышает порог импорта следующего якоря, коллатор импортирует якорь и уменьшает накопленную работу на один такой порог. Это может повторяться несколько раз подряд, пока оставшееся значение не станет меньше порога.
Конфигурация единицы работы
Значения единиц работы хранятся on-chain в параметре 28. Благодаря этому все честные ноды используют одинаковые параметры подсчета.