Что означает термин «Самая длинная цепочка», поскольку существует только один «правильный» блокчейн? Как другая более длинная цепочка сделает «правильную» цепочку недействительной?
Система цепочки блоков Биткойна на самом деле представляет собой две совершенно разные системы, и их легко спутать. Первый — это дерево блоков, а второй — активная цепочка .
Дерево блоков состоит из всех действительных блоков, чье происхождение полностью известно, вплоть до блока генезиса. Правила валидности включают в себя отсутствие двойных расходов, действительные подписи, запрет на введение большего количества валюты, чем разрешено, ... Это правила сети, и каждый полный биткойн-узел проверяет их.
Активная цепочка — это один путь от блока генезиса вверху до некоторого листового узла внизу дерева блоков. Каждый такой путь является допустимым выбором, но ожидается, что узлы выберут тот, в котором больше всего «работы», о которой они знают (где работа в общих чертах определяется как сумма трудностей). Относительность и технологические ограничения не позволяют нам осуществлять мгновенную связь по всему миру, поэтому нельзя ожидать, что два узла выберут ту же цепочку, что и активный. Это не проблема: механизм майнинга гарантирует, что вероятность того, что два узла не будут согласны друг с другом по поводу блоков в прошлом, экспоненциально уменьшается по мере их старения.
Так что нет, "правильной цепи" не одна, их много. Узлы выбирают сами, но система предназначена для быстрого достижения консенсуса.
На практике правила таковы: когда приходит новый блок, расширяющий предыдущую активную цепочку, мы просто добавляем его в активную цепочку. Если нет, это зависит от того, имеет ли ветвь, которую он расширяет, больше работы, чем текущая активная ветвь. Если нет, мы сохраняем блок и останавливаемся. Если работы больше, мы проводим так называемую «реорганизацию»: деактивируем блоки из старой ветки и активируем блоки из новой ветки.
Представьте, что длина блокчейна составляет 210 000 блоков, и ДВА майнера находят действительные блоки с разницей в несколько секунд и передают их в сеть.
Это совершенно нормально, поскольку сеть Биткойн является одноранговой и глобальной.
Теперь у вас есть две цепочки, каждая длиной 210001. Ни одна из них не длиннее другой. Некоторые узлы bitcoind увидят первый блок майнера, а некоторые узлы bitcoind увидят второй.
Временно у вас есть два форка блокчейна, каждый из которых имеет длину 210001 блок. Они идентичны для 210000 блоков, но 210001-й отличается на двух вилках.
Некоторое время спустя другой майнер находит другой действительный блок, 210002-й блок, и он будет прикреплен ровно к одному из форков.
Эта цепочка теперь самая длинная из 210002 блоков и становится самой длинной цепочкой. Он становится «окончательным» блокчейном.
(Транзакции в альтернативном форке не исчезают — они просто возвращаются в пул неподтвержденных транзакций, и майнеры помещают их в следующий блок).
Нур
Питер Уилле
Дайра Хопвуд
Чан-Хо Со