Один из моментов, которые часто поднятые является то, что Bitcoin решает "распределенная проблема консенсуса",
Это означает, что все узлы договариваются о правилах сети.
Режим большого провала, где большинство хэширования мощности шахт вилка, которые меньшинство узлов считают недействительным.
Это произошло во время обновления до 8.x.
Я думаю, что вместо ставки все на предотвращение его, было бы лучше, чтобы он не в состоянии более изящно. Это позволит уменьшить аварийный характер события, дать больше времени для того, чтобы быть обработаны, и снизить риск для пользователей сети в течение этого времени.
Пример, где есть 2 вилки
Вилка A:
75% шахтеров думают, что это действует
75% шахтеров думают, что это самая длинная вилка
Вилка B
100% шахтеров думают, что это действует
25% шахтеров думают, что это самая длинная вилка
Это считается критическим провалом, так как некоторые из сети будут следовать одной вилке, а некоторые будут следовать за другие.
Идеальное решение в том, что все шахтеры переключиться на вилке B, так как 100% шахтеров считают действительным.
обнаружение
На данный момент, узлы не могут даже обнаружить, что проблема возникает. Узлы, которые находятся на вилке А не вперед вилка B блоков, так как они не проходят основную цепь (и наоборот).
До тех пор, пока существует достаточно смешивания узлов, блоки все еще могут быть распределены в любом случае. Если тип A узлы и узлы типа B по отдельности образуют 2 смежных сетей и каждый узел соединен с по меньшей мере 1 каждого типа, то блоки для обеих вилок будет по-прежнему быть распределены (но менее эффективно).
Я думаю, что заголовки для всех вилок должны быть распределены (если вилка точка не было много лет назад).
Таким образом, если блок (или заголовок), принимается, который проходит ветвь дерева, отделилась менее 1008 блоков назад, то заголовок должен быть направлен. Если оно продолжается основная цепь, то весь блок должен быть переадресован (как это происходит сейчас).
Сверстники могут потянуть блок, как только они получают заголовок, если они являются более новыми узлами.
Я предложил в другом месте, чтобы обеспечить низкие заголовки POW будет транслироваться. Это означает, что немного больше сетевого трафика, но дает узлам более точную оценку количества хеширования мощности на каждой развилке.
Меры предосторожности
Лучшее решение для предотвращения проблемы происходит в первую очередь.
Бассейны следует рекомендовать, чтобы запустить все популярные версии клиента. Если какой-либо из клиентов отказаться от блока, то пул должен отклонить блок (или, по крайней мере, прекратить строительство на нем). Я думаю, что некоторые бассейны уже делают это?
Если большая часть мощности хэширования из пулов, которые реализуют эту политику, то провал гораздо менее вероятен. По крайней мере, один из клиентов будут отвергать вилку, но все они будут принимать вилки B, поэтому бассейны добавят свое хеширование силы раскошелиться B.
Скорость сиротой будет возрастать, но тип В вилке будет "выиграть", Поэтому вся сеть будет следовать той же вилкой.
Пулы могут опубликовать блоки, которые были отвергнуты и которые клиент имел проблемы. Клиентские Сопровождающие можно было бы ожидать, чтобы обновить свое программное обеспечение быстро.
Проблема в том, что это не поможет в ситуации, когда некоторые шахтеры используют нестандартное программное обеспечение.
Реагируя
Если вилка получает значительную часть горной мощности, то 2 вилки могут быть помечены как "жить", Порог может быть длиной 2 блока и по меньшей мере один блок был добавлен к развилке в течение последних 2-х часов. Это означает, что 2 блок-сирота может затормозить операции в течение 2 часов, так что, вероятно, слишком строги.
Клиент может разобрать альтернативную вилку, не делая какие-либо проверки сценария и сканирование для выполнения операций. Если другие клиенты не испортили SHA256 и / или формат сделку, все клиенты могли проверить, что было потрачено на альтернативной вилке.
Это означает, что клиент может дать несколько счетчиков подтвердить для каждой транзакции.
"Подтверждено 6/25" означает, что она имеет 6 подтверждает на главной цепи и 25 подтверждает на альтернативной цепи. Это указывает на то, что клиент отслеживает цепь меньшинства, так как "альт" цепь имеет больше энергии, чем хэширования основной цепи.
Аналогично, 6 / D, будет означать, что она имеет 6 подтверждает на главной цепи, но уже дважды провели на альтернативной цепи.
"подтверждает" Общее будет самым низким из всех живых вилок.
Шахтеры должны сканировать обе вилки для операций и отвергают любые, которые дважды тратит.
Это может включать в себя отвергая блоки. Тем не менее, что открывает двойные проблемы расходования своих собственных.
Самым безопасным может быть для реализации основного положения, что операции не должны быть включены в блоки, если они не были получены, по крайней мере 5 минут раньше, и никаких двойных затрат для сделки не было получено (двойной затрачивает должны быть направлены для того, чтобы работать). Это правило следует активировать, когда событие разветвления обнаружено.
Активный Реагируя
Если шахтер замечает, что есть 2 вилки, и оба правильны, они могут переключиться на тот, который принимается большинством шахтеров.
Пока неясно, как лучше всего это сделать в распределенной манере.
Дополнительное поле заголовка может быть добавлено, чтобы шахтер мог указать, какие сети доступны. Тем не менее, есть стимул лгать об этом, так как потери тока цепи означает потерю coinbase награды.