@Dusk
Сначала я предположил, что аварийный режим Даска — это в первую очередь резерв на случай зависшей генерации блоков. Но чем больше я смотрел, тем яснее становилась одна маленькая деталь: открытые итерации могут продолжаться одновременно. Новая итерация стартует после максимального тайм-аута шага, при этом более ранние итерации остаются в живых, пока они не достигнут кворума. Это означает, что протокол принимает временные параллельные попытки, вместо того чтобы заставлять сеть ждать один застрявший путь. Очевидная цена — что в итоге несколько кандидатов могут прийти к консенсусу, создавая форк, который затем нужно разрешить, выбрав наименьшую итерацию. Мне этот компромисс кажется более интересным, чем само слово «аварийный». Даск по сути обменивает некоторую краткосрочную неразбериху на более высокие шансы, что хотя бы один путь будет продвигаться, когда провижайнеры отсутствуют или изолированы. Возможно, это разумный сценарий отказа, но он переносит сложность из ожидания в разрешение форков.
Заставляет задуматься: не бывает ли так, что устойчивость иногда меньше про то, чтобы избегать неприятных состояний, и больше про то, чтобы обеспечить детерминированный выход из этой неразберихи?
@Dusk #dusk $DUSK