#dusk $DUSK @Dusk

Я рассматривал механизм Fallback у Dusk, и одна вещь сразу бросилась мне в глаза: номер итерации на самом деле очень важен, когда происходит форк.

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

Базовое правило такое: приоритет получает меньшая итерация. Если блок из итерации 1 будет принят, но позже блок из итерации 0 наберёт кворум, то блок меньшей итерации может заменить его. Узел откатывается к состоянию до старого блока и перестраивает цепочку.

Из-за этого итерация 0 становится особенно интересной. Итерация 0 — это первая попытка, за ней идут итерации 1, 2 и так далее. Поскольку итерации -1 не существует, блок итерации 0 нельзя напрямую заменить через Fallback более низкой итерацией.

Но я бы не назвал это полной финальностью. Блок итерации 0 всё ещё может быть затронут, если откатывается один из его предков. Реальная финаль проходит через Rolling Finality.

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