Что означает термин «Самая длинная цепь»?

Что означает термин «Самая длинная цепочка», поскольку существует только один «правильный» блокчейн? Как другая более длинная цепочка сделает «правильную» цепочку недействительной?

Ответы (2)

Система цепочки блоков Биткойна на самом деле представляет собой две совершенно разные системы, и их легко спутать. Первый — это дерево блоков, а второй — активная цепочка .

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

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

Так что нет, "правильной цепи" не одна, их много. Узлы выбирают сами, но система предназначена для быстрого достижения консенсуса.

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

Сэр, как узел выбирает самый последний блок на самом длинном пути; например, предположим, что узел знает две подцепи, как он определяет, какая из них длиннее? Будет ли он просто сравнивать их длины (количество блоков)? Спасибо.
Мы смотрим на объем работы в каждой цепочке: ожидаемое количество хэшей, которые были необходимы для их построения. Это примерно соответствует сумме сложностей блоков в обеих цепочках (что почти всегда равносильно простому сравнению длины, если только вилка не охватывает ретаргетинг).
Этот ответ точно не определяет «работу». Работа блока фактически определяется как пол (2 ^ 256 / (цель + 1)), где «цель» — это целевой порог, преобразованный из поля «nBits» заголовка блока. (См. функцию GetBlockProof в src/pow.cpp.)
@DairaHopwood полезный комментарий, хотя технически комментарий прямо над вашим определяет его («ожидаемое количество хэшей ..») :). Для тех, кому интересно, откуда берется формула: ожидаемое количество хэшей равно 1/p, где p — вероятность хеширования до цели или ниже, поэтому p = (цель + 1)/2^256. («+1» означает, что хеш считается со всеми нулями).

Представьте, что длина блокчейна составляет 210 000 блоков, и ДВА майнера находят действительные блоки с разницей в несколько секунд и передают их в сеть.

Это совершенно нормально, поскольку сеть Биткойн является одноранговой и глобальной.

Теперь у вас есть две цепочки, каждая длиной 210001. Ни одна из них не длиннее другой. Некоторые узлы bitcoind увидят первый блок майнера, а некоторые узлы bitcoind увидят второй.

Временно у вас есть два форка блокчейна, каждый из которых имеет длину 210001 блок. Они идентичны для 210000 блоков, но 210001-й отличается на двух вилках.

Некоторое время спустя другой майнер находит другой действительный блок, 210002-й блок, и он будет прикреплен ровно к одному из форков.

Эта цепочка теперь самая длинная из 210002 блоков и становится самой длинной цепочкой. Он становится «окончательным» блокчейном.

(Транзакции в альтернативном форке не исчезают — они просто возвращаются в пул неподтвержденных транзакций, и майнеры помещают их в следующий блок).

Но был ли награжден тот единственный блок, который был в цепочке 210001? Сеть выбрала цепочку 210002, и транзакции из цепочки 210001 перерабатываются для следующего блока (210003?), а 210001-й уходит?
Насколько я понимаю, в большинстве случаев транзакции в каждом из форков в основном одинаковы. Любые платные транзакции в (скоро-будущем) потерянном блоке (например, 210001B), вероятно, будут включены в блок, следующий за ним (например, 210002), потому что эти транзакции считаются все еще доступными для майнеров, работающих на своем собственном форке (210001A). . Им не нужно было бы ждать блока 210003, как следует из последнего абзаца.
Это прекрасное описание прояснило для меня ситуацию, спасибо! и ответ, который я искал, таков: возможно, что в блоке N два блока транслируются почти одновременно, но очень маловероятно, что это происходит дважды подряд, и исчезающе вероятно, что это происходит три раза подряд, таким образом вещи сходятся быстро. Мой следующий вопрос: было ли когда-нибудь (или недавно было), чтобы это происходило дважды подряд, таким образом, было 3 или четыре цепочки одинаковой длины, и майнеры начинали работать на каждой? Думаю, я найду обозреватель блокчейна и начну искать...
Это хороший ответ!