Лето наконец-то подходит к концу, а температура постепенно снижается. На прошлой неделе, когда я ехал на машине с семьёй отдыхать, на скоростной трассе внезапно произошла авария. Навигатор в срочном порядке указал мне объездную дорогу, но машина позади не перестроилась и продолжила ехать по первоначальному маршруту. Две линии шли параллельно почти десять минут; позже авария была ликвидирована, и только тогда система снова перенаправила всех на главную дорогу — в течение этого времени никто не знал, какой из маршрутов является тем самым «окончательным путём».
В механизме консенсуса Dusk есть похожие ситуации «ветвления», они называются fallback (откат). Из‑за асинхронности сети сообщения могут задерживаться или теряться. В одной и той же «раундовой» итерации иногда случается, что сразу несколько кандидатов блоков одновременно достигают консенсуса — это и есть разветвление. Правила обработки очень простые: считается тот блок, который достиг консенсуса в более низкой итерации (iteration). Блоки из более высокой итерации будут заменены блоками из низкой: цепочка откатится к тому блоку, который существовал до разветвления, а затем присоединится к ветке, где консенсус был достигнут раньше. Вся цепочка, которая была вытеснена, после него также становится недействительной — все последующие блоки в ней отменяются.
Есть тонкость, которую легко упустить: блоки, достигшие консенсуса в iteration 0, — единственные, которые никогда не будут «вытеснены», потому что нет более низкой итерации. Но даже если это так, если собственный «родительский блок» позже оказался в результате отката, то он всё равно будет откатан — это не абсолютная защита, а лишь относительно более надёжная позиция.
Эта схема предназначена для того, чтобы решить задачу «как завершить временное ветвление из‑за задержки сетевых сообщений». Но цена за это — кратковременная неопределённость на блокчейне: только что вышедшие блоки, особенно с более высокими итерациями, теоретически могут быть вытеснены. Нужно дождаться последующих блоков, которые «приварят» его к цепочке, чтобы можно было по-настоящему расслабиться.
$DUSK
#dusk @Dusk