Вики ZooBC
Работа узла

Очередь

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

Порядок

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

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

Два прямоугольника в масштабе, ширина — стейк, высота — дни ожидания: 6 000 у A больше, чем 5 000 у B, поэтому A допускается первым
Два прямоугольника в масштабе, ширина — стейк, высота — дни ожидания: 6 000 у A больше, чем 5 000 у B, поэтому A допускается первым

У узлов в очереди нет оценки участия. Узел получает оценку по умолчанию 20 % при допуске, а таймер допуска впускает по одному узлу, так что два узла никогда не входят вместе.

Явка

Место предназначено для работающего узла, поэтому узел в очереди должен показывать, что он в сети, хотя бы раз в каждом окне из 5 760 блоков (одни сутки). Засчитывается любой признак узла в цепочке, например подписанная им аттестация. Если такого признака нет, программа узла сама отправляет транзакцию QueueAttendance (тип 59). Её комиссия берётся из стейка, никогда не опуская его ниже минимума, и уходит в пул долголетия.

Окно без единого признака перезапускает ожидание узла. За всё время ожидания узел может пропустить окна в объёме одного цикла допуска: max(2, максимальная задержка допуска ÷ одни сутки), то есть 90 окон в mainnet, где максимальная задержка — 90 дней. 91-е пропущенное окно исключает его из очереди. Кроме того, чтобы быть допущенным, узел должен был явиться в последнем оцениваемом окне.

Выход из очереди стоит 10 %

Отзыв узла из очереди стоит 10 % его стейка, даже если владелец пользуется положенной транзакцией RemoveNodeRegistration. Исключение за пропуск явки стоит те же 10 %. В обоих случаях остальные 90 % возвращаются владельцу (после исключения — сразу), а 10 % уходят в пул долголетия, который платит работающим узлам (пулы). Ничего не сжигается (ZBC никогда не сжигается).

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

Когда приостановлены все активные узлы

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

Как прочитать очередь

Очередь публична. GET /api/v1/nodes?status=queued перечисляет все узлы в очереди с их стейком и высотой регистрации, так что любой может вычислить порядок и увидеть, кто следующий.

См. также