#dusk $DUSK @Dusk
Я рассматривал механизм Fallback у Dusk, и одна вещь сразу бросилась мне в глаза: номер итерации на самом деле очень важен, когда происходит форк.
Поскольку консенсус Dusk асинхронный, сообщения могут приходить с опозданием или теряться во время перегрузок. Поэтому разные части сети могут видеть разные блоки, и иногда более одного кандидата может набрать кворум в одном и том же раунде.
Базовое правило такое: приоритет получает меньшая итерация. Если блок из итерации 1 будет принят, но позже блок из итерации 0 наберёт кворум, то блок меньшей итерации может заменить его. Узел откатывается к состоянию до старого блока и перестраивает цепочку.
Из-за этого итерация 0 становится особенно интересной. Итерация 0 — это первая попытка, за ней идут итерации 1, 2 и так далее. Поскольку итерации -1 не существует, блок итерации 0 нельзя напрямую заменить через Fallback более низкой итерацией.
Но я бы не назвал это полной финальностью. Блок итерации 0 всё ещё может быть затронут, если откатывается один из его предков. Реальная финаль проходит через Rolling Finality.
Поэтому, как я это вижу, Fallback — это больше, чем просто очистка после форка. Номер итерации даёт сети детерминированный способ выбирать между конкурирующими блоками, при этом итерация 0 находится в самом низу этого приоритетного порядка.
Я рассматривал механизм Fallback у Dusk, и одна вещь сразу бросилась мне в глаза: номер итерации на самом деле очень важен, когда происходит форк.
Поскольку консенсус Dusk асинхронный, сообщения могут приходить с опозданием или теряться во время перегрузок. Поэтому разные части сети могут видеть разные блоки, и иногда более одного кандидата может набрать кворум в одном и том же раунде.
Базовое правило такое: приоритет получает меньшая итерация. Если блок из итерации 1 будет принят, но позже блок из итерации 0 наберёт кворум, то блок меньшей итерации может заменить его. Узел откатывается к состоянию до старого блока и перестраивает цепочку.
Из-за этого итерация 0 становится особенно интересной. Итерация 0 — это первая попытка, за ней идут итерации 1, 2 и так далее. Поскольку итерации -1 не существует, блок итерации 0 нельзя напрямую заменить через Fallback более низкой итерацией.
Но я бы не назвал это полной финальностью. Блок итерации 0 всё ещё может быть затронут, если откатывается один из его предков. Реальная финаль проходит через Rolling Finality.
Поэтому, как я это вижу, Fallback — это больше, чем просто очистка после форка. Номер итерации даёт сети детерминированный способ выбирать между конкурирующими блоками, при этом итерация 0 находится в самом низу этого приоритетного порядка.
