На прошлой неделе отправил посылку с курьером не тот предмет; после звонка в службу поддержки мне объяснили: статус доставки — это не просто «отправили» или «не отправили» в чёрно-белом смысле. Между ними ещё есть этапы вроде «отправлено», «в пути», «получено». На каждом этапе можно ли перехватить/отозвать посылку — правила полностью разные. Я повесил трубку и вдруг подумал: подтверждение в блокчейне — это тот же принцип. Это не просто «подтвердили» или «не подтвердили».

Состояния блоков у Dusk разбиты на четыре уровня. Новый блок, который впервые проходит голосование, сразу считается «attested» (подтверждён). Если раньше были неудачные раунды голосования, и только сейчас он проходит, это «accepted» (принят); при этом его ещё может вытеснить блок с более низкой очереди/раунда. Дальше: когда к «attested»-блоку цепляются последующие блоки, он становится «confirmed» (подтверждён окончательно). А «accepted»-блоку нужно дождаться определённого количества последующих блоков, которые удержат его и только тогда он перейдёт в «confirmed». В финальном шаге «confirmed»-блок может стать «final» (окончательный) только при условии, что его «родительский» блок тоже находится в состоянии final. Как только этот статус достигнут — он полностью необратим.

Эта схема уровней решает задачу «как быстро можно быть уверенным». Не нужно, чтобы все блоки ждали самого высокого уровня: для лёгких сценариев можно запускать всё, когда достаточно «attested». Для тяжёлых/капиталоёмких сценариев приходится ждать до «final», чтобы по-настоящему не сомневаться. Разные пороги подтверждения соответствуют разной степени допустимого риска — эта гибкость очень полезна.

Но цена — сложность: обычному пользователю трудно понять, на каком именно уровне сейчас находится его транзакция. Сейчас это в основном зависит от того, как показывают информацию узлы и что отображает кошелёк; насколько хороша в итоге работа, зависит от фактической реализации.
$DUSK
#dusk @Dusk