Сильнейшая цепочка против самой длинной цепочки и осиротевших блоков

Сатоши пишет в нижней части страницы 3 своего официального документа: «Если два узла одновременно транслируют разные версии следующего блока, некоторые узлы могут получить сначала один или другой. В этом случае они работают с первым полученным, но сохраните другую ветку на случай, если она станет длиннее». Здесь кажется, что правильная цепочка самая длинная, хотя, возможно, Сатоши просто немного небрежно формулировал.

Однако я читал в других местах, что узлы выбирают правильную цепочку в Биткойне, выбирая цепочку, представляющую наибольшую работу (или, другими словами, цепочку, которую труднее всего отменить). Я назову это самой прочной цепью. Это не обязательно то же самое, что и самая длинная цепочка, поскольку, например, можно представить себе блок, в котором требуется гораздо больше хэшей, чтобы найти действительный одноразовый номер, чем в двух других блоках с гораздо более простым уровнем сложности. Этот обмен стеками - одно из мест, где я это читал.

Вопрос 1 : Какой правильный метод используют узлы для определения правильной цепочки, самой длинной цепочки или самой сильной цепи?

Мой второй вопрос более актуален, если ответ на вопрос 1 заключается в том, что правильная цепочка — это самая сильная цепочка. Это относится к потерянным блокам.

Если правильная цепочка представляет собой наибольшую работу, то почему потерянные блоки представляют собой такую ​​проблему? Кажется, что если нода решает блок и транслирует его, то все узнают об этом за считанные секунды, а затем могут начать добычу нового блока без лишних усилий. Даже если 2 майнера решат блок одновременно (почти), большинство блоков увидят два новых блока и выберут тот, у которого меньший хэш заголовка (потому что более низкие хэши найти труднее). Кажется, что узлы должны прийти к консенсусу за считанные секунды, если правильная цепочка выбрана самой сильной (а не самой длинной) цепочкой. Единственное время, которое майнер может потратить на работу с неправильной цепочкой, — это время, потраченное на майнинг между получением решенного блока, который вскоре после этого заменяется другим решенным блоком с немного более низким хэшем.

Вопрос 2 : Блоки-сироты — большая проблема для майнеров? Если бы время генерации блока составляло 1 минуту, были бы потерянные блоки гораздо большей проблемой?

Ответы (1)

Самая «длинная» цепочка — это та, в которой больше всего работы . Работа цепочки равна ожидаемому количеству хэшей, которое потребуется для того, чтобы кто-то воспроизвел цепочку из того же количества блоков и точно таких же шагов сложности. Таким образом, в настоящее время каждый блок добавляет в цепочку около 2 66 хэшей, потому что для решения блока с текущей сложностью требуется в среднем ~ 2 66 хэшей. Блоки с меньшей сложностью добавляют меньше работы. (Текущая общая работа в цепочке составляет около 2 80 .) Однако два блока в одном и том же периоде сложности всегда добавляют к цепочке одинаковое количество работы. Блок с более низким хэшем не считается лучше, чем блок с более высоким хэшем.

Сатоши изначально не понимал, что выбор правильной цепочки путем простого подсчета блоков позволяет проводить чрезвычайно простые атаки. Версия 0.1 просто считала блоки. Вот почему в газете просто написано «самый длинный». Идея «цепной работы» была добавлена ​​чуть позже.

Разрешение сирот, как вы предлагаете, может на самом деле сделать сирот более вероятным, потому что в некоторых случаях майнеры будут заинтересованы в том, чтобы попытаться заменить самый последний блок, а не расширить его, особенно прямо перед большой корректировкой сложности или когда самый последний блок содержит много комиссий.

Блоки-сироты случаются время от времени. Элигиус сообщает о 2% потерянных блоков. Они действительно были бы гораздо более распространенными, если бы целевое время составляло 1 минуту, поскольку блоки генерировались бы быстрее и, следовательно, было бы больше возможностей для конфликтов между блоками.

Хотя это может повысить вероятность появления сирот, не сведет ли таким образом выбор правильной цепочки к минимуму суммарный эффект сиротства? Потому что прямо сейчас, если кто-то получит широковещательный блок, который в конечном итоге не будет правильным блоком, он потратит впустую все 10 минут, извлекая этот блок, пока не будет решен следующий блок. Похоже, что сеть придет к консенсусу быстрее и будет майнить только на правильных блоках.
Что касается майнеров, пытающихся отменить блоки, кажется, что разумные майнеры не будут делать этого большую часть времени. Каждый одноразовый номер подобен лотерейному билету, и если они увидят, что вышел новый блок, я не понимаю, почему они будут продолжать тратить свои лотерейные билеты на майнинг поверх старого блока, а не на новый, который, скорее всего, будет принято. В тех двух случаях, которые вы упомянули, я понимаю, почему они могут попытаться отменить самую последнюю блокировку (хотя сборы сейчас не кажутся достаточным стимулом), но они кажутся скорее исключениями, чем правилом для того, что было бы случаться.
@StephenM347 Ваша система также упростит двойные траты мощными майнерами. В настоящее время, если у вас есть приличная мощность майнинга и вы хотите отменить транзакцию с 1 подтверждением, вам нужно майнить два блока подряд. Но с вашей системой майнер мог бы вместо этого просто заменить последний блок, что во многих случаях было бы намного проще, чем решение двух блоков подряд (в зависимости от «силы» последнего блока).
@StephenM347 В любом случае сироты не представляют большой проблемы для сети, поэтому нет необходимости что-то менять. Майнеры не любят сирот, потому что из-за этого они теряют блоки или напрасно работают, но делать майнеров счастливыми не важно.
Являются ли чрезвычайно простые атаки, которые вы здесь упоминаете, ограничены атакой деформации времени? Даже если бы атака искажения времени не была проблемой, было бы плохо сравнивать цепочки по длине?
@StephenM347StephenM347 Деформация времени не имеет значения. Чрезвычайно простая атака заключается в том, что проще создать 400 000 блоков сложности 1, чем создать 1 блок текущей сложности. Так что, если бы имело значение только количество блоков (и не было контрольных точек), текущую цепочку можно было бы очень легко обойти.
Что ж, чтобы добыть 400 000 блоков на минимальной сложности, вам придется изменить временные метки, чтобы они были действительно далеко в будущем (при условии, что вы не можете использовать искажение времени), и в этом случае цепочка не будет принята как правильная. цепь. Я думаю, что атака искажения времени актуальна, потому что она позволяет вам добывать больше блоков с минимальной сложностью, не отодвигая метки времени далеко в будущее. У меня есть открытый вопрос по этому поводу здесь .
Если «самая длинная» цепочка — это та, в которой больше всего работы, а два блока в один и тот же период сложности всегда добавляют к цепочке одинаковое количество работы, почему неправильно просто считать блоки? Какие чрезвычайно простые атаки он позволяет?
Этот ответ точно не определяет «работу». Работа блока фактически определяется как пол (2 ^ 256 / (цель + 1)), где «цель» — это целевой порог, преобразованный из поля «nBits» заголовка блока. (См. функцию GetBlockProof в src/pow.cpp.)
История действительно была интересной.