Давайте предположим, что узел синхронизируется до блока # 100 и получает цепочку от # 90 до # 100, который утверждает, что лучше. Но на самом деле, в блоке # 95, есть двойная сумма расходы (от Ого создана в # 91 новой вилки), что делает # 95 до # 100 недействительны.
Тем не менее, даже без этих блоков военнопленный из # 90 до # 94 превышает наш текущий лучший, и мы должны Reorg к новой цепи # 90-94.
Интересно, как Bitcoin ядро (и альтернативные реализации) обрабатывать этот случай.
первый скачивает цепь заголовка. После того, как он получает новый # 90 до # 100 заголовков, он признает необходимость повторного орг.
Она выполняет разъединение # 100 назад # 90, один за один раз. Это вызывает обновление набора UTXO. Каждый блок хранится на диске, но также включает в себя "расстегивать" Информация, которая позволяет отключить, чтобы отменить изменения, внесенные в UTXO набор, включив в этот блок.
После того, как он был отключен # 90, это будет вернуть государству от до этой развилки (# 90 - # 100) был использован.
Затем начинается подключение нового # 90 и далее. После того, как она попадает # 95, то
ConnectTip функция не сможет подключиться новый блок из-за двойные расходы. Это приводит к тому, что в черный список блока (RAM только, я думаю). Это означает, что он будет игнорировать эти заголовки из этого момента. Это предотвращает его переключение и обратно между вилками.
Если новый # 94 имеет более высокую работу, чем старые # 100, это не нужно делать ничего больше. Этот блок является самой длинной цепью. Шахтеры в конечном итоге расширить эту цепочку с еще более новым # 95. Обычно, хотя, # 100 будет иметь более высокую работу, чем # 95, если вилки не пересекают регулировки сложности.